OpenCL在NVIDIA Tesla上执行多个内核

时间:2013-10-16 11:14:18

标签: kernel opencl gpu nvidia jocl

我有这个问题,我不知道如何解决它。

我使用2个群集1,其中6个Tesla C1060,另一个群集2个Tesla K20M

我有两个使用JOCL作为Java绑定的OpenCL程序。 第一个有这个结构:

1 OpenCL Kernel
...code...
clEnqueueNDRangeKernel(commandQueues[i], kernel[i], 1, null,
                global_work_size, local_work_size, 0, null, events[i]);
clFlush(commandQueues[i]);

这一项适用于计算机集群与特斯拉C1060和特斯拉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台特斯拉K20M的群集。从具有6特斯拉C1060的另一个集群中,我得到了错误的结果(程序开始和结束正常,但结果错误)。我只用1,2,3,4,5 TeslaC1060尝试它,每次我得到错误的结果。

我需要帮助才能找出导致此问题的硬件问题,或者我是否必须尝试更改多个内核执行的启动方式?也许每次执行内核时我都必须首先读取结果,之后我将它发送到下一个内核?

我会感激任何帮助。

谢谢

0 个答案:

没有答案