什麼是內核中聲明的數組的內存空間?例如在下面的代碼中,我聲明瞭數組a
。這個數組的位置在哪裏?我在本地內存和寄存器之間感到困惑?如果它在寄存器中,那麼它們的映射方式如何?CUDA內核中數組的內存空間
__device__ int ptr=0;
__global__ void a()
{
int b[9][9];
atomicAdd(&ptr,1);
b[0][0]=ptr;
for(int i=1;i<9;i++)
{
for(int j=1;j<9;j++)
{
b[i][j]=b[i-1][j-1]+1;
}
}
ptr=b[7][7]+1;
}
int main()
{
a<<<1,1>>>();
return 0;
}
一般情況下,有沒有辦法通過.ptx
文件,以瞭解各變量的存儲空間? 我編譯了這個--ptxas-options=-v
但沒有有用的信息。我看着.o
文件,但它不包含我想要的。我想要的只是內核中使用的變量的位置。
這樣的數組是線程本地數據,因此默認情況下將存儲在本地內存中。取決於訪問模式和大小,並受制於編譯器優化,它可以放置在寄存器中。對於寄存器中的數據,所有訪問必須使用編譯時常量索引,並且數組必須是「小」的,這由編譯器啓發式確定。 – njuffa
如何知道這些分配的實際位置? –
看看PTX(您可以使用--keep ro保存中間PTX)。您將看到來自本地內存的加載或註冊訪問。再次想到,註冊分配也可能發生在將PTX轉換爲SASS機器代碼的編譯器後端。你可以用cuobjdump --dump-sass檢查生成的SASS。 – njuffa