前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCL: kernel中的向量关系运算符和等价运算符(>,=,

OpenCL: kernel中的向量关系运算符和等价运算符(>,=,

作者头像
10km
发布2019-05-25 22:42:55
1.1K0
发布2019-05-25 22:42:55
举报
文章被收录于专栏:10km的专栏10km的专栏

版权声明:本文为博主原创文章,转载请注明源地址。 https://cloud.tencent.com/developer/article/1433794

opencl的kernel编程语言是C99标准的一个子集,在C99的基础上opencl增加了向量数据类型(Scalar Data Types):charn,ucharn,shortn,ushortn,intn,uintn,longn,ulongn,floatn,doublen(n=2,4,8,16)。

这些向量类型与基础的标量类型(Vector Data Types)一样支持各种算术和逻辑运算符。

Opencl中的关系运算符(relational operators)包括(<,>,<=,>=),等价运算符(equality operators)包括(==,!=),所有的关系运算符和等价运算符的返回结果都是一个整数类型。向量类型比较时,返回的结果是对应同样字节长度的整数向量类型:

charn,ucharn类型的结果就返回 charn;

shortn,ushortn类型的结果就返回 shortn;

intn,uintn类型的结果就返回 intn;

longn,ulongn类型的结果就返回 longn;

floatn类型的结果就返回 intn;

doublen类型的结果就返回 longn;

例如

代码语言:javascript
复制
uint2 x=(uint2)(1,2);
uint2 y=(uint2)(0,1);
int2 r=x>y; //正确
uchar2 r2=x>y;//编译错误 uchar与int长度不同

在进行向量比较的时候,允许两个同类型向量比较,也允许一个向量与一个标量类型比较。

两个向量比较的时,它们的类型必须一样。

例如:

代码语言:javascript
复制
uint2 x=(uint2)(1,2);
uint2 y=(uint2)(0,1);
long2 z=(uint2)(0,1);
uint4 z2=(uint4)(0,1,2,3);
int2 r1=x>y; //正确
int2 r2=x>z; // 编译错误,x和z的类型不同
int2 r3=x>z2; // 编译错误,x和z的类型不同

一个向量和一个标量类型比较的时候,标量的类型必须与向量的元素类型一样或者能被隐式转换成向量元素类型,在比较运算时标量类型被扩展为与向量类型一样元素数目的标量,然后参与比较运算。

例如:

代码语言:javascript
复制
uint2 x=(uint2)(1,2);
int2 r1=x>0; //正确 等价于 x>(int2)(0,0)

当比较结果为true时,结果标量的对应元素值为-1,

当比较结果为false时,结果标量的对应元素值为0

如果向量元素为NaN,则结果返回0

例如:

代码语言:javascript
复制
uint2 x=(uint2)(1,2);
uint2 y=(uint2)(0,3);
int2 r=x>y; // r为 (-1,0)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年03月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档