CUDA:线程中存在较大问题

时间:2011-04-14 14:44:02

标签: algorithm cuda

几乎所有的CUDA示例代码都描述了对大型数据集进行近原子操作。每个线程可以做的问题大小有什么实际限制?

例如,我有另一个question在分钟打开,涉及每线程矩阵求解。这种事情是否太大而无法放入每个帖子中?

2 个答案:

答案 0 :(得分:3)

CUDA是一种数据并行编程模型,适用于有效的SIMD架构,因此显然它不像通用多线程或MIMD架构那样灵活。当然,内核可能比简单的算术运算复杂得多。

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

要注意的关键领域是分支分歧。因为它是一个SIMD架构,所以在线程扭曲(实际上是SIMD宽度)内存在大量分支的代码将遭受性能损失。但是分支差异和代码复杂性不一定是同义词,只要任何给定warp中的线程不经常发散,你就可以编写非常“分支”和“循环”的代码,这些代码运行良好。在FLOP和IOP重算法中,通常不太难实现。

答案 1 :(得分:1)

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

就实际考虑而言,我只想添加一些小笔记

  • 长时间运行的内核可能会超时,具体取决于操作系统(或使用cudaProf进行分析时)。您可能必须在某处更改设置以增加最大内核执行时间。
  • 在没有专用gpu的系统上长时间运行的内核可以冻结显示(中断ui)。
  • warp是异步执行的 - 一个warp可以访问内存,而另一个warp执行算术以便有效地使用时钟周期。长时间运行的内核可能会从对这种优化的关注中获益更多。我不太确定这最后一个。