thrust :: max_element slow na comparação cublasIsamax - Implementação mais eficiente?

Preciso de uma implementação rápida e eficiente para encontrar o índice do valor máximo em uma matriz no CUDA. Esta operação precisa ser realizada várias vezes. Eu originalmente usei cublasIsamax para isso, no entanto, infelizmente, ele retorna o índice do valor absoluto máximo, que não é o que eu quero. Em vez disso, estou usando thrust :: max_element, no entanto, a velocidade é bastante lenta em comparação com cublasIsamax. Eu o uso da seguinte maneira:

//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;

O número de elementos no vetor varia entre 10.000 e 20.000. A diferença de velocidade entre thrust :: max_element e cublasIsamax é bastante grande. Talvez eu esteja executando várias transações de memória sem saber?

questionAnswers(1)

yourAnswerToTheQuestion