【发布时间】:2019-05-13 02:54:15
【问题描述】:
我有以下简单的嵌套 for 循环
float a[1024][1024], b[1024]
for(i=1; i < 1024; i++){
for(j = 1; j < 1024 - i; j++){
b[i + j] += a[i][j];
}
}
我正在尝试了解如何使用 CUDA 线程和线程块来分区此问题以与 GPU 并行化。到目前为止,我相信我总共进行了 N = 522753 次计算。我不完全确定如何从这里开始:我知道每个块中的线程数应该是 32 的倍数。例如,如果每个块的线程数是 1024,那么我至少需要 511 个块,每个线程从 1 -> N 进行计算。有人可以解释如何选择每个块的最佳线程数,以及如何实际并行实现。
【问题讨论】:
-
@talonmies 它来自提供给我的一个示例 - 并不意味着实际执行。比任何东西都多的伪代码,但我仍然不明白如何将每个块划分为块和线程以并行化概念
-
这种情况下的问题是不同的 (i,j)-pairs 想要写入同一个位置。说(3,0)和(0,3)。您可以使用 atomic_add,但最好以某种方式进行分区,即使用更少的 atomic_add 并且每个线程有更多的工作。