我在OpenCL中发现了主机 - 客户端浮点标准的问题.问题是,在x86中编译时,Opencl计算的浮点数与我的visual studio 2010编译器的浮点数不同.但是,在x64中进行编译时,它们处于相同的限制.我知道它必须与之相关,http://www.viva64.com/en/b/0074/
我在测试过程中使用的来源是:http://www.codeproject.com/Articles/110685/Part-1-OpenCL-Portable-Parallelism
当我在x86中运行程序时,它会给我202个相同的数字,当时内核和C++程序占用了1269760个数字.然而,在64位构建中,1269760数字是正确的,换句话说是100%.此外,我发现opencl和x86 c ++的计算结果之间的误差是5.5385384e-014,这是一个非常小的部分但不够小,与数字的epsilon相比,即2.92212543378266922312416e-19.
这是因为,错误需要小于epsilon,因此程序可以将这两个数字识别为一个相同的数字.当然,通常人们永远不会比较本地的浮子,但很高兴知道浮动限制是不同的.是的,我试图设置flt:static,但得到了同样的错误.
所以我想对这种行为做一些解释.提前感谢所有答案.