2011-02-17 192 views
2

我需要了解一些有關CUDA共享內存的內容。假設我在G80卡上爲每塊10個線程分配了50個塊。 G80的每個SM處理器可以同時處理8個模塊。假設在做了一些計算之後,共享內存已被完全佔用。CUDA共享內存

當接下來的8個新塊到達時共享內存中的值是什麼?以前的值會駐留在那裏嗎?或者將先前的值複製到全局內存中,併爲後面的8個塊刷新共享內存?

+1

你能解釋一下好嗎?我不確定我是否關注你 – lurscher 2011-02-17 18:00:07

回答

5

它規定對類型修飾符:

  1. 變量在一個線程控制寄存器,只能停留在內核
  2. 變量在全局內存的線索中,僅停留在內核
  3. __device__ __shared__類型變量一個塊的共享內存,只留在內核中
  4. __device__在全局內存中爲網格類型變量,保持到應用程序退出
  5. 0123對於網格類型的變量,保持,直到應用程序退出

從而從這個參考文獻中,回答您的問題是,如果它們駐留在設備的共享存儲器中的存儲器應該被刷新爲下8個塊。

1

對於內核塊,執行順序和SM是隨機分配的。從這個意義上講,即使舊的價值或地址保留下來,也很難保持事情的順利進行。我懷疑甚至有辦法做到這一點。塊之間的通信通過片外存儲器完成。與片外存儲器相關的延遲是性能殺手,這使得gpu編程變得非常棘手。在費米卡中,塊共享一些二級緩存,但不能改變這些緩存的行爲。