所以我有一个项目是我在Mac Pro上使用双数据类型创建的,它完美无缺。现在我将我的项目移动到MacBook Air,它开始给我
Exception
ERROR: clBuildProgram(-11)
错误。现在的原因是我的MacBook Air不支持OpenCL的双精度类型。但恰恰相反,我发现了这一点:Mac OSx上的OpenCL内核错误。我在答案中应用了这个方法:
cl_device_fp_config cfg;
clGetDeviceInfo(devicesIds[0], CL_DEVICE_DOUBLE_FP_CONFIG, sizeof(cfg), &cfg, NULL); // 0 is for the device number I guess?
printf("Double FP config = %llu\n", cfg);
他解释说,如果结果为0,则表示不支持双精度。但我得到了这个结果:
Double FP config = 63
我也尝试过这种方法:
if (!cfg) {
printf("Double precision not supported \n\n");
} else {
printf("Following double precision features supported:\n");
if(cfg & CL_FP_INF_NAN)
printf(" INF and NaN values\n");
if(cfg & CL_FP_DENORM)
printf(" Denormalized numbers\n");
if(cfg & CL_FP_ROUND_TO_NEAREST)
printf(" Round To Nearest Even mode\n");
if(cfg & CL_FP_ROUND_TO_INF)
printf(" Round To Infinity mode\n");
if(cfg & CL_FP_ROUND_TO_ZERO)
printf(" Round To Zero mode\n");
if(cfg & CL_FP_FMA)
printf(" Floating-point multiply-and-add operation\n\n");
}
我得到了以下结果:
Double FP config = 63
Following double precision features supported:
INF and NaN values
Denormalized numbers
Round To Nearest Even mode
Round To Infinity mode
Round To Zero mode
Floating-point multiply-and-add operation
这里发生了什么?我的系统是否支持OpenCL的双精度?如果是,我如何启用和使用它?如果没有,我的替代方案是什么? 现在我很困惑。首先,我不知道我的MacBook Air是否支持双精度?显然它没有。但是有了输出,它似乎就是这样。
如果它不支持双精度,那我该怎么办?我应该将项目中的所有内容更改为浮动值吗?或者如果是,那我该如何启用呢?因为我遵循了很多教程和示例,但没有一个能够工作。例如https://streamcomputing.eu/blog/2013-10-17/writing-opencl-code-single-double-precision/但它们似乎都没有效果。
编辑:
答案 0 :(得分:1)
不幸的是override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
view1.center = self.view.center
view2.center = self.view1.center
view3.center = self.view2.center
}
支持在double
中是“可选的”,有些设备支持,有些则不支持...
如果设备支持OpenCL
,则设备扩展程序(double
)将包含CL_DEVICE_EXTENSIONS
或cl_khr_fp64
。
当双精度不可用时,有一些示例内核代码here可以使用浮点数。