【发布时间】:2012-12-17 05:22:52
【问题描述】:
我希望对 CUDA C 中负载平衡的最佳实践提供一些一般性建议和说明,特别是:
- 如果经线中的 1 个线程比其他 31 个线程花费更长的时间,它会阻止其他 31 个线程完成吗?
- 如果是这样,是否会将备用处理能力分配给另一个 warp?
- 为什么我们需要warp 和块的概念?在我看来,warp 只是 32 个线程的一小块。
- 一般来说,对于给定的内核调用,我需要什么负载平衡?
- 每个经线中的线程?
- 每个块中的线程?
- 跨所有块的线程?
最后,举个例子,你会为以下功能使用哪些负载平衡技术:
- 我有一个向量
x0的N点:[1, 2, 3, ..., N] - 我随机选择5%的点和
log它们(或者一些复杂的函数) - 我将结果向量
x1(例如[1, log(2), 3, 4, 5, ..., N])写入内存 - 我在
x1上重复上述 2 次操作以产生x2(例如[1, log(log(2)), 3, 4, log(5), ..., N]),然后再进行 8 次迭代以产生x3...x10 - 我返回
x10
非常感谢。
【问题讨论】:
标签: cuda load-balancing gpgpu