【发布时间】:2013-01-25 15:16:57
【问题描述】:
我在配备 Nvidia GTX580 的 MacPro 上运行相同的 OpenCL 代码,运行以下任一设备:
- OS X 10.8.2 和 Xcode 4.6
- Windows XP 32 位,带有 Visual C++ 2008 企业版和 Nvidia CUDA 工具包 5.0
但是我在 Win XP 中得到了错误的结果。
为了定义使用的工作项数量,我指定了工作组大小 (192)、工作组数量 (256) 并将使用的工作项的全局数量设置为工作组大小 x 工作组 (192 x 256 = 49152) .
当我在 Apple 平台上运行它时,我的所有结果都是正确的,但是当我在 Win XP 平台上运行它时,我得到的结果是 1/8 倍。
做了一些检查,我让 GPU 存储它认为的全局大小,并将预期数字报告为 49152,但是如果我改为让每个工作组的第一个工作项以原子方式将本地大小添加到计数器,我只得到 6144,正好是全局大小的 1/8。
这个问题似乎与设置的工作项数量有关,如果我将工作组大小设置为 32 或 64,我将得到正确答案(当工作组大小保持在 192 不变时)。但是对于任何其他值,我都会遇到此问题,并且我的结果可能会偏离 1/8、1/4 或 1/2,具体取决于所使用的工作项的数量。
是否有任何原因会出现这种情况,例如 32 位寻址限制或 NVidia 库中的积极优化?
【问题讨论】:
-
GPGPU 技术并不完全是一种稳定性模型。如果您真的找不到问题,假设 OpenCL 运行时错误也不会太牵强,您是否尝试过不同的运行时版本?
-
我还没有尝试其他运行时,我将尝试使用 CUDA 4 驱动程序。
-
我已经尝试在 win XP 32 位上使用 CUDA 4.1 工具包,在 windows 7 64 位上使用 CUDA 5 工具包,我也遇到了同样的问题。