我有这个问题,我不知道如何解决它。
我使用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尝试它,每次我得到错误的结果。
我需要帮助才能找出导致此问题的硬件问题,或者我是否必须尝试更改多个内核执行的启动方式?也许每次执行内核时我都必须首先读取结果,之后我将它发送到下一个内核?
我会感激任何帮助。
谢谢