CUDA的减少让我非常困惑!首先,Mark Harris的this教程和Mike Giles的this one均使用声明extern __shared__ temp[]
。在进行声明时,C中使用关键字extern
,但分配发生在“elsewhre”(例如,通常在另一个C文件上下文中)。 extern
这里的相关性是什么?我们为什么不使用:CUDA总结减少难题
__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的信息。
有两种不同的分配共享内存的方法,一种是静态分配的大小,另一种是动态分配的大小。阅读[这里](http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#shared)。如果你说'__shared__ float temp [256];'你正在做一个静态分配。如果你说'extern __shared__ float temp [];'你正在做一个动态的(在运行时)分配。 – 2013-04-07 15:00:48