我刚刚发现在我的(相当昂贵的)Radeon 6970 上,只cl_amd_fp64
支持扩展。当0.005
使用. _ 在 CPU 上使用Intel SDK 效果很好。(输入缓冲区完全相同)1.99916e+37
cl_amd_fp64
cl_khr_fp64
扩展页面提供的信息很少。
两者之间究竟有什么区别?
我刚刚发现在我的(相当昂贵的)Radeon 6970 上,只cl_amd_fp64
支持扩展。当0.005
使用. _ 在 CPU 上使用Intel SDK 效果很好。(输入缓冲区完全相同)1.99916e+37
cl_amd_fp64
cl_khr_fp64
扩展页面提供的信息很少。
两者之间究竟有什么区别?
cl_khr_fp64
是 Khronos 官方的双精度浮点精度扩展。它要求算术符合 IEEE 754-2008,并且支持所有 OpenCL 矢量类型和标准库函数。
最初,AMD 只实现了cl_khr_fp64
扩展所需的一个子集,因此他们发布了自己的供应商扩展cl_amd_fp64
,以在其 GPU 硬件上支持双精度。当它第一次出现时,支持范围非常有限(可能只有 +,-,* 具有非标准舍入行为 IIRC),但随着后续 SDK 版本和新的硬件修订,它已经慢慢扩展。如果我没记错的话,他们会在发行说明中列出支持的内容。
我有一段时间没有密切关注他们的进展,所以我不确定你所看到的为什么会发生。如果您安装了最新的驱动程序和流 SDK 版本,我建议您整理一个重现案例并向他们提交错误报告。可能是您使用了他们不支持或不保证结果的东西,但也可能是您发现了一个错误。