CUDA實踐指南(九)

2021-09-21 03:28:59 字數 1536 閱讀 4734

頻寬:

頻寬 - 資料可以傳輸的速率 - 是效能最重要的門控因素之一。 **的幾乎所有變化都應該在它們如何影響頻寬的情況下進行。 頻寬可能會因資料儲存的記憶體選擇,資料布局方式以及訪問順序以及其他因素而受到顯著影響。

要準確測量效能,計算理論和有效頻寬非常有用。 當後者遠低於前者時,設計或實現細節可能會降低頻寬,並且應該成為後續優化工作的主要目標。

高優先順序:在衡量效能和優化優勢時,使用計算的有效頻寬作為度量標準。

理論頻寬計算:

理論頻寬可以使用產品文獻中提供的硬體規格進行計算。 例如,nvidia tesla m2090使用gddr5(雙倍資料速率)ram,儲存器時鐘頻率為1.85 ghz,儲存器介面為384位。

使用這些資料項,nvidia tesla m2090的最高理論記憶體頻寬為177.6 gb / s

$(1.85times10^times(384/8)times2)div10^=177.6gb/s

$在此計算中,由於雙倍資料速率,儲存器時鐘速率被轉換為hz,乘以介面寬度(除以8,將位轉換為位元組)並乘以2。 最後,此產品除以$10^$以將結果轉換為gb / s。

一些計算使用$1024^3$而不是$10^9$進行最終計算。 在這種情況下,頻寬將達到165.4gb / s。 計算理論和有效頻寬時使用相同的除數很重要,以便比較有效。

啟用ecc後,由於記憶體校驗和的額外流量,有效最大頻寬減少了大約20%,但ecc對頻寬的確切影響取決於記憶體訪問模式。

有效頻寬計算:

有效頻寬是通過定時特定的程式活動以及了解程式如何訪問資料來計算的。 為此,請使用以下等式:

$effective bandwidth=((b_+b_)\div10^)\div time$

這裡,有效頻寬以gb / s為單位,$b_$是每個核心讀取的位元組數,$b_$是每個核心寫入的位元組數,時間以秒為單位。

例如,要計算2048 x 2048矩陣副本的有效頻寬,可以使用以下公式:

$effective bandwidth=((2048^\times4\times2)\div 10^)\div time$

元素數量乘以每個元素的大小(浮點數為4個位元組)乘以2(因為讀取和寫入),再除以$10^$(或$1,024^3$)以獲得傳輸的記憶體gb。 這個數字除以獲得gb / s的秒數。

吞吐量由visual profiler報告:

對於計算能力為2.0或更高的裝置,visual profiler可用於收集多個不同的記憶體吞吐量度量。 以下吞吐量指標可顯示在「詳細資訊」或「詳細資訊圖」檢視中:

請求的全域性負載吞吐量和請求的全域性儲存吞吐量值指示核心請求的全域性記憶體吞吐量,因此對應於有效頻寬計算下顯示的計算所獲得的有效頻寬。

由於最小記憶體事務大小大於大多數字大小,因此核心所需的實際記憶體吞吐量可能包括未被核心使用的資料傳輸。 對於全域性記憶體訪問,此實際吞吐量由全域性負載吞吐量和全域性儲存吞吐量值報告。

請注意,這兩個數字都很有用。 實際的記憶體吞吐量顯示了**與硬體限制有多接近,並且將有效或請求的頻寬與實際頻寬進行比較,可以很好地估計由於儲存訪問次優聯合而浪費了多少頻寬。 對於全域性記憶體訪問,請求記憶體頻寬與實際記憶體頻寬的比較由全域性記憶體負載效率和全域性記憶體儲存效率度量標準報告。

CUDA實踐指南(十六)

共享記憶體啟用塊中線程之間的協作。當乙個塊中的多個執行緒使用全域性記憶體中的相同資料時,共享記憶體只能用於從全域性記憶體訪問一次資料。共享記憶體還可以用來避免未合併的記憶體訪問,方法是從全域性記憶體中載入和儲存合併模式的資料,然後將其重新排列在共享記憶體中。除了儲存體衝突之外,共享記憶體中的變形對非...

CUDA實踐指南(十三)

裝置記憶體空間 cuda裝置使用多個記憶體空間,這些記憶體空間具有不同的特性,這些特性反映了它們在cuda應用程式中的不同用法 這些記憶體空間包括全域性,本地,共享,紋理和暫存器,如圖2所示 合併的訪問要求取決於裝置的計算能力,可以查閱cuda c程式設計指南中。在這些不同的記憶空間中,全域性記憶是...

CUDA實踐指南(七)

數值精度和精度 由於計算和儲存浮點值的方式,導致錯誤或意外的結果主要來自浮點精度問題。以下各節介紹了感興趣的主要專案。cuda c程式設計指南的特性和技術規範 以及有關浮點精度和效能的 和附帶網路研討會中提供了浮點運算的其他特性,可從獲得精密performancefloating 點和ieee 75...