cuda臨界區問題的總結

2021-10-17 23:15:49 字數 1388 閱讀 3705

gpu在多執行緒處理資料的時候,可能會同時訪問到同乙個資料,這就會出現臨界區的處理問題。

cuda提供了多個atmoic原子操作,但是只支援一些基礎的資料型別,不能自定義結構體。對於多種資料的同步操作,就可能受到影響。

另一種解決臨界區的方法就是使用鎖的方法保護臨界區。

下面是在論壇找到的一些關於臨界區的討論:

因為gpu是按照wrap為單位排程執行緒的,乙個wrap裡面有32個執行緒,wrap遵從simt,即wrap裡面的執行緒執行同乙個執行。

如果按照上面的寫法,當wrap中的乙個執行緒獲得了鎖退出while迴圈,它不能截至往下執行需要等wrap中的其他執行緒退出迴圈,但是其他執行緒在等待第乙個執行緒釋放鎖,因此出現了死鎖。

deadlock出現死鎖的原因和code1類似。

這個可以正常執行,wrap中滿足if條件的只有乙個,無論排程器先排程那個執行緒,都可以正常執行。

上面兩個**的主要區別是,退出while迴圈的條件不同,第乙個是使用bool變數進行判斷,第二個是直接使用break退出。

使用除錯工具可以看出,atomicexch(0048)在分支語句if(0038)之後執行,這就會帶來if divergence的問題,由於排程器的排程就可能出現code1中的死鎖,因為鎖的釋放不確定。

通過除錯工具可以看到,這段**的atomicexch(0040)發生在if(0060)條件之前,這就不會出現上面的情況。

應盡量避免臨界區的問題,避免不了就嘗試減小臨界區的大小,看看能否將一些操作移動到外面。

所用鎖來解決臨界區的問題時要特別謹慎,因為gpu特殊的排程機制(wrap)會導致if divergence的問題。

FreeRTOS 臨界區總結

當一名嵌入式開發人員從裸機開發切換到 基於 freertos 的開發後就要注意 中斷,資源競爭等等問題了。下面,總結一下 freertos 臨界區的知識及用法 1.應用程式使用臨界區 1.1 深入剖析的方法 1.2 使用方法 2.中斷函式中臨界區 2.1 深入剖析的方法 2.2 使用方法 void ...

臨界區問題的產生一

臨界區問題是嵌入式軟體程式設計乙個不得不面對的關鍵性問題。特別對於底層驅動,在記憶體中只有乙份,上層的多工或者多程序,都會對同乙個驅動去訪問,這樣不可避免的遇到了任務之間打架的問題,處理好這個問題是區分乙個菜鳥和老鳥的根本性關鍵之一。接下來談談臨界區產生的原因 假設有以下 int x void pr...

Linux多執行緒臨界區問題

臨界區指的是乙個訪問共用資源 例如 共用裝置或是共用儲存器 的程式片段,而這些共用資源又無法同時被多個執行緒訪問的特性。當有執行緒進入臨界區段時,其他執行緒或是程序必須等待,有一些同步的機制必須在臨界區段的進入點與離開點實現,以確保這些共用資源是被互斥獲得使用,例如 semaphore。只能被單一執...