我对如何在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); }
关于全局内存和共享内存的特定速度问题,已经有很多问题,但没有一个涵盖实践中何时使用其中任何一个的概述。
非常感谢。