首先,请允许我声明我已经充分意识到我的问题已经被提出:CUDA中的减少但是,正如我希望明确的那样,我的问题是对此的后续行动,我有特殊的需求使该OP发现的解决方案不合适.
所以,让我解释一下.在我当前的代码中,我在while循环的每次迭代中运行一个Cuda内核来对数组的值进行一些计算.举个例子,想象如下:
int max_iterations = 1000;
int iteration = 0;
while(iteration < max_iterations)
{
__global__ void calcKernel(int* idata, int* odata)
{
int i = blockIdx.x*blockDim.x + threadIdx.x;
if (i < n)
{
odata[i] = (idata[i] + 2) * 5;
}
}
iteration++;
}
Run Code Online (Sandbox Code Playgroud)
但是,接下来我必须为GPU完成看似艰巨的任务.在调用内核的while循环的每次迭代中,我必须对在其中生成的所有值求和odata并将结果保存在一个int数组中result,该数组在此类数组中与当前迭代对应的位置.它必须在内核中完成,或者至少仍然在GPU中完成,因为由于性能限制,我只能result在完成所有迭代后最终检索数组.
一个错误的天真尝试看起来像下面这样:
int max_iterations = 1000;
int iteration = 0;
while(iteration < max_iterations)
{
__global__ void calcKernel(int* idata, int* odata, int* …Run Code Online (Sandbox Code Playgroud)