src-d / kmcuda

Large scale K-means and K-nn implementation on NVIDIA GPU / CUDA
Other
783 stars 144 forks source link

C code #126

Open m-meli opened 11 months ago

m-meli commented 11 months ago

Hi,

i trj to edit the example.c to fit the source of my data like this:

==

include

include

include

include

include "kmcuda.h"

int main(int argc, const char* argv) { assert(argc == 5); float Matrix, centroids, average_distance; int i, j, clusters_size; uint32_t DimX, DimY, assignments; FILE* MatInput;

if (argv[1] != NULL) { MatInput = fopen(argv[1], "r"); } else exit(1);

if (argv[2] != NULL) { DimX = atoi(argv[2]); } else exit(1);

if (argv[3] != NULL) { DimY = atoi(argv[2]); } else exit(1);

if (argv[4] != NULL) { clusters_size = atoi(argv[4]); printf("%d\n\n", clusters_size); } else exit(1);

Matrix = calloc(DimX * DimY, sizeof(float)); // printf("%d %d %d", DimX, DimY, clusters_size);

for (i = 0; i < DimX DimY; i++) { fscanf(MatInput, " %d %*d %f", &Matrix[i]); } fclose(MatInput);

for (i = 0; i < 10; i++) printf(" %f \n", Matrix[i]); printf("\n");

// we will store cluster centers here centroids = calloc(DimX DimY, sizeof(float)); assert(centroids); // we will store assignments of every sample here assignments = calloc(DimX DimY, sizeof(uint32_t)); assert(assignments);

KMCUDAResult result = kmeans_cuda( kmcudaInitMethodPlusPlus, NULL, // kmeans++ centroids initialization 0.01, // less than 1% of the samples are reassigned in the end 0.1, // activate Yinyang refinement with 0.1 threshold kmcudaDistanceMetricL2, // Euclidean distance DimX, DimY, clusters_size, 0xDEADBEEF, // random generator seed 0, // use all available CUDA devices -1, // samples are supplied from host 0, // not in float16x2 mode 2, // moderate verbosity Matrix, centroids, assignments, &average_distance);

free(Matrix); free(centroids); free(assignments); assert(result == kmcudaSuccess); printf( "Average distance between a centroid and the corresponding " "cluster members: %f\n", average_distance); return 0; } ==

But at the end i get this error:

== ./example Mat_2.dat 1000 1000 2 2

0.000000 0.071224 0.110585 0.087457 0.082495 0.096096 0.109748 0.095193 0.101874 0.155612

arguments: 1 (nil) 0.010 0.10 0 1000 1000 2 3735928559 0 0 2 0x7fd68c22f010 0x7fd68be5e010 0x7fd68ba8d010 0x7ffc0c933d54 reassignments threshold: 10 yinyang groups: 0 example: Kmeans_Cuda.c:70: main: Assertion `result == kmcudaSuccess' failed. Aborted (core dumped)

==

the input data is a symmetric matrix. Anyone knows which could be the source of the error?

thanks a lot