我正在尝试在 CUDA 7.5 中实现并行归约和。我一直在尝试遵循NVIDIA PDF,它会引导您完成初始算法,然后稳步优化版本。我目前正在制作一个用 1 作为每个数组位置的值的数组,以便我可以检查输出是否正确,但我得到的值为 -842159451 的大小为 64 的数组。我期待内核代码是正确的,因为我遵循了 NVIDIA 的确切代码,但这是我的内核:
__global__ void reduce0(int *input, int *output) {
extern __shared__ int sdata[];
unsigned int tid = threadIdx.x;
unsigned int i = blockIdx.x * blockDim.x + threadIdx.x;
sdata[tid] = input[i];
__syncthreads();
for (unsigned int s = 1; s < blockDim.x; s *= 2) {
if (tid % (2 * s) == 0) {
sdata[tid] += sdata[tid + s];
}
__syncthreads();
}
if (tid == 0) output[blockIdx.x] = …Run Code Online (Sandbox Code Playgroud)