执行具有高分支差异的任务的最佳策略

时间:2014-02-09 19:02:19

标签: multithreading cuda simd

几年前我写了一个项目,它在一个CPU核心上连续计算N个相似的任务。

这些N个任务完全独立,因此可以并行计算。

然而,这些任务的问题在于每个任务内部的控制流程从一个任务到另一个任务有很大不同,因此在CUDA中实施的SIMT方法更有可能阻碍而不是帮助。

我提出了一个想法,即在每个块中使用1个线程来启动N个块,以打破线程的warp依赖性。

在这种情况下,任何人都可以建议更好的方法来优化计算,或者指出我的解决方案可能存在的陷阱。

1 个答案:

答案 0 :(得分:2)

你的评论是正确的,因为经线中的线程分歧导致什么原因和原因。但是,启动您提到的配置(每个块中有1个线程)完全降低了GPU的潜力。 warp / half-warp中的线程是最终在单个多处理器上并行执行的线程的最大单位。因此,在块中具有一个线程并且具有32个这些块实际上在具有不同路径的warp中具有32个线程。第一种情况甚至更糟,因为每个多处理器的数量驻留块非常有限(8或16,取决于计算能力)。

因此,如果您想充分利用GPU的潜力,请记住Jack的注释并尝试重新组织线程,以便单个warp的线程遵循相同的执行路径。