-2

我必须在运行时在共享内存中分配 2 个不同长度的数组,如下所示:

__global__ kernel()
{
__shared__ int A[blockDim.x*6]; 
__shared__ int B[8][blockDim.x*3];
}

我如何确保在启动这个内核时像kernel <<<b,t,s>>>两者一样会采用不同的长度?

4

1 回答 1

3

如果块大小是常量,您可以将其声明为常量并将其用于静态分配:

const int BLOCK_DIM_X = 512;
__global__ kernel()
{
    __shared__ int A[BLOCK_DIM_X*6]; 
    __shared__ int B[8][BLOCK_DIM_X*3];
}
kernel<<<grid, BLOCK_DIM_X>>>();

如果它不是常量,您可以使用动态共享内存分配:

__global__ kernel()
{
    extern __shared__ int smem[];
    int* A = smem;
    int* B = A + blockDim.x*6;
    // B[i][j] will be
    int t = B[i * (blockDim.x*3) + j];
}
size_t smem_size = (block.x*6 + 8 * block.x*3) * sizeof(int);
kernel<<<grid, block, smem_size>>>();
于 2013-06-26T06:55:49.997 回答