2011-04-14 103 views
1

几乎所有的CUDA示例代码都描述了在大型数据集上执行近原子操作。每个线程可以执行的问题的大小有哪些实际限制?CUDA:线程中的更大问题

例如,我在另一个question打开时涉及每线程矩阵求解。这种事情太大了,不能放在每个线程中?

回答

3

CUDA是一个数据并行编程模型实际上是SIMD体系结构,显然它不像通用多线程或MIMD体系结构那样灵活。当然,内核可能比简单的算术运算复杂得多。

在我自己的工作中,我使用CUDA来解决偏微分方程(所以有限元,有限差分和有限体积方法),每个线程处理离散连续体中的单元或元素。在这种计算中,每个单元/单元的每个线程有很多FLOP。

要注意的关键是分支分歧。因为它是一个SIMD体系结构,所以在线程(实际上是SIMD宽度)的变形中有很多分支的代码将受到性能损失。但分支分歧和代码复杂性不一定是同义词,只要任何给定warp内的线程不会过于频繁地分叉,就可以编写非常“分支”和“loopy”的代码,从而运行良好。在FLOP和IOP重算法中,这通常不太难实现。

+1

感谢您的所有CUDA帮助,如果您遇到过一位年轻的爱尔兰秃头的年轻人,请问他是否欠你一瓶啤酒,我是这么做的。幸运的是,矩阵解决方案是线程计算中最复杂的一个部分,我已经消除了所有非边界情况,如果这样的话,那么经线分歧不应该成为问题。从C数值食谱看Clout分解,当我得到一些工作将更新其他问题。 – Bolster 2011-04-14 15:29:10

1

我只是想重申talonmies,并说在操作数量上内核的“大小”没有真正的限制。只要计算是平行的,CUDA就会有效!

至于实际的考虑,我只想补充一些小笔记

  • 长期运行的内核可以超时,这取决于操作系统(或cudaProf profiling的时候)。您可能必须在某处更改设置以增加最大内核执行时间。
  • 没有专用GPU的系统上长时间运行的内核可能会冻结显示(中断UI)。
  • warp异步执行 - 一个warp可以访问内存,而另一个warp可以执行算术运算以有效使用时钟周期。长期运行的内核可能更多地受益于这种优化。我不确定这最后一个。
+0

感谢您的评论,但如果没有成功的个人资料,人们会如何评估? – Bolster 2011-04-16 15:09:25

+0

@ andrew-boster你是什么意思?您当然可以配置长时间运行的内核,您只需更改cudaprof中的内核超时设置即可 – jmilloy 2011-04-16 15:42:22