CUDA實踐指南(十三)

2021-09-21 03:11:51 字數 1147 閱讀 3131

裝置記憶體空間:

cuda裝置使用多個記憶體空間,這些記憶體空間具有不同的特性,這些特性反映了它們在cuda應用程式中的不同用法 這些記憶體空間包括全域性,本地,共享,紋理和暫存器,如圖2所示

合併的訪問要求取決於裝置的計算能力,可以查閱cuda c程式設計指南中。

在這些不同的記憶空間中,全域性記憶是最豐富的; 請參閱cuda c程式設計指南的功能和技術規格,以了解每個計算功能級別上每個記憶體空間的可用記憶體量。 全域性,本地和紋理記憶體的訪問延遲最大,其次是常量記憶體,共享記憶體和暫存器檔案。

儲存器型別的各種主要特徵如表1所示:

在紋理訪問的情況下,如果紋理引用繫結到全域性記憶體中的線性陣列,則裝置**可以寫入底層陣列。 繫結到cuda陣列的紋理引用可以通過表面寫入操作寫入,方法是將表面繫結到相同的底層cuda陣列儲存)。 應該避免在同一核心啟動時寫入其底層全域性記憶體陣列時從紋理中讀取紋理,因為紋理快取是唯讀的,並且在修改相關聯的全域性記憶體時不會失效。

對全域性記憶體的合併訪問:

程式設計支援cuda的gpu架構的最重要的效能考慮因素可能是全域性記憶體訪問的合併。 當某些訪問要求得到滿足時,全域性記憶體載入和通過乙個warp執行緒儲存被裝置合併為少至乙個事務。

高優先順序:確保全域性記憶體訪問盡可能合併。

對於計算能力為2.x的裝置,可以很容易地總結這些需求:對乙個warp執行緒的併發訪問將合併成許多事務處理,這些事務處理的數量等於為warp的所有執行緒提供服務所需的快取記憶體行數。 預設情況下,所有訪問都通過l1快取,即128位元組的行。 對於分散訪問模式,為了減少過度訪問,有時僅在l2中進行快取記憶體是有用的,l2快取了較短的32位元組段。

對於計算能力3.x的裝置,訪問全域性記憶體僅快取在l2中; l1保留用於本地記憶體訪問。 一些計算能力為3.5,3.7或5.2的裝置也允許在l1中選擇全域性快取。

在開啟ecc時,以合併方式訪問記憶體更為重要。 分散訪問會增加ecc記憶體傳輸開銷,特別是在將資料寫入全域性記憶體時。

以下簡單示例說明了合併概念。 這些例子假設計算能力2.x. 這些示例假設訪問通過l1進行快取,這是這些裝置的預設行為,除非另有說明,訪問是針對4個位元組的字。

CUDA實踐指南(十六)

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

CUDA實踐指南(九)

頻寬 頻寬 資料可以傳輸的速率 是效能最重要的門控因素之一。的幾乎所有變化都應該在它們如何影響頻寬的情況下進行。頻寬可能會因資料儲存的記憶體選擇,資料布局方式以及訪問順序以及其他因素而受到顯著影響。要準確測量效能,計算理論和有效頻寬非常有用。當後者遠低於前者時,設計或實現細節可能會降低頻寬,並且應該...

CUDA實踐指南(七)

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