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

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;
例如

uint2 x=(uint2)(1,2);
uint2 y=(uint2)(0,1);
int2 r=x>y; //正确
uchar2 r2=x>y;//编译错误 uchar与int长度不同

在进行向量比较的时候,允许两个同类型向量比较,也允许一个向量与一个标量类型比较。
两个向量比较的时,它们的类型必须一样。
例如:

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的类型不同

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

uint2 x=(uint2)(1,2);
int2 r1=x>0; //正确 等价于 x>(int2)(0,0)

当比较结果为true时,结果标量的对应元素值为-1,
当比较结果为false时,结果标量的对应元素值为0
如果向量元素为NaN,则结果返回0
例如:

uint2 x=(uint2)(1,2);
uint2 y=(uint2)(0,3);
int2 r=x>y; // r为 (-1,0)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

10km

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值