有人可以指出正确的方向如何并行执行这种类型的计算,或者告诉我此方法的通用名称是什么?我认为这些不会返回相同的结果。
C++
for (int i = 1; i < width; i++)
x[i] = x[i] + x[i-1];
CUDA
int i = blockIdx.x * blockDim.x + threadIdx.x
if ((i > 0) && (i < (width)))
X[i] = X[i] + X[i-1];
最佳答案
这看起来像一个累加和运算,其中x[i]
的最终值是原始数组中所有值x[0]...x[i]
的总和。
在CUDA中,这称为扫描或前缀和运算,并且可以有效地并行化。参见例如this lecture为例。
关于cuda - CUDA中的累积求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25251335/