【CUDA學習】全域性儲存器

一點心青發表於2013-07-25

全域性儲存器,即普通的視訊記憶體,整個網格中的任意執行緒都能讀寫全域性儲存器的任意位置。

存取延時為400-600 clock cycles  非常容易成為效能瓶頸。

訪問視訊記憶體時,讀取和儲存必須對齊,寬度為4Byte。如果沒有正確的對齊,讀寫將被編譯器拆分為多次操作,降低訪存效能。

多個half-warp的讀寫操作如果能夠滿足合併訪問,則多次訪存操作會被合併成一次完成。

合併訪問的條件,GT200放寬了合併訪問的條件。

支援對8 bit、16 bit、32 bit、64 bit資料字的合併訪問 相應傳輸32Byte 64Byte 128Byte,大於128Byte,分兩次傳輸。

在一次合併傳輸的資料中,不要求執行緒編號和訪問的資料字編號相同。

當訪問128Byte資料時,如果地址沒有對齊到128Byte時,在GT200會產生兩次合併訪存。根據每個區域的大小,分為兩次合併訪存,如圖所示32Byte和96Byte。

PS:圖片來源於網上

關於訪存合併以及訪存衝突,關鍵就是要理解,GPU是以half-warp進行訪存時,即16個執行緒一起訪問儲存器,到這16個執行緒的訪問的地址在同一塊區域(指硬體上可以一起傳送寬

度)時,並且沒有衝突產生時,則這塊區域的資料可以被執行緒同時,提升了訪存的效率.

相關文章