1

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

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

我有 2 个使用 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]);

这一项适用于带有 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 尝试过,但每次我得到错误的结果。

我需要帮助来确定是否是导致此问题的硬件问题,或者我是否必须尝试更改多内核执行如何开始?也许我每次执行内核时都必须先读取结果,然后再将其发送到下一个内核?

我会很感激任何帮助。

谢谢

4

0 回答 0