thrust :: max_element langsam im Vergleich cublasIsamax - Effizientere Implementierung?

Ich benötige eine schnelle und effiziente Implementierung, um den Index des Maximalwerts in einem Array in CUDA zu finden. Dieser Vorgang muss mehrmals ausgeführt werden. Ich habe dafür ursprünglich cublasIsamax verwendet, aber es gibt leider den Index des maximalen Absolutwerts zurück, was nicht das ist, was ich will. Stattdessen verwende ich thrust :: max_element, allerdings ist die Geschwindigkeit im Vergleich zu cublasIsamax eher langsam. Ich benutze es auf folgende Weise:

//d_vector is a pointer on the device pointing to the beginning of the vector, containing nrElements floats.
thrust::device_ptr<float> d_ptr = thrust::device_pointer_cast(d_vector);
thrust::device_vector<float>::iterator d_it = thrust::max_element(d_ptr, d_ptr + nrElements);
max_index = d_it - (thrust::device_vector<float>::iterator)d_ptr;

Die Anzahl der Elemente im Vektorbereich liegt zwischen 10'000 und 20'000. Der Geschwindigkeitsunterschied zwischen thrust :: max_element und cublasIsamax ist ziemlich groß. Vielleicht führe ich mehrere Speichertransaktionen aus, ohne es zu wissen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage