我了解银行、银行宽度和银行冲突。但我不明白多个静态分配的共享内存是如何通过银行布局的。
如果我假设: 4 字节的银行宽度 32 银行 sizeof(int) == 4 字节
那么shared1和shared2将如何在整个银行中布局呢?是否会在 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]
}
最后,声明的顺序会改变共享内存的布局吗?