Algorithm CUDA:线程中更大的问题

Algorithm CUDA:线程中更大的问题,algorithm,cuda,Algorithm,Cuda,几乎所有CUDA示例代码都描述了在大型数据集上执行近似原子的操作。每个线程所能处理的问题的大小有哪些实际限制 例如,我有另一个开放的一分钟,涉及每线程矩阵求解。这类东西是否太大而不能放在每个线程中?CUDA是一种数据并行编程模型,实际上是一种SIMD体系结构,因此显然它不如通用多线程或MIMD体系结构灵活。当然,内核可能比简单的算术运算复杂得多 在我自己的工作中,我经常使用CUDA来求解偏微分方程(有限元、有限差分和有限体积法),每个线程处理离散连续介质中的一个单元或单元。在这种计算中,每个单元

几乎所有CUDA示例代码都描述了在大型数据集上执行近似原子的操作。每个线程所能处理的问题的大小有哪些实际限制

例如,我有另一个开放的一分钟,涉及每线程矩阵求解。这类东西是否太大而不能放在每个线程中?

CUDA是一种数据并行编程模型,实际上是一种SIMD体系结构,因此显然它不如通用多线程或MIMD体系结构灵活。当然,内核可能比简单的算术运算复杂得多

在我自己的工作中,我经常使用CUDA来求解偏微分方程(有限元、有限差分和有限体积法),每个线程处理离散连续介质中的一个单元或单元。在这种计算中,每个单元/元素的每个线程都有大量的失败

需要注意的关键领域是分支分歧。因为它是一个隐藏的SIMD体系结构,所以在一系列线程(实际上是SIMD宽度)中存在大量分支的代码将受到性能损失。但是分支发散和代码复杂度不必是同义词,您可以编写运行良好的“分支”和“循环”代码,只要任何给定扭曲中的线程不经常发散。在FLOP和IOP密集型算法中,这通常不太难实现。

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

在我自己的工作中,我经常使用CUDA来求解偏微分方程(有限元、有限差分和有限体积法),每个线程处理离散连续介质中的一个单元或单元。在这种计算中,每个单元/元素的每个线程都有大量的失败


需要注意的关键领域是分支分歧。因为它是一个隐藏的SIMD体系结构,所以在一系列线程(实际上是SIMD宽度)中存在大量分支的代码将受到性能损失。但是分支发散和代码复杂度不必是同义词,您可以编写运行良好的“分支”和“循环”代码,只要任何给定扭曲中的线程不经常发散。在FLOP和IOP密集型算法中,这通常不太难实现。

我只想重申一些技巧,并说内核的“大小”在操作数量上没有真正的限制。只要计算是并行的,CUDA就会有效

至于实际考虑,我只想补充几点

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

我只想重申一些技巧,并说内核的“大小”在操作数量上没有真正的限制。只要计算是并行的,CUDA就会有效

至于实际考虑,我只想补充几点

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

谢谢你的CUDA帮助,如果你遇到一个年轻的爱尔兰秃头极客,问问他是否欠你一杯啤酒,因为我欠你。幸运的是,矩阵解是线程计算中最复杂的部分,我已经排除了所有非边界情况,如果这样的话,扭曲发散不应该成为问题。看看C数字配方中的影响力分解,当我开始工作时,会更新其他问题。谢谢你的CUDA帮助,如果你遇到一个年轻的爱尔兰秃头极客,问他是否欠你一杯啤酒,因为我欠你。幸运的是,矩阵解是线程计算中最复杂的部分,我已经排除了所有非边界情况,如果这样的话,扭曲发散不应该成为问题。看看C数字配方中的影响力分解,当我开始工作时,我会更新其他问题。谢谢你的评论,但如果没有成功的简介,人们会如何评估呢?@andrew boster你是什么意思?您当然可以评测长时间运行的内核,您只需更改cudaprof中的内核超时设置。谢谢您的评论,但是如果没有成功的评测,您将如何评估这一点呢?@andrew boster您是什么意思?您当然可以评测长时间运行的内核,只需更改cudaprof中的内核超时设置