2012-11-09 51 views
5

我剛剛注意到,我的CUDA內核使用的空間比'theory'計算的空間大一倍。例如CUDA共享內存佔用比所需空間多兩倍的空間

__global__ void foo() 
{ 
    __shared__ double t; 
    t = 1; 
} 

PTX信息示出:
ptxas信息:用於_Z3foov功能性質,0字節堆棧幀,0字節溢出存儲,0字節溢出負載
ptxas信息:用於4個寄存器,16個字節SMEM,32個字節CMEM [0]

但是雙重的大小隻有8.

更多例如:

__global__ void foo() 
{ 
    __shared__ int t[1024]; 
    t[0] = 1; 
} 

ptxas info:使用3個寄存器,8192字節smem,32字節cmem [0]

有人可以解釋爲什麼嗎?

+1

@ Fr34K:運行時間設置如何可能與編譯器和彙編器所做的靜態賦值*的大小有關? – talonmies

+0

需要更多解釋。你初始化了多少塊? – Fr34K

+0

@talonmies:感謝您的澄清。我錯過了這一點。 :) – Fr34K

回答

1

似乎這個問題已經在當前的CUDA編譯器中消失了。

__shared__ int a[1024]; 

用命令編譯 'NVCC -m64 -Xptxas -v -ccbin /opt/gcc-4.6.3/bin/g++-4.6.3 shmem.cu' 給出

ptxas info : Used 1 registers, 4112 bytes smem, 4 bytes cmem[1] 

有在這種情況下一些共享的內存開銷,但使用量不會增加一倍。

+1

在問題編譯器可能會刪除t作爲變量沒有副作用。這16個字節可能是因爲您正在編譯compute_1x體系結構。上面的答案也是爲compute_10編譯的。如果您編譯爲SASS,那麼您可以使用cuobjdump來檢查每個共享內存分配,以確定如何計算大小。 –