【发布时间】:2013-04-07 14:54:16
【问题描述】:
CUDA 的减少让我完全感到困惑!首先,Mark Harris 的 this 教程和 Mike Giles 的 this one 都使用了声明 extern __shared__ temp[]。声明时在 C 中使用关键字 extern,但分配发生在“elsehre”(例如,通常在另一个 C 文件上下文中)。 extern 这里的相关性是什么?我们为什么不使用:
__shared__ float temp[N/2];
例如?或者我们为什么不将temp 声明为全局变量,例如
#define N 1024
__shared__ float temp[N/2];
__global__ void sum(float *sum, float *data){ ... }
int main(){
...
sum<<<M,L>>>(sum, data);
}
我还有一个问题?每个块应该使用多少块和线程来调用求和内核?我试过this example(基于this)。
注意:您可以找到有关我的设备的信息here。
【问题讨论】:
-
有两种不同的共享内存分配方法,一种是静态分配的大小,一种是动态分配的大小。阅读here。如果你说
__shared__ float temp[256];你正在做一个静态分配。如果您说extern __shared__ float temp[];,您正在执行动态(在运行时)分配。