Многоядерное выполнение 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 и каждый раз получаю неправильный результат.

Мне нужна помощь, чтобы выяснить, не является ли это аппаратной проблемой, или я должен попытаться изменить способ запуска многоядерного ядра? Может быть, мне нужно сначала прочитать результат каждый раз, когда я запускаю ядро, и после этого я отправляю его следующему ядру?

Я буду признателен за любую помощь.

Спасибо

0 ответов

Другие вопросы по тегам