日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MIC的异步传输

發布時間:2025/5/22 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MIC的异步传输 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于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一個數組名。例如:

1 int counter; 2 float *in1; 3 counter=10000; 4 __attribute__((target(mic))) mic_compute; 5 cpu_cpmpute(); 6 while(counter>0){ 7 #pragma offload target(mic:0) signal(in1) 8 { 9 mic_compute(); 10 } 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端進行計算。

轉載于:https://www.cnblogs.com/sdxk/p/4216947.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的MIC的异步传输的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。