如果只做矩阵加法没有必要用到共享内存(shared memory)来友亏空做缓存。用一位数组存储矩阵,然后直接用strided loop就行了,这样可以保证代买的scalability。提速可以依靠Kepler架构的L1 缓存来实现自动的缓存。
__global__ void MatrixAdd(// Inputs
int n, // Size of the matrix
好瞎float *a,
float *b,
// Output
float *c)
{
for(auto i = blockIdx.x*blockDim.x+threadIdx.x
i < n
i += blockDim.x * gridDim.x)
{
c[i] = a[i] + b[i]
}
}
// 在调用这个Kerenel之前设定空瞎cudaDeviceSetCacheConfig(cudaFuncCachePreferL1)就行了,意思是主要用L1来做缓存。
cuda是基于标准c语言的,你先把c语言的基础学好,然后动手自己写一顷知些c语言的程序,等对c语言有一定的功底之后,再看cuda,cuda与c语言的不同之处我觉得州塌在于那册乎圆个内核函数,以及如何划分线程块和栅格的纬度和大小,以及如何实现对于线程的索引的搜索,让每一个线程处理对应的一个变量或者几个变量。然后是cuda的一些基础的语法,这些你可以看一些简单的cuda的例子,例如矩阵相加的例子,通过这些程序的例子可以很好的理解这些语法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)