簡體   English   中英

在CUDA中跨塊的合並訪問?

[英]Coalescesed access across blocks in CUDA?

假設我們在塊1上運行了16個線程,在塊2上運行了另外16個線程。

每個線程從內存讀取1個雙倍:塊1上的16個線程需要從內存地址0-127讀取16個雙打,而塊2上的16個線程需要從地址128-255讀取。

我知道,由於合並訪問,塊1上的16個線程的內存讀取可以在一個內存事務中完成。

我的問題是,當我們考慮這兩個塊時,我們需要多少個內存事務,一個或兩個? 換句話說,不同塊的內存訪問可以同時發生嗎?

塊完全獨立 - 硬件可以選擇(並且可能 - 將)在不同的多處理器上啟動它們。

來自不同塊的線程將以不同的warp運行。 因此,不可能在它們之間合並存儲器訪問。

您至少需要兩個內存事務。 確保每個塊的線程將在不同的warp中處理。

此外,即使線程已形成一個warp或占用相同的多處理器和共享L1緩存,來自warp的地址也會轉換為128B或32B的行(取決於緩存/非緩存模式),因此在緩存模式的情況下,你會需要至少2個事務,並且在非緩存模式的情況下需要8個事務。 看看這個非常有用的演示文稿,以便更好地理解全局內存訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM