【发布时间】:2016-02-20 23:00:04
【问题描述】:
几乎所有 CUDA 示例代码都描述了对大型数据集执行近原子操作。每个线程可以解决的问题的大小有哪些实际限制?
例如,我现在打开了另一个 question,它涉及到每个线程的矩阵求解。这种东西是不是太大而不能放在每个线程中?
【问题讨论】:
几乎所有 CUDA 示例代码都描述了对大型数据集执行近原子操作。每个线程可以解决的问题的大小有哪些实际限制?
例如,我现在打开了另一个 question,它涉及到每个线程的矩阵求解。这种东西是不是太大而不能放在每个线程中?
【问题讨论】:
CUDA 是一种数据并行 编程模型,适用于有效的 SIMD 架构,因此显然它不如通用多线程或 MIMD 架构灵活。当然,内核可能比简单的算术运算复杂得多。
在我自己的工作中,我经常使用 CUDA 来求解偏微分方程(即有限元、有限差分和有限体积方法),每个线程都处理离散连续体中的一个单元或单元。在这种计算中,每个单元/元素的每个线程都有很多 FLOP。
要注意的关键领域是分支分歧。因为它是底层的 SIMD 架构,所以在线程束中存在大量分支(实际上是 SIMD 宽度)的代码将遭受性能损失。但是分支分歧和代码复杂性不必是同义词,您可以编写非常“分支”和“循环”的代码,这些代码将运行良好,只要任何给定 warp 中的线程不经常分歧。在 FLOP 和 IOP 重算法中,这通常不太难实现。
【讨论】:
我只是想重申一下 talonmies 并说内核的“大小”在操作数量上没有真正的限制。只要计算是并行的,CUDA就会有效!
就实际考虑而言,我只是添加一些小注释
【讨论】: