我需要在浮点数组中找到最大元素的索引。我正在使用函数“cublasIsamax”,但这会将索引返回给 CPU,这会减慢应用程序的运行时间。
有没有办法有效地计算这个索引并将其存储在 GPU 中?
谢谢!
我需要在浮点数组中找到最大元素的索引。我正在使用函数“cublasIsamax”,但这会将索引返回给 CPU,这会减慢应用程序的运行时间。
有没有办法有效地计算这个索引并将其存储在 GPU 中?
谢谢!
由于引入了 CUBLAS V2 API(使用 CUDA 4.0,IIRC),因此可以使用返回标量或索引的例程将它们直接存储到设备内存中的变量中,而不是存储到主机变量中(这需要设备主机传输并可能将结果留在错误的内存空间中)。
要使用它,您需要使用该调用来告诉 CUBLAS 上下文通过使用模式cublasSetPointerMode
将标量参数的指针期望为设备指针。CUBLAS_POINTER_MODE_DEVICE
这意味着在像这样的调用中
cublasStatus_t cublasIsamax(cublasHandle_t handle, int n,
const float *x, int incx, int *result)
那result
必须是设备指针。
如果你想使用 CUBLAS 并且你有一个计算能力为 3.5(K20,Titan)的 GPU,那么你可以使用具有动态并行性的 CUBLAS。您可以从 GPU 的内核中调用 CUBLAS,并且不会将任何数据返回到 CPU。如果您没有 cc 3.5 的设备,您可能必须自己实现 find max 功能或寻找附加库。