您的位置:首页 > 运维架构

OpenCL在Mac上开发注意的一些问题

2013-04-16 14:38 162 查看
前提:作者所用平台Mac mini Mac OS X version 10.7.5 ,CPU :Intel Core i5-2520, 显卡:ATI Radeon HD 6630M,OpenCL 1.1

本文主要是阐述一下在OpenCL开发过程中出现了一些属于Mac平台限制的几个问题:

(1)在赋值时候的强制转化问题

例如:如果在kernel里面含有如下语句

int A = 8;
float f = 0.1;
float ss;
ss = (A>0)? f:0;
此时Mac就会提示:CL_BUILD_PROGRAM_FAILURE

处理上述问题的办法就是将0强制转化为float类型:
int A = 8;
float f = 0.1;
float ss;
ss = (A>0)? f : (float)0;
作者遇到的基本上是从int强制转化为char,或者其他非float类型必须强制转化为float类型等。
(2)在运算过程中的强制转化问题

例如:如果在kernel里面含有如下语句

float sum = 0;
int a = 1;
int b = 2;
sum = a * b + sum;
此时Mac同样会提示:CL_BUILD_PROGRAM_FAILURE

Mac不会强制的将数据类型转化,只能靠手动将其数据类型强制转化:
float sum = 0;
int a = 1;
int b = 2;
sum = (float) a * (float) b + sum;
(3)隐含的空格问题

例如:如果在options里面包含有潜在的多余空格的话,如下:

clBuildProgram (cl_program program, cl_uint num_devices, const cl_device_id *device_list, const char *options,
void (CL_CALLBACK *pfn_notify)(cl_program program, void *user_data);
如果在clBuildProgram中的options中显示或者有潜在隐含的多余空格的话,就会提示CL_INVAILD_BUILD_OPTIONS,做法是去掉多余空格。
(4)其他

例如:如果在kernel中包含下面代码

#define dst (( dst >> 1 ) & 1)
在开发过程中遇到上述问题,就会提示CL_BUILD_PROGRAM_FAILURE

当改为:

#define dst (( dst / 2 ) & 1)


编译通过,具体原因还待进一步考究。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: