【CUDA學習】全局存儲器

全局存儲器,即普通的顯存,整個網格中的任意線程都能讀寫全局存儲器的任意位置。 性能

存取延時爲400-600 clock cycles  很是容易成爲性能瓶頸。 線程

訪問顯存時,讀取和存儲必須對齊,寬度爲4Byte。若是沒有正確的對齊,讀寫將被編譯器拆分爲屢次操做,下降訪存性能。 blog

多個half-warp的讀寫操做若是可以知足合併訪問,則屢次訪存操做會被合併成一次完成。 圖片

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

支持對8 bit、16 bit、32 bit、64 bit數據字的合併訪問 相應傳輸32Byte 64Byte 128Byte,大於128Byte,分兩次傳輸。 it

在一次合併傳輸的數據中,不要求線程編號和訪問的數據字編號相同。 編譯

當訪問128Byte數據時,若是地址沒有對齊到128Byte時,在GT200會產生兩次合併訪存。根據每一個區域的大小,分爲兩次合併訪存,如圖所示32Byte和96Byte。 效率

PS:圖片來源於網上 硬件

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

度)時,而且沒有衝突產生時,則這塊區域的數據能夠被線程同時,提高了訪存的效率.

相關文章
相關標籤/搜索