【问题标题】:CUDA: Bigger problems in threadsCUDA:线程中的更大问题
【发布时间】:2016-02-20 23:00:04
【问题描述】:

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

例如,我现在打开了另一个 question,它涉及到每个线程的矩阵求解。这种东西是不是太大而不能放在每个线程中?

【问题讨论】:

    标签: algorithm cuda


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您提供的所有 CUDA 帮助,如果您遇到一个年轻的秃头爱尔兰极客,请问他是否欠您一杯啤酒,因为我有。幸运的是,矩阵解决方案是线程计算中最复杂的部分,我已经消除了所有非边界情况,如果如此,翘曲发散应该不是问题。查看 C 数值食谱中的影响力分解,当我得到一些工作时会更新其他问题。
    【解决方案2】:

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

    就实际考虑而言,我只是添加一些小注释

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

    【讨论】:

    • 感谢您的评论,但如果没有成功的个人资料,人们将如何实际评估呢?
    • @andrew-boster 你是什么意思?您当然可以分析长时间运行的内核,您只需更改 cudaprof 中的内核超时设置
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 2021-05-23
    • 1970-01-01
    • 2013-06-25
    • 2011-08-26
    • 2012-02-17
    • 1970-01-01
    相关资源
    最近更新 更多