我有一个只将数字写入__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。
答案 0 :(得分:0)
好吧,我的错误是创建了多个上下文,但在参数中我放了一个设备而不是它们的数组。但我通过在程序中打印错误代码找到了它 - 如果你有一些问题,试着这样做!干杯