2

我了解银行、银行宽度和银行冲突。但我不明白多个静态分配的共享内存是如何通过银行布局的。

如果我假设: 4 字节的银行宽度 32 银行 sizeof(int) == 4 字节

那么shared1shared2将如何在整个银行中布局呢?是否会在 shared1 之后立即放置 shared 2 (即 shared1 的最后一个值存储在 bank 0 中,而 shared2 的第一个值存储在 bank 1 中)?或者shared1的末尾会被填充(即shared1的最后一个值存储在bank 0中,bank 1~31被填充,shared 2从下一行的bank 0开始)?

__device__ void main( void ){
    __shared__ int shared1[33];
    __shared__ int shared2[31];
    ...
}

如果 shared2 在嵌套函数中分配,这种行为会有所不同吗?:

__device__ void main( void ){
    __shared__ int shared1[33];
    fun<<1, 1>>();
    ...
}

__device__ void fun( void ){
    __shared__ int shared2[31]
}

最后,声明的顺序会改变共享内存的布局吗?

4

0 回答 0