opencl(九)----标量、向量数据类型

1、opencl 标量数据类型

bool   
char                                   
unsigned char/uchar
short                              16位有符号整数(补码)
ushort
int                                 32位有符号整数(补码)
uint                                32位无符号
long                                64位有符号
ulong
half                                 16位浮点数
float                                32位浮点数
intptr_t                            有符号整数指针
uintptr_t                           无符号整数指针
ptrdiff_t                            有符号的整数(指针相减)
size_t                               无符号整数(操作符大小)
void

2、向量数据类型

charn
ucharn
shortn
ushortn
intn
uintn
longn
ulongn
floatn

向量宽度:

通过查询设备信息,可以获得首选向量宽度常见的可以取128位(16个字节)等

//使用 clGetDeviceInfo  获取设备支持类型向量长度
cl_uint length;
clGetDeviceIndo(device,CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR,sizeof(length),&length,NULL);
// 向量的初始化
float4 f_vec=(float4)(1.1);   // 4个float, 1.1
int4 i_vec=int4(1,2,3,4);

float2 a_vec=(float2)(1.2, 1.4);
float4 b_vec=(float4)(a_vec, 3.1, 0.4);

//读取、修改
char16 msg=(char16)('f','e','i','h','o','p','e','n','c','l','t','e','s','t','r','d');
//数字索引
char temp = msg.s0;
temp=msg.s8;
char temp2 = msg.sC;      //12的十六进制 为 C,相当于 msg.s12
char8=(char8)(msg.s0427,msg.sE4,msg.EC);
// hi  lo  even odd
ushort8 shorts = (ushort8)(0, 10, 20, 30, 40, 50, 60, 70);
ushort4 a = shorts.hi; //索引较高的部分
ushort4 b = shorts.lo; //索引较低的部分
ushort4 c = shorts.even;//偶数索引部分
ushort4 d = shorts.odd;//奇数索引部分
原文地址:https://www.cnblogs.com/feihu-h/p/12091826.html