我对如何在 CUDA 中使用共享内存和全局内存感到困惑,尤其是在以下方面:
- 当我们使用
cudaMalloc()
时,我们得到一个指向共享内存或全局内存的指针吗? - 全局内存是驻留在主机还是设备上?
- 任何一个都有大小限制吗?
- 哪个访问速度更快?
将变量存储在共享内存中与通过内核传递其地址相同吗?即而不是拥有
__global__ void kernel() { __shared__ int i; foo(i); }
为什么不等效地做
__global__ void kernel(int *i_ptr) { foo(*i_ptr); } int main() { int *i_ptr; cudaMalloc(&i_ptr, sizeof(int)); kernel<<<blocks,threads>>>(i_ptr); }
关于全局与共享内存中的特定速度问题存在许多问题,但没有一个包含在实践中何时使用其中任何一个的概述。
非常感谢