CUDA學習(二十八)

2021-09-21 08:15:33 字數 2060 閱讀 7808

多處理器級別:

在更低層次上,應用程式應該最大化多處理器內各個功能單元之間的並行執行;

如「硬體多執行緒」中所述,gpu多處理器依賴於執行緒級並行性來最大限度地利用其功能單元。因此利用率與駐留經線的數量直接相關。在每個指令發布時間,乙個warp排程器選擇乙個準備好執行下乙個指令的warp(如果有的話),然後傳送指令給warp的活動執行緒。乙個warp準備好執行下一條指令需要的時鐘週期數稱為等待時間,當所有的warp排程器總是有一些指令在每個時鐘週期發出一些warp時,或者換句話說,當延遲完全「隱藏」時。隱藏l個時鐘週期的延遲所需的指令數取決於這些指令的各自吞吐量(請參閱算術指令了解各種算術指令的吞吐量)。假設所有指令的吞吐量最大,計算能力3.x的裝置的吞吐量為8l,這是因為多處理器每次在四個warp的乙個時鐘週期內每個warp發出一對指令,如compute capability 3.x中所述。

對於計算能力3.x的裝置,每個週期發布的八條指令是四對不同的warp,每對是為同乙個warp。

乙個warp沒有準備好執行下一條指令的最常見的原因是指令的輸入運算元還沒有可用。

如果所有輸入運算元都是暫存器,則延遲是由暫存器依賴性引起的,即一些輸入運算元是由一些先前的指令執行還沒有完成的。 在背靠背暫存器依賴性的情況下(即,一些輸入運算元是由前一條指令寫入的),延遲等於前一條指令的執行時間,並且變形排程器必須在該變形期間 時間。 執行時間依賴於指令而變化,但是對於計算能力3.x的裝置來說通常大約是11個時鐘週期,對於計算能力3.x的裝置來說,這轉換成44個warp(假設warp執行吞吐量最大的指令,否則更少 需要warp)。 這也假定了足夠的指令級並行性,以便排程程式總是能夠為每個warp發出指令對。

如果某些輸入運算元駐留在片外儲存器中,則計算能力3.x的裝置的延遲要高得多:200至400個時鐘週期。 在如此高的等待時間內保持warp排程器繁忙所需的warp數量取決於核心**及其指令級並行度。 一般來說,如果不帶片外儲存器運算元的指令(即,大多數時間的算術指令)的數量與帶有片外儲存器運算元的指令的數量的比率低(通常這個比率是常數 稱為程式的算術強度)。 例如,假設這個比率是30,同時假設計算能力3.x的裝置上的延遲是300個週期。 然後計算能力3.x的裝置需要大約40個warp(假設與前一段相同)。

另乙個原因是warp沒有準備好執行下一條指令,它正在等待某個內存欄(memory fence functions)或同步點(memory fence functions)。 同步點可以強制多處理器空閒,因為越來越多的經線等待同乙個塊中的其他經線在同步點之前完成指令的執行。 在這種情況下,每個多處理器有多個駐留塊可以幫助減少怠速,因為來自不同塊的經線不需要在同步點處等待彼此。

對於給定的核心呼叫,駐留在每個多處理器上的塊和warp的數量取決於呼叫的執行配置(execution configuration),多處理器的記憶體資源以及硬體多執行緒中描述的核心的資源需求。 使用-ptxas-options = -v選項進行編譯時,編譯器會報告註冊和共享記憶體使用情況。

塊所需的共享記憶體總量等於靜態分配的共享記憶體量和動態分配的共享記憶體量之和

核心使用的暫存器數量可能會對駐留經紗的數量產生重大影響。 例如,對於計算能力6.x的裝置,如果乙個核心使用64個暫存器,每個塊有512個執行緒並且只需要很少的共享記憶體,則兩個塊(即32個變形)可以駐留在多處理器上,因為它們需要2x512x64暫存器 ,與多處理器上可用暫存器的數量完全一致。 但是一旦核心使用乙個暫存器,只有乙個塊(即16個warp)可以駐留,因為兩個塊將需要2×512×65個暫存器,這些暫存器比多處理器上可用的暫存器多。 因此,編譯器會儘量減少暫存器使用量,同時保持暫存器溢位(請參閱「裝置記憶體訪問」),並儘量減少指令數量。 可以使用maxrregcount編譯器選項或啟動界限來控制登錄檔使用情況,如啟動介面中所述。

每個double變數和每個長變數使用兩個暫存器。

執行配置對於給定核心呼叫的效能的影響通常取決於核心**。 因此建議進行實驗。 應用程式還可以根據暫存器檔案大小和共享記憶體大小(取決於裝置的計算能力)以及裝置的多處理器數和記憶體頻寬來引數化執行配置,所有這些都可以使用執行時查詢 (參見參考手冊)。

應該選擇每個塊的執行緒數作為翹曲大小的倍數,以避免盡可能多地浪費帶有不足的歪曲的計算資源。

二十八 模組

模組 在電腦程式的開發過程中,隨著程式 越寫越多,在乙個檔案裡 就會越來越長,越來越不容易維護。為了編寫可維護的 我們把很多函式分組,分別放到不同的檔案裡,這樣,每個檔案包含的 就相對較少,很多程式語言都採用這種組織 的方式。在python中,乙個.py檔案就稱之為乙個模組 module 使用模組有...

JAVA學習總結二十八

meta標籤 告訴搜尋引擎你的站點的主要內容 設定網頁編碼集定時讓網頁在制定的時間n內,跳轉到頁面http yourlink 表單元素 input select textarea 多行文字注意 層疊樣式表的含義是 如果有多個規則來描述同乙個元素,那麼會根據樣式表的優先順序,來決定最終顯示什麼樣式。m...

Lua程式設計(二十八)

lua語言會在執行源 之前先對其進行預編譯。生成預編譯檔案 也被稱為二進位制檔案,binary chunk 的最簡單方式是,使用標準發行班中附帶的luac程式。luac o prog.lc prog.lua上述命令會建立檔案prog.lua的預編譯版本prog.lc。lua解析器會像執行普通lua ...