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–索引號爲偶數的向量分量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章