我需要在浮点数数组中找到最大元素的索引。我使用的是"cublasIsamax“函数,但这会将索引返回给CPU,这将减慢应用程序的运行时间。
有办法有效地计算这个索引并将其存储在GPU中吗?
谢谢!
发布于 2013-08-29 12:56:58
由于CUBLAS V2 API是引入的(使用CUDA4.0,IIRC),所以有可能有返回标量或索引的例程来将这些数据直接存储到设备内存中的变量中,而不是存储到主机变量中(这需要设备进行主机传输,并可能将结果留在错误的内存空间)。
要使用这一点,您需要使用cublasSetPointerMode
调用告诉CUBLAS上下文通过使用CUBLAS_POINTER_MODE_DEVICE
模式来期望标量参数的指针是设备指针。这就意味着,在这样的调用中
cublasStatus_t cublasIsamax(cublasHandle_t handle, int n,
const float *x, int incx, int *result)
result
必须是一个设备指针。
发布于 2013-08-29 12:25:43
如果您想使用CUBLAS,并且您有一个具有计算能力3.5 (K20,Titan)的GPU,则可以使用具有动态并行性的CUBLAS。无法从GPU上的内核中调用CUBLAS,并且不会将任何数据返回到CPU。如果您没有cc 3.5的设备,您可能需要自己实现一个find max函数,或者寻找一个访问库。
https://stackoverflow.com/questions/18510485
复制相似问题