同一个内核的多次启动是否可以访问共享变量?

Could shared variable be accessed by multiples launches of same kernel?

本文关键字:访问 共享变量 是否 启动 内核 同一个      更新时间:2023-10-16

我对内核中的共享变量有疑问。假设我像这样多次启动同一个内核:

if (index>i && index<n){
  K<<<1,n>>>(i, n, n);
}    

如果我在内核"K"中声明一个extern __shared__变量,像这样:

__global__ K(int i, int n){
  ...
  extern __shared__ int test[];
  ...
}

block内所有内核的所有线程都可以访问它吗?或者共享变量是内核独有的?

  1. cuda中存在Per-thread local memoryPer-block shared memoryglobal memory三种内存类型。
  2. __shared__变量存储在每个块内存中。同一个块中的所有线程都可以访问同一个__shared__变量。
  3. 如果变量需要在内核调用之间存在,则有__device__限定符,这表明该变量应该存储在全局空间中,并且具有应用程序的生命周期。