關於offload中nocopy時的誤區

2021-07-05 10:17:50 字數 1005 閱讀 6778

在使用intel的mic卡的過程中,最根本的乙個工具就是offload,通過offload,可以輕鬆的讓**跑在mic上,這當然會涉及乙個問題:cpu端的資料如何載入到mic的記憶體中的?

offload的記憶體管理是通過雜湊表來實現,cpu端的資料基位址作為雜湊表的key關聯mic的記憶體,從而實現mic端的記憶體的動態開闢(alloc_if(1)free_if(0))。

我們可能會遇到一種情況:只有在mic端在用到某組資料,這是nocopy就是個很好的工具。但是大家千萬不要用未初始化的指標去offload。

例1.

unsigned int

*ptr1, *ptr2;

#pragma offload target(mic)\

nocopy(ptr1:length(len1), alloc_if(1)free_if(0))\

nocopy(ptr2:length(len2), alloc_if(1)free_if(0))

大家嘗試下,可以發下,在mic端列印出來的ptr1和ptr2的位址是一樣的!一樣的!一樣的!如果不注意這一點的話,用起來就只有是哭的份了,得不到正確的結果。

為了規避這個問題,就需要我們自己在mic端手動開闢記憶體來用了。在退出mic時,再釋放掉就可以了。具體方法如下:

unsigned

int *ptr1, *ptr2;

#pragma offload target(mic)\

nocopy(ptr1:length(0), alloc_if(1)free_if(0))\

nocopy(ptr2:length(0), alloc_if(1)free_if(0))

偽**:

void main()

// mic端程式結束時,釋放記憶體

#pragma offload target(mic)\

nocopy(ptr1,ptr2)

}

MIC中offload語法總結

mic中offload的用法如下 pragma offload specifier specifier.specifier可以填入的選項為 target 例 taget mic 0 if 例 if n 100 in 例 in p length len alloc if 1 out 例 out p l...

python中關於Opencv中關於矩形的函式總結

最近處理影象,以前用的都是matlab,現在入手python比較慢,這幾天看到了很多命名和功能相似的函式,作個記錄總結一下 只是為了能夠看下函式知道它是做什麼的,因此不會對其用法說得面面俱到。看到乙個文章講得清晰詳實,分享一下 功能 計算輪廓內的面積 示例 輸入為乙個點集 contours 0 為前...

js中關於時間

1 獲取當前時間 var mydate new date mydate.getyear 獲取當前年份 2位 mydate.getfullyear 獲取完整的年份 4位,1970 mydate.getmonth 獲取當前月份 0 11,0代表1月 mydate.getdate 獲取當前日 1 31 m...