2

内核中声明的数组的内存空间是多少?例如,在下面的代码中,我声明了 array a。该阵列将位于何处?我对本地内存和寄存器感到困惑?如果它在寄存器中,那么它们究竟是如何映射的?

__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了文件,但它不包含我想要的内容。我想要的只是内核中使用的变量的位置。

4

2 回答 2

1

我正在回答这个问题,因为我从 GTC 中的一个演示文稿中得到了确认。因此,如果它们足够小,编译器将尝试将这些数组放入寄存器中。如果它们不能容纳在寄存器文件中,它将被溢出到本地内存。但主要存储区域是寄存器!

于 2012-09-28T09:45:05.087 回答
1

Thread 的私有数组肯定存储在本地内存空间中,在片外 DRAM 中,并且可能缓存在内存层次结构中。通常,非数组变量被认为是 PTX 中的虚拟寄存器,并且 PTX 中的寄存器数量是无限的。然而,显然所有这些虚拟寄存器都没有映射到物理寄存器。PTX 后处理器根据为 NVCC 指定的微架构标志将一些寄存器溢出到本地空间,并优化寄存器的使用。

于 2012-09-23T07:53:20.013 回答