Многоядерное выполнение OpenCL на NVIDIA Tesla
У меня есть эта проблема, и я не знаю, как ее решить.
Я работаю с 2 кластерами, один с 6 Tesla C1060, а другой с 2 Tesla K20M.
У меня есть 2 OpenCL-программы, использующие JOCL в качестве привязок Java. Первые имеют такую структуру:
1 OpenCL Kernel
...code...
clEnqueueNDRangeKernel(commandQueues[i], kernel[i], 1, null,
global_work_size, local_work_size, 0, null, events[i]);
clFlush(commandQueues[i]);
Этот работает в компьютерном кластере с Tesla C1060 и Tesla K20M.
Вторая программа имеет такую структуру:
4 OpenCL Kernel
...code...
clEnqueueNDRangeKernel(commandQueues[i], kernel1[i], 1, null,
global_work_size, local_work_size, 0, null, events[i]);
clEnqueueNDRangeKernel(commandQueues[i], kernel2[i], 1, null,
global_work_size, local_work_size, 0, null, events[i]);
clEnqueueNDRangeKernel(commandQueues[i], kernel3[i], 1, null,
global_work_size, local_work_size, 0, null, events[i]);
...code...
read result from 3rd Kernel and do a little data comparison
...code...
clEnqueueNDRangeKernel(commandQueues[i], kernel4[i], 1, null,
global_work_size, local_work_size, 0, null, events[i]);
clFlush(commandQueues[i]);
Я получил ожидаемый результат, но только от кластера с 2 Tesla K20M. Из другого кластера с 6 Tesla C1060 я получил неправильный результат (программа запускается и заканчивается нормально, но дает неправильный результат). Я пробовал только с 1, 2, 3, 4, 5 TeslaC1060 и каждый раз получаю неправильный результат.
Мне нужна помощь, чтобы выяснить, не является ли это аппаратной проблемой, или я должен попытаться изменить способ запуска многоядерного ядра? Может быть, мне нужно сначала прочитать результат каждый раз, когда я запускаю ядро, и после этого я отправляю его следующему ядру?
Я буду признателен за любую помощь.
Спасибо