首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在CUDA中查找max/min而不将其传递给CPU

在CUDA中查找max/min而不将其传递给CPU
EN

Stack Overflow用户
提问于 2013-08-29 12:03:43
回答 2查看 926关注 0票数 1

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

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

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-29 12:56:58

由于CUBLAS V2 API是引入的(使用CUDA4.0,IIRC),所以有可能有返回标量或索引的例程来将这些数据直接存储到设备内存中的变量中,而不是存储到主机变量中(这需要设备进行主机传输,并可能将结果留在错误的内存空间)。

要使用这一点,您需要使用cublasSetPointerMode调用告诉CUBLAS上下文通过使用CUBLAS_POINTER_MODE_DEVICE模式来期望标量参数的指针是设备指针。这就意味着,在这样的调用中

代码语言:javascript
运行
复制
cublasStatus_t cublasIsamax(cublasHandle_t handle, int n,
                            const float *x, int incx, int *result)

result必须是一个设备指针。

票数 6
EN

Stack Overflow用户

发布于 2013-08-29 12:25:43

如果您想使用CUBLAS,并且您有一个具有计算能力3.5 (K20,Titan)的GPU,则可以使用具有动态并行性的CUBLAS。无法从GPU上的内核中调用CUBLAS,并且不会将任何数据返回到CPU。如果您没有cc 3.5的设备,您可能需要自己实现一个find max函数,或者寻找一个访问库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18510485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档