def _build_k_prototypes(self, nprot, data): # K-Means / K-Medoids algorithm # should return a N-length array with he indices of the chosen data grouper = K_Means() grouper._centroid_mode = "index" grouper.fit(data, nprot, iters=300, mode="cuda", cuda_mem='manual', tol=1e-4, max_iters=300) centroids = grouper.centroids nclusters = centroids.shape[0] # TODO - very inefficient k_labels = np.zeros(nclusters, dtype=np.int32) for k in xrange(nclusters): dist = data - centroids[k] dist = dist**2 dist = dist.sum(axis=1) k_labels[k] = dist.argmin() return k_labels
startE = cuda.event() endE = cuda.event() startE.record() _cu_label_kernel_dists[gridDim,blockDim](dData,dCentroids,dLabels,dDists) endE.record() endE.synchronize() print cuda.event_elapsed_time(startE,endE) startE.record() dDists.copy_to_host(ary = generator._dists) labels = dLabels.copy_to_host(ary = generator.labels) endE.record() endE.synchronize() print cuda.event_elapsed_time(startE,endE) del generator, dData, dCentroids, dLabels, dDists generator = K_Means(mode="numpy") generator.n_clusters = 176 generator.max_iter = 1 generator.fit(data) generator = K_Means(mode="cuda", cuda_mem="manual") generator.n_clusters = 176 generator.max_iter = 1 generator.fit(data) if __name__ = "__main__": main()