cuda矩阵加法有必要用共享内存么

cuda矩阵加法有必要用共享内存么,第1张

如果只做矩阵加法没有必要用到共享内存(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的例子,例如矩阵相加的例子,通过这些程序的例子可以很好的理解这些语法。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12361408.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存