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

前提:作者所用平台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)

编译通过,具体原因还待进一步考究。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值