CUDA:更大的线程问题

| 几乎所有CUDA示例代码都描述了对大型数据集执行近原子操作。每个线程可以解决的问题大小有哪些实际限制? 例如,我还有一个问题需要解决,该问题涉及每线程矩阵求解。这种事情是否太大而无法放入每个线程中?     
已邀请:
CUDA是一种有效的SIMD架构数据并行编程模型,因此显然它不如通用多线程或MIMD架构灵活。当然,内核比简单的算术运算要复杂得多。 在我自己的工作中,我大量使用CUDA来求解偏微分方程(因此,有限元,有限差分和有限体积方法),每个线程都处理离散连续体中的单元或元素。在这种计算中,每个单元格/元素的每个线程有很多FLOP。 要注意的关键领域是分支分歧。因为它是一个底层的SIMD架构,所以在线程扭曲(实际上是SIMD宽度)内有很多分支的代码将遭受性能损失。但是分支分歧和代码复杂度不必是同义词,您可以编写非常好的“分支”和“ loopy”代码,只要在任何给定的warp中的线程不会经常分歧就可以很好地运行。在FLOP和IOP繁重的算法中,通常很难做到这一点。     
我只是想重申一下标准,并说操作数对内核的“大小”没有真正的限制。只要计算是并行的,CUDA就会有效! 就实际考虑而言,我将添加一些小注释 长时间运行的内核可能会超时,具体取决于os(或使用cudaProf进行性能分析时)。您可能必须在某处更改设置以增加最大内核执行时间。 在没有专用GPU的系统上长时间运行的内核会冻结显示(中断ui)。 warp是异步执行的-一种warp可以访问内存,而另一种warp则可以执行算术运算以有效地使用时钟周期。长期运行的内核可能会从对此类优化的关注中受益更多。我不确定这最后一个。     

要回复问题请先登录注册