几乎所有的CUDA示例代码都描述了对大型数据集进行近原子操作。每个线程可以做的问题大小有什么实际限制?
例如,我有另一个question在分钟打开,涉及每线程矩阵求解。这种事情是否太大而无法放入每个帖子中?
答案 0 :(得分:3)
CUDA是一种数据并行编程模型,适用于有效的SIMD架构,因此显然它不像通用多线程或MIMD架构那样灵活。当然,内核可能比简单的算术运算复杂得多。
在我自己的工作中,我使用CUDA来解决偏微分方程(所以有限元,有限差分和有限体积方法),每个线程处理来自离散连续体的细胞或元素。在那种计算中,每个单元/元素的每个线程有很多FLOP。
要注意的关键领域是分支分歧。因为它是一个SIMD架构,所以在线程扭曲(实际上是SIMD宽度)内存在大量分支的代码将遭受性能损失。但是分支差异和代码复杂性不一定是同义词,只要任何给定warp中的线程不经常发散,你就可以编写非常“分支”和“循环”的代码,这些代码运行良好。在FLOP和IOP重算法中,通常不太难实现。
答案 1 :(得分:1)
我只想重申一下talonmies,并说在操作数量上内核的“大小”没有实际限制。只要计算是平行的,CUDA就会有效!
就实际考虑而言,我只想添加一些小笔记