首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CUDA中的高性能前缀求和/扫描函数,寻找推力,cuDPP库替代

CUDA中的高性能前缀求和/扫描函数,寻找推力,cuDPP库替代
EN

Stack Overflow用户
提问于 2013-09-02 00:06:05
回答 2查看 4.8K关注 0票数 6

我正在为我的CUDA项目寻找高性能的multiscan / multi prefix-sum (一个内核执行中的多行)函数。

我试过推力库中的那个,但它太慢了。使用nvcc调试标志(-g -G)编译后也会发生推力崩溃。

在推力失败后,我专注于cuDPP库,它曾经是CUDA工具包的一部分。cuDPP的性能非常好,但是库没有更新到最新的CUDA5.5,并且在使用内存检查器进行调试时,cudppMultiScan()函数中存在一些全局内存冲突问题。(cuda 5.5,nsight 3.1,visual studio 2010,gtx 260 cc 1.3)

有没有人知道用什么来代替这两个库?

R.

EN

回答 2

Stack Overflow用户

发布于 2013-09-02 02:48:16

这些库,特别是推力,试图尽可能的通用,优化通常需要专门化:例如,一个算法的专门化可以为基本类型(如int或float)使用共享内存,但泛型版本不能。

尽可能多地使用这些经过良好测试的泛型库是一个好主意,但有时,对于一些性能关键部分,您自己的实现是一个需要考虑的选项。

在您的情况下,您希望对不同的行并行执行多个扫描。一个好的实现不会对不同的行单独运行扫描:它将对所有行的所有元素同时运行相同的内核调用。根据它的索引,线程可以知道它正在处理哪一行,并将忽略该行之外的所有数据。

这样的专门化需要一个函数器,该函数器返回一个防止混行的吸收值。尽管如此,你自己仔细的实现可能会更快。

票数 2
EN

Stack Overflow用户

发布于 2013-09-02 04:35:52

要编写自己的前缀扫描,可以参考

  1. CUDA SDK的扫描示例;N.Wilt的
  2. 第13章,"The CUDA Handbook";
  3. Chapter 6 of S. Cook. "CUDA Programming,A Developer's Guide to Parallel Computing with GPUs";
  4. Parallel Prefix Sum (Scan) with CUDA.

要做多前缀求和,你可以多次启动相同的内核(根据a.lasram的建议),或者尝试通过CUDA streams实现cuncurrency,尽管我不知道这将有效地工作于你的卡。

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

https://stackoverflow.com/questions/18560272

复制
相关文章

相似问题

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