Differences between cl_khr_fp64 and cl_amd_fp64?

2020-07-29 01:51发布

问题:

I just found that on my (pretty expensive) Radeon 6970, only cl_amd_fp64 extension is supported. I am getting odd results in some parts of the code (accessing the value of 0.005 actually uses 1.99916e+37?) when running with cl_amd_fp64. Using cl_khr_fp64 with Intel SDK on the CPU works just fine. (The input buffers are exactly the same)

The extension page gives very little information.

What are exactly the differences between both?

回答1:

cl_khr_fp64 is the Khronos official double precision floating point precision extension. It requires that arithmetic be IEEE 754-2008 compliant, and the full range of OpenCL vector types and standard library functions be supported.

Initially, AMD only implemented a subset of what the cl_khr_fp64 extension requires, so they issued there own vendor extension cl_amd_fp64 for supporting double precision on their GPU hardware. When it first appeared, the range of support was very limited (perhaps only +,-,* with non standard rounding behaviour IIRC), but it has slowly expanded with successive SDK releases and newly hardware revisions. They list what is supported in their release notes, if my memory serves correctly.

I haven't followed their progress closely for a while, so I am not sure why what you are seeing might be occurring. If you have the latest driver and stream SDK version installed, I would suggest putting together a repro case and filing a bug report with them. It might be you are using something they don't support or guarantee the results of, but it could also be that you have found a bug.