2011-09-06 47 views
0

假設,我聲明一個局部變量在爲每個線程CUDA內核函數:本地內存訪問是否合併?

float f = ...; // some calculations here 

還假設,即所聲明的變量被放置在由一個編譯器的本地存儲器(其爲相同,除了全球一個只有我知道的情況下,它對於一個線程纔是可見的)。我的問題是,在閱讀時會訪問f嗎?

回答

2

我不認爲有關於如何在內存中佈置局部內存(或Fermi堆棧)的官方文檔,但我非常確定多處理器分配以「條帶化」方式訪問,以便不發散相同warp中的線程將獲得合併訪問本地內存的權限。在Fermi上,本地內存也使用與全局內存相同的L1/L2訪問機制進行緩存。

-1

CUDA卡沒有爲本地變量分配內存。所有局部變量都存儲在寄存器中。具有大量變量的複雜內核減少了可以併發運行的線程數量,這種情況稱爲低佔用率。

+0

這根本不是真的。每個線程可以有一個靜態分配的本地內存分配高達16kb。該存儲器存儲在片外的SDRAM中,不會被緩存。有關更多信息,請參見[this](http://drdobbs.com/high-performance-computing/215900921)或CUDA編程指南。 – talonmies

+0

你說得很對。我已經多次查看編程指南,並且從未注意過。 –