在CUDA中查找最大/最小值而不将其传递给CPU

rod*_*dms 1 parallel-processing cuda nvidia cublas

我需要找到浮点数组中最大元素的索引.我正在使用函数"cublasIsamax",但这会将索引返回给CPU,这会减慢应用程序的运行时间.

有没有办法有效地计算这个索引并将其存储在GPU中?

谢谢!

tal*_*ies 6

由于引入了CUBLAS V2 API(使用CUDA 4.0,IIRC),因此可以使用返回标量或索引的例程将这些直接存储到设备内存中的变量中,而不是存储到主机变量(需要设备到主机传输并可能将结果留在错误的存储空间中).

要使用它,您需要使用该cublasSetPointerMode调用来告诉CUBLAS上下文,期望使用该模式将标量参数的指针作为设备指针CUBLAS_POINTER_MODE_DEVICE.这意味着在一次通话中

cublasStatus_t cublasIsamax(cublasHandle_t handle, int n,
                            const float *x, int incx, int *result)
Run Code Online (Sandbox Code Playgroud)

result必须是设备指针.