几乎所有的CUDA示例代码都描述了在大型数据集上执行近原子操作。每个线程可以执行的问题的大小有哪些实际限制?CUDA:线程中的更大问题
例如,我在另一个question打开时涉及每线程矩阵求解。这种事情太大了,不能放在每个线程中?
几乎所有的CUDA示例代码都描述了在大型数据集上执行近原子操作。每个线程可以执行的问题的大小有哪些实际限制?CUDA:线程中的更大问题
例如,我在另一个question打开时涉及每线程矩阵求解。这种事情太大了,不能放在每个线程中?
CUDA是一个数据并行编程模型实际上是SIMD体系结构,显然它不像通用多线程或MIMD体系结构那样灵活。当然,内核可能比简单的算术运算复杂得多。
在我自己的工作中,我使用CUDA来解决偏微分方程(所以有限元,有限差分和有限体积方法),每个线程处理离散连续体中的单元或元素。在这种计算中,每个单元/单元的每个线程有很多FLOP。
要注意的关键是分支分歧。因为它是一个SIMD体系结构,所以在线程(实际上是SIMD宽度)的变形中有很多分支的代码将受到性能损失。但分支分歧和代码复杂性不一定是同义词,只要任何给定warp内的线程不会过于频繁地分叉,就可以编写非常“分支”和“loopy”的代码,从而运行良好。在FLOP和IOP重算法中,这通常不太难实现。
我只是想重申talonmies,并说在操作数量上内核的“大小”没有真正的限制。只要计算是平行的,CUDA就会有效!
至于实际的考虑,我只想补充一些小笔记
感谢您的所有CUDA帮助,如果您遇到过一位年轻的爱尔兰秃头的年轻人,请问他是否欠你一瓶啤酒,我是这么做的。幸运的是,矩阵解决方案是线程计算中最复杂的一个部分,我已经消除了所有非边界情况,如果这样的话,那么经线分歧不应该成为问题。从C数值食谱看Clout分解,当我得到一些工作将更新其他问题。 – Bolster 2011-04-14 15:29:10