我必须在运行时在共享内存中分配2个数组,长度不同,如下所示:
__global__ kernel()
{
__shared__ int A[blockDim.x*6];
__shared__ int B[8][blockDim.x*3];
}
我如何确保在启动像kernel <<<b,t,s>>>
这样的内核时,两者都会有不同的长度?
答案 0 :(得分:2)
如果块大小是常量,则可以将其声明为常量并将其用于静态分配:
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>>>();