OpenCL 資料傳輸操作

2021-10-04 13:19:28 字數 1449 閱讀 4382

1.載入和儲存同型別的資料:如果傳送端和接收端的資料型別相同,例如將乙個區域的int4型向量載入到另一區域中,只知道「=」即可。除了對變數賦值外,等號還可以將乙個區域的資料賦值傳輸到另乙個區域中。例如,核心想將全域性記憶體中的資料載入到區域性記憶體中,並將處理完的結果儲存回全域性記憶體。如果要將區域性記憶體改為私有記憶體,只需要將資料宣告中的_local識別符號去掉即可,預設的識別符號便是_private,因此,如果沒有識別符號,編譯器會將變數自動儲存在私有記憶體中。

2.將標量陣列載入儲存到向量中:大多數情況下,可能需要用向量來處理資料,但資料輸入卻一般都儲存在標量陣列中。這時,「=」就不管用了,你不可以將乙個位址空間中的資料型別轉換到另外乙個位址空間中。所以opencl提供了函式vloadn,用來將標量資料載入儲存到向量中:

vector  vloadn

(size_t offset,

const

__(g|c|l|p) scalar *mem);

n表示的是向量所包含的向量分數量,它必須被設定為2,3,4,8或16.vector可以是任意一種向量型別,而scalar則必須和vector中的分量型別一致。vector資料所在的記憶體位址可以和scalar資料所在的位址不同。例如,假設float_vec是乙個float4型向量,而float_array是乙個float型陣列。下面**的功能就是將float_array陣列中的四個float型資料儲存到float_vec向量中:

float_vec =

vload4(0

,float_array)

;

引數offset決定了哪些陣列元素將被放到向量之中。這個引數和向量的大小(而不是它的標量分量的大小)有關。

3.將向量儲存到標量陣列中:和函式vloadn將標量陣列儲存到向量類似,函式vstoren做的是反向操作,將向量中的資料儲存到標量陣列中:

void

vstoren

(vector vec, size_t offset,

__(g|l|p) scalar *mem);

這個函式將向量vec中的資料儲存到mem指向的標量陣列儲存到offset確定的位址空間中。和函式vloadn一樣,n必須等於向量vec中的分數量,其值必須設定為2,3,4,8或16.但是和函式vload不同,標量陣列不能儲存到乙個常數字址空間之中,下面**將int4型向量int_vec儲存到指標int_array所指向的整形陣列中;

vstore4

(int_vec,

0, int_array)

;

通過修改offset引數,可以將向量儲存到陣列中的不同位置,位置差為(向量大小*offset)。通過指標運算,可以將向量儲存在陣列中非對齊的記憶體位置。

opencl標準還分別提供了函式vload_halfn將半精度資料儲存到浮點型向量中,以及vstore_halfn將浮點型向量中的資料儲存到半精度陣列中。

C SFTP資料傳輸

我們有些客戶公司的資料比較重要,為了安全集團公司內部都使用的是區域網,但是有時候又不得不予外界網際網路做資料互動,所以有些不重要的系統是放在外界網際網路的,這樣以來內部系統和外部系統的資料互動就成為了問題,這樣以來就使用到了sftp伺服器來作為資料傳輸的中介。下面不說了,直接上c 此處使用了第三方動...

資料傳輸方式

資料傳輸方式 1 並行傳輸與序列傳輸 並行傳輸指的是資料以成組的方式,在多條並行通道上同時進行傳輸。常用的就是將構成一 個字元 的幾位二進位製碼,分別在幾個並行通道上進行傳輸。例如,採用8單位 的字 符 可以用8個通道並行傳輸。一次傳送乙個字元,因此收 發雙方不存在字元的同步問題,不需要另加 起 止...

flex wcf 資料傳輸

最近跟哲子做個專案,本來可以用asp.net輕鬆搞定,但是鑑於大家都比較想試用下學習已久的技術,所以便出現了flex與wcf entity這樣得前後臺組合。專案開始之初,著實為兩者之間的互動頭疼一番,在經過大量資料得獲取後,終於解決,以下寫出簡要的注意事項,由於wcf 我還是個徹頭徹尾的門外漢,資料...