我发现 OpenCL 中的浮点运算存在问题。这是我的内核:
__kernel void MyKernel(__global const float4* _pInput, __global float4* _pOutput)
{
int IndexOfRow = get_global_id(0);
int NumberOfRows = get_global_size(0);
int IndexOfColumn = get_global_id(1);
int NumberOfColumns = get_global_size(1);
...
_pOutput[0] = 1.9f * 100.0f; // constant float return value
}
内核执行并下载输出缓冲区后,使用 ssh 连接的不同客户端上的结果始终为 100。如果我在本地执行程序,结果是190。好像小数点后的数字被截掉了。
操作系统是带有 AMD OpenCL 1.2 的 Open Suse Linux。
有什么问题?
最佳答案
我刚刚找到了解决方案。这取决于 LANG 的 ENV 设置。它必须是 en_US.UTF-8。您可以使用 env|grep LANG
检查它。
这可能是 JIT 编译器错误。在德国, float 用“,”而不是“.”书写。
关于linux - 通过 ssh 在 OpenCL 中的浮点错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20516692/