[cuda]常量内存


  • 博客分类:
 

    我们在cuda编程中定义变量的时候,可以用__constant__来修饰定义,代表着定义了一个常量内存。向常量内存中拷贝数据的时候不再使用,而改为使用。对于常量内存,不需要在使用完成后用cudafree释放空间。

    常量内存带来的性能提升

伦理片 http://www.dotdy.com/


    __constant__把对变量的访问限制为只读,跟从全局内存读取数据相比,从常量内存读取相同的数据可以节约内存带宽,原因是对常量内存的单次读操作可以广播到同一个线程块内的其他线程(节约15次读操作)。且常量内存的数据将被缓存起来,对相同地址的连续读操作将不会产生额外的内存通信量。 

     为了方便理解,写了一个用常量内存给数组赋值的程序。


Cpp代码   收藏代码
  1. #include<cuda_runtime.h>  
  2. #include<windows.h>  
  3. #include<iostream>  
  4. using namespace std;  
  5. const int nMax = 50;  
  6.   
  7. __constant__ float num1[40];  
  8. __global__ void exchangeKernel(float *aaa)  
  9. {  
  10.     int offset = threadIdx.x + blockDim.x * blockIdx.x;  
  11.     aaa[offset] = num1[offset];  
  12. }  
  13.   
  14. int main(){  
  15.     float *devA,tmp[40],res[40];  
  16.     cudaMalloc((void**)&devA, 40*sizeof(float));  
  17.     for (int i = 0; i < 40; i++)tmp[i] = i*1.5f;  
  18.     cudaMemcpyToSymbol(num1, tmp, 40 * sizeof(float));  
  19.     exchangeKernel << <4, 10 >> >(devA);  
  20.     cudaMemcpy(res, devA, 40 * sizeof(float), cudaMemcpyDeviceToHost);  
  21.     for (int i = 0; i < 40; i++){  
  22.         cout << res[i] << " " << endl;  
  23.     }  
  24.     cin >> res[1];  
  25.     return 0;  
  26. }  

  影音先锋电影 http://www.iskdy.com/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值