Ich bin ein Neuling für CUDA. Ich habe einfach versucht, ein Array mit Thrust zu sortieren.Langsame Sortierung mit Schub, CUDA
clock_t start_time = clock();
thrust::host_vector<int> h_vec(10);
thrust::generate(h_vec.begin(), h_vec.end(), rand);
thrust::device_vector<int> d_vec = h_vec;
thrust::sort(d_vec.begin(), d_vec.end());
//thrust::sort(h_vec.begin(), h_vec.end());
clock_t stop_time = clock();
printf("%f\n", (double)(stop_time - start_time)/CLOCKS_PER_SEC);
Zeit nahm d_vec
ist 7.4s zu sortieren, und die Zeit nahm h_vec
ist 0,4s
zu sortieren ich auf Gerätespeicher seine parallele Berechnung gehe davon aus, so sollte es nicht schneller sein?
Höchstwahrscheinlich messen Sie die [Zeit für die Kontexterstellung] (http://stackoverflow.com/q/10415204)/5085250). Außerdem können Sie nicht erwarten, dass * kleine * Vektoren auf hochparallelen Architekturen schneller sortiert werden. Versuchen Sie mit Vektorgrößen >> 10000. – havogt
Ja, Sie haben Recht, diese Zeiten waren bei der ersten Ausführung. Außerdem habe ich versucht mit 50k Punkten, und ich habe Timing auf Host und Gerät auf 0,12s. Der Unterschied wird groß, wenn die Größe nahe bei 100000 liegt. Kann ich davon ausgehen, dass das Sortieren mit h_vec auf der CPU erfolgt? – Syed
Ja, das Sortieren nach 'h_vec' erfolgt auf dem Host. Vielleicht sollten Sie den [Schub-Schnellstart-Leitfaden] (https://github.com/thrust/thrust/wiki/Quick-Start-Guide) lesen, in dem der Versand von Schubalgorithmen behandelt wird. –