从多个GPU读取时,OpenCl错误的值

时间:2016-12-21 18:42:01

标签: opencl multiple-gpu

我有一个只将数字写入__global int * c的内核函数 具体来说,它看起来像这样:

__kernel void Add1(__global int* c)
{
    *c = 3;
}

在主机代码中我为C值分配了内存:

cl_mem bufferC[deviceNumber]; // deviceNumber = 8
for(int i = 0; i< deviceNumber; i++){
bufferC[i] = clCreateBuffer(context[i], CL_MEM_WRITE_ONLY, sizeof(cl_int) * global_size, NULL, &error);
}

for(int i = 0; i< deviceNumber; i++){
    error = clSetKernelArg(kernel[i], 0, sizeof(cl_mem), (void*)&bufferC[i]);
}

for(int i = 0; i< deviceNumber; i++){
    error = clEnqueueReadBuffer(commandQueue[i], bufferC[i], CL_TRUE, 0, sizeof(cl_int) * global_size, &c[i], 0, NULL, NULL);
}

我将它打印出来:

for (size_t i = 0; i < deviceNumber; ++i)
{
    std::cout<< "delta = " << c[i] << std::endl;
}

并输出:

delta = 3
delta = 11165
delta = -1329524360
delta = 11165
delta = 0
delta = 0
delta = -1329520352
delta = 11165

所以第一个值是好的,休息是一种垃圾,你知道我写错了吗? 当然它只是一个部分代码,但我认为我粘贴了所有关于那个&#39; c&#39;值。全局大小设置为1。

1 个答案:

答案 0 :(得分:0)

好吧,我的错误是创建了多个上下文,但在参数中我放了一个设备而不是它们的数组。但我通过在程序中打印错误代码找到了它 - 如果你有一些问题,试着这样做!干杯