關於signal和wait,屬於非同步傳輸的語法,即cpu端無需等待offload語句返回,即可非同步執行下面的**。一般用於啟動mic**段後,併發執行cpu**,達到同步執行的目的。另外一種用法是使用offload_transfer和offload_wait語句,這兩個語句與offload類似,但只負責資料傳輸,後面不加入計算**。其中offload_transfer支援的引數與offload語句相同,offload_wait語句僅支援target,if,wait三個引數。兩種用法的signal和wait的使用方法是相同的,signal語句在offload**段結束後傳送乙個訊號,wiat語句負責接收,所以二者一定是成對使用,但是wait語句可以一次等待多個訊號,所以二者語句數量未必相等。signal和wait的引數tag,在c語言中,是傳輸的其中的乙個陣列的指標,即in/out/inout中的乙個陣列名,同時傳輸多個陣列的時候,能且只能signal/wait乙個陣列名。例如:
1intcounter;
2float *in1;
3 counter=10000;4
__attribute__((target(mic))) mic_compute;
5cpu_cpmpute();
6while(counter>0
)11 cpu_compute();//
此時函式與上面的mic函式併發執行
12#pragma offload_wait target(mic:0) wait(in)
13 counter--;
14 }
例子中定義了乙個mic計算函式mic_compute和乙個cpu計算函式cpu_compute。當程式執行到offload語句時,mic端執行mic_compute並將控制權交回cpu執行緒,cpu在得到控制權後,執行cpu_compute函式。cpu_compute函式執行完成後,執行offload_wait語句,offload_wait檢視之前offload語句發出的signal訊號是否已經到達,如果沒有到達,則等待,否則繼續執行下面的語句,即counter自減。
mic語句offload中有if的用法,可以根據條件判斷是否將該**放到裝置端執行。如果if中的表示式為假,則**放到cpu端執行,否則放到mic端執行。
#pragma offload target(mic) if(n>1000)
意為當n>1000時使用mic進行計算,否則使用cpu端進行計算。
同步傳輸 非同步傳輸
填空題 2016年 在資料傳輸率相同的情況下,同步傳輸率高於非同步傳輸速率的原因是 a 發生錯誤的概率小 b 附加的冗餘資訊量少 c 字元或組傳送,間隔少 d 採用crc迴圈碼校驗 b資料的傳輸方式一般有兩種,即同步傳輸與非同步傳輸。非同步傳輸意味著傳輸的雙方不需要使用某種方式來 對時 所以它並不傳...
同步傳輸 與 非同步傳輸
開門見山直接看圖。解析 1 不管是同步還是非同步,字元的傳送時間和接受時間要一樣。如乙個字元傳送為1秒,接受也需要為1秒 小於一秒的話,利用軟體延時 2 同步非同步最大的不同是 非同步傳輸時,間隙可以不同步。比如,幀1傳輸完後 隔5秒傳輸幀2.間隙為5秒。再接受方,接受完幀1後,可以隔10秒再開始接...
同步傳輸與非同步傳輸
在同步傳輸中,資料以塊或幀的形式傳送。此傳輸是全雙工型別。在傳送者和接收者之間強制性同步。在同步傳輸中,資料之間沒有間隙。與非同步傳輸相比,傳輸大量資料更加有效和可靠。在非同步傳輸中,資料以位元組或字元的形式傳送。該傳輸是半雙工型傳輸。在該傳輸中,在資料的起始位和停止位都新增了奇偶校驗位。它不需要同...