【发布时间】:2013-09-04 19:09:55
【问题描述】:
我正在为我在 CUDA 中的项目寻找高性能多扫描/多前缀求和(一个内核执行中的多行)函数。
我已经尝试过 Thrust 库中的那个,但它太慢了。使用 nvcc 调试标志 (-g -G) 编译后也会导致崩溃。
在 Thrust 失败后,我专注于 cuDPP 库,它曾经是 CUDA 工具包的一部分。 cuDPP 性能非常好,但库不是最新的 cuda 5.5,并且在使用内存检查器进行调试时,cudppMultiScan() 函数中存在一些全局内存违规问题。 (cuda 5.5、nsight 3.1、visual studio 2010、gtx 260 cc 1.3)
有人知道用什么来代替这两个库吗?
R.
【问题讨论】:
-
你看过我们在 AccelerEyes 工作的 ArrayFire 吗?
-
不,以前没见过,看起来很有趣!谢谢! :) 它的性能如何?是生产力更高还是以性能为导向的库?
-
如果要使用 Thrust 扫描矩阵的行,请不要重复调用
inclusive_scan。为每一行分配一个索引并使用inclusive_scan_by_key。你可以调整这个example。 -
@user1946472 对于单个向量,它要么更好(在数千个元素处),要么等于推力(在百万个元素处)。对于多个矩阵,arrayfire 启动单个内核,因此比多次启动推力更快。资料来源:我写了代码。您可以联系我(我的个人资料中的电子邮件)以获取更多信息。
-
@JaredHoberock 必须为内存绑定算法读取额外的向量并不理想。但是,这比多次启动内核要好。