Неправильные значения OpenCl при чтении из нескольких графических процессоров
У меня есть функция ядра, которая записывает только число в __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
Итак, первое значение в порядке, отдых - это что-то вроде мусора, вы знаете, какую ошибку я допустил, написав это? Конечно, это только частичный код, но я думаю, что вставил все строки, касающиеся этого значения 'c'. Глобальный размер установлен в 1.
1 ответ
Что ж, моей ошибкой было создание нескольких контекстов, но в качестве аргумента я поставил одно устройство вместо их массива. Но я нашел это, напечатав коды ошибок в программе - попробуйте сделать это, если у вас возникнут проблемы! ура