【发布时间】:2012-08-18 23:04:24
【问题描述】:
我已经启动了一个包含 2100 个块和每个块 4 个线程的内核。
在这个内核中,所有线程都必须执行一个函数,并将其结果放在一个数组(在全局内存上)的“threadIdx.x”位置。
我当然知道,在这个项目中,函数总是返回 1.012086。 现在,我已经编写了这段代码来完成这个总和:
currentErrors[threadIdx.x]=0;
for(i=0;i<gridDim.x;i++)
{
if(i==blockIdx.x)
{
currentErrors[threadIdx.x]+=globalError(mynet,myoutput);
}
}
但是当内核结束时,所有数组的位置都有 1.012086 作为值(而不是 1.012086*2100)。
我哪里错了? 感谢您的帮助!
【问题讨论】:
-
这个问题和您之前提出的问题都强烈表明您对 CUDA 的基础知识并不清楚。我认为您应该退后一步,阅读一本关于 CUDA 的介绍性书籍,然后再尝试继续您的项目。
-
在发布这个问题之前,我已经阅读了关于减少的本指南,但没有找到任何适合我的具体案例的内容。 developer.download.nvidia.com/compute/cuda/1.1-Beta/x86_website/…这里没有关于 Cuda Blocks 之间减少的信息
-
安德烈亚,那意味着你没看懂论文。听从我的建议,一切都会变得清晰:)