Opencl cl_khr_fp64和cl_amd_fp64之间的差异?
我刚刚发现,在我的(相当昂贵的)Radeon 6970上,只支持Opencl cl_khr_fp64和cl_amd_fp64之间的差异?,opencl,gpu,amd-processor,Opencl,Gpu,Amd Processor,我刚刚发现,在我的(相当昂贵的)Radeon 6970上,只支持cl\u amd\u fp64扩展。使用cl\u amd\u fp64运行时,我在代码的某些部分得到了奇怪的结果(访问0.005的值实际上使用1.99916e+37?)。将cl\u khr\u fp64与CPU上的英特尔SDK配合使用,效果很好。(输入缓冲区完全相同) 报告提供的信息很少 两者之间的具体区别是什么?cl\u khr\u fp64是Khronos官方的双精度浮点精度扩展。它要求算法符合IEEE 754-2008标准,并
cl\u amd\u fp64
扩展。使用cl\u amd\u fp64运行时,我在代码的某些部分得到了奇怪的结果(访问0.005
的值实际上使用1.99916e+37
?)。将cl\u khr\u fp64
与CPU上的英特尔SDK配合使用,效果很好。(输入缓冲区完全相同)
报告提供的信息很少
两者之间的具体区别是什么?cl\u khr\u fp64
是Khronos官方的双精度浮点精度扩展。它要求算法符合IEEE 754-2008标准,并支持所有OpenCL向量类型和标准库函数
最初,AMD只实现了cl_khr_fp64
扩展所需的一部分,因此他们发布了自己的供应商扩展cl_AMD_fp64
,以支持其GPU硬件的双精度。当它首次出现时,支持范围非常有限(可能只有+、-、*和非标准舍入行为IIRC),但随着后续SDK发布和新的硬件修订,它已经慢慢扩展。如果我的记忆正常,他们会在发行说明中列出支持的内容
我已经有一段时间没有密切关注他们的进展了,所以我不知道为什么你们看到的可能会发生。如果您安装了最新的驱动程序和stream SDK版本,我建议您准备一个复制案例,并向他们提交一份bug报告。可能是您正在使用一些他们不支持或不保证结果的东西,但也可能是您发现了一个bug。谢谢。我刚刚发现这个bug只在struct
中的一些安排中触发,可能存在对齐问题(union{struct{double;};}
之后int
是bug,如果union
在double4
之后,就可以了)。我将试着处理这个问题,找出一个可能的原因,并找出一个最小的例子。