在cuda中,哪个线程负责内核内请求的共享内存分配?

在cuda中,哪个线程负责内核内请求的共享内存分配?,cuda,Cuda,我知道内核中的指令是由所有线程执行的。让我们考虑以下情况: _global__ void staticReverse(int *d, int n) { __shared__ int s[64]; int t = threadIdx.x; int tr = n-t-1; s[t] = d[t]; __syncthreads(); d[t] = s[tr]; } 基本上,此代码将作为线程在不同的内核上运行。 现在有一个共享内存分配。因为所有线程都会遇到它(共享内存分配),所

我知道内核中的指令是由所有线程执行的。让我们考虑以下情况:

_global__ void staticReverse(int *d, int n)
{
  __shared__ int s[64];
  int t = threadIdx.x;
  int tr = n-t-1;
  s[t] = d[t];
  __syncthreads();
  d[t] = s[tr];
}
基本上,此代码将作为线程在不同的内核上运行。
现在有一个共享内存分配。因为所有线程都会遇到它(共享内存分配),所以它会被所有线程分配吗?(逻辑上不是。)但我确信至少有一个线程必须分配它。我想知道是哪根线做的?
请帮助我了解我的理解哪里是错误的。

没有线程负责此分配-线程不运行分配此内存所涉及的任何SASS代码

如果使用动态(
extern
)共享分配,则相同的语句是正确的—没有线程负责—这意味着线程不运行分配此内存所涉及的任何SASS代码。没有涉及函数调用或其他机制

当线程SASS代码(即内核)开始执行时,内存已经分配,并且指向它的指针已经建立


有一条皱纹需要注意。如果共享内存声明涉及构造函数,那么构造函数将在所有线程上运行。这可能是。

没有线程负责此分配-线程不运行分配此内存所涉及的任何SASS代码

如果使用动态(
extern
)共享分配,则相同的语句是正确的—没有线程负责—这意味着线程不运行分配此内存所涉及的任何SASS代码。没有涉及函数调用或其他机制

当线程SASS代码(即内核)开始执行时,内存已经分配,并且指向它的指针已经建立

有一条皱纹需要注意。如果共享内存声明涉及构造函数,那么构造函数将在所有线程上运行。这可以是