Algorithm CUDA:线程中更大的问题
几乎所有CUDA示例代码都描述了在大型数据集上执行近似原子的操作。每个线程所能处理的问题的大小有哪些实际限制 例如,我有另一个开放的一分钟,涉及每线程矩阵求解。这类东西是否太大而不能放在每个线程中?CUDA是一种数据并行编程模型,实际上是一种SIMD体系结构,因此显然它不如通用多线程或MIMD体系结构灵活。当然,内核可能比简单的算术运算复杂得多 在我自己的工作中,我经常使用CUDA来求解偏微分方程(有限元、有限差分和有限体积法),每个线程处理离散连续介质中的一个单元或单元。在这种计算中,每个单元/元素的每个线程都有大量的失败 需要注意的关键领域是分支分歧。因为它是一个隐藏的SIMD体系结构,所以在一系列线程(实际上是SIMD宽度)中存在大量分支的代码将受到性能损失。但是分支发散和代码复杂度不必是同义词,您可以编写运行良好的“分支”和“循环”代码,只要任何给定扭曲中的线程不经常发散。在FLOP和IOP密集型算法中,这通常不太难实现。CUDA是一种数据并行编程模型,适用于有效的SIMD体系结构,因此显然它不如通用多线程或MIMD体系结构灵活。当然,内核可能比简单的算术运算复杂得多 在我自己的工作中,我经常使用CUDA来求解偏微分方程(有限元、有限差分和有限体积法),每个线程处理离散连续介质中的一个单元或单元。在这种计算中,每个单元/元素的每个线程都有大量的失败Algorithm CUDA:线程中更大的问题,algorithm,cuda,Algorithm,Cuda,几乎所有CUDA示例代码都描述了在大型数据集上执行近似原子的操作。每个线程所能处理的问题的大小有哪些实际限制 例如,我有另一个开放的一分钟,涉及每线程矩阵求解。这类东西是否太大而不能放在每个线程中?CUDA是一种数据并行编程模型,实际上是一种SIMD体系结构,因此显然它不如通用多线程或MIMD体系结构灵活。当然,内核可能比简单的算术运算复杂得多 在我自己的工作中,我经常使用CUDA来求解偏微分方程(有限元、有限差分和有限体积法),每个线程处理离散连续介质中的一个单元或单元。在这种计算中,每个单元
需要注意的关键领域是分支分歧。因为它是一个隐藏的SIMD体系结构,所以在一系列线程(实际上是SIMD宽度)中存在大量分支的代码将受到性能损失。但是分支发散和代码复杂度不必是同义词,您可以编写运行良好的“分支”和“循环”代码,只要任何给定扭曲中的线程不经常发散。在FLOP和IOP密集型算法中,这通常不太难实现。我只想重申一些技巧,并说内核的“大小”在操作数量上没有真正的限制。只要计算是并行的,CUDA就会有效 至于实际考虑,我只想补充几点
- 长时间运行的内核可能会超时,具体取决于操作系统(或使用cudaProf进行评测时)。您可能必须在某个地方更改设置以增加最大内核执行时间
- 在没有专用gpu的系统上长时间运行的内核可能会冻结显示(中断ui)李>
- 扭曲是异步执行的——一个扭曲可以访问内存,而另一个扭曲则执行算术运算,以便有效地使用时钟周期。长时间运行的内核可能会从关注这种优化中受益更多。最后一个我不太确定
- 长时间运行的内核可能会超时,具体取决于操作系统(或使用cudaProf进行评测时)。您可能必须在某个地方更改设置以增加最大内核执行时间
- 在没有专用gpu的系统上长时间运行的内核可能会冻结显示(中断ui)李>
- 扭曲是异步执行的——一个扭曲可以访问内存,而另一个扭曲则执行算术运算,以便有效地使用时钟周期。长时间运行的内核可能会从关注这种优化中受益更多。最后一个我不太确定