OenCL学习笔记(10)--向量数据类型

1.首选向量宽度:函数clGetDeviceInfo需要一个参数来表示所需的信息类型,opencl提供了一系列的参数来引用向量宽度,名字形如:CL_DEVICE_PREFERED_VECTOR_WIDTH_TYPE,函数的返回值是数据结构cl_uint,表示一个给定类型的向量其中有多少个相应类型的标量数据.TYPE可以设为char,short,int,long或float,当然也可为HALF或Double,但前提是设备要能支持这些数据类型,否则函数的返回值为0。
目标设备首选128位(16字节)的向量,这样宽度的向量可以相应的保存16个char型数,8个short型数,4个int型数,2个long型或是4个float型数。较多的char16和float4在内的128位的向量。
内核设计数据类型:首先调用函数clGetDeviceInfo找出目标设备所支持的首选向量宽度,然后将其设为函数clBuildProgram的编译选项。例如-DVECTOR_SIZE_128(float4)或-DVECTOR_SIZE_256(float8);

2.初始化向量:向量分量必须要带小括号,而不是大括号,数据需要作类型转化,变为相应的向量类型。下面是用四个float型数初始化向量data_vec:
float4 data_vec = (float4)(1.0, 1.0, 1.0, 1.0),如果向量分量的数值都相同,那么代码就可以简化为:
float4 data_vec = (float4) (1.0);
如果直接标量数值不是必须的,也可以用宽度较小的向量来进行初始化。
采用标量数值和向量混用的方式来进行向量初始化也是合法的。

3.读取和修改向量分量:OpenCL提供了三种方法来选择向量分量:数字索引、字符索引以及hi/lo/even/odd.一般的应用程序使用数字索引十分的方便,而在图像应用中则更适合使用字幕索引,hi,lo,even,和odd的后缀方法则更适合一次访问一半的向量分量。和获取复合数据结构的各个领域的点标记法相似,这三种方法也都采用了点标记法。0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F.
如果向量中包含有全部四个分量,就可以使用全部四种字符,否则的话,你就只能使用N(N=x,y,z,w)字符来访问相应的向量分量;最后一种索引方法时使用后缀名.hi, .lo, .even和.odd。各个后缀名表示的是一半的向量分量:
.hi–后半部分的向量分量(索引号等于N/2,N/2+1 … 1);
.lo–前半部分的向量分量(索引号等于0,1,。。。。N/2 1);
.even–索引号为奇数的向量分量;
.odd–索引号为偶数的向量分量。

发布了19 篇原创文章 · 获赞 20 · 访问量 567

猜你喜欢

转载自blog.csdn.net/INFINALGEORGE/article/details/105143802