日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CUDA内存类型memory

發布時間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CUDA内存类型memory 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CUDA內存類型memory

4224人閱讀 評論(1) 收藏 舉報 分類: CUDA(106)

http://www.cnblogs.com/traceorigin/archive/2013/04/11/3015482.html

CUDA存儲器類型:

每個線程擁有自己的register and loacal memory;

每個線程塊擁有一塊shared memory;

所有線程都可以訪問global memory;

還有,可以被所有線程訪問的只讀存儲器:constant memory and texture memory

1、? 寄存器Register

  寄存器是GPU上的高速緩存器,其基本單元是寄存器文件,每個寄存器文件大小為32bit.

  Kernel中的局部(簡單類型)變量第一選擇是被分配到Register中。

  特點:每個線程私有,速度快。

2、? 局部存儲器 local memory

  當register耗盡時,數據將被存儲到local memory。如果每個線程中使用了過多的寄存器,或聲明了大型結構體或數組,或編譯器無法確定數組大小,線程的私有數據就會被分配到local   memory中。

  特點:每個線程私有;沒有緩存,慢。

  注:在聲明局部變量時,盡量使變量可以分配到register。如:

  unsigned int mt[3];

  改為: unsigned int mt0, mt1, mt2;

3、? 共享存儲器 shared memory

  可以被同一block中的所有線程讀寫

  特點:block中的線程共有;訪問共享存儲器幾乎與register一樣快.

[cpp] view plaincopy
  • //u(i)=?u(i)^2?+?u(i-1)??
  • //Static??
  • __global__?example(float*?u)?{??
  • ????int?i=threadIdx.x;??
  • ????__shared__?int?tmp[4];??
  • ?????tmp[i]=u[i];??
  • ?????u[i]=tmp[i]*tmp[i]+tmp[3-i];??
  • }??
  • ??
  • int?main()?{??
  • ????float?hostU[4]?=?{1,?2,?3,?4};??
  • ????float*?devU;??
  • ????size_t?size?=?sizeof(float)*4;??
  • ????cudaMalloc(&devU,?size);??
  • ????cudaMemcpy(devU,?hostU,?size,??
  • ????cudaMemcpyHostToDevice);??
  • ????example<<<1,4>>>(devU,?devV);??
  • ????cudaMemcpy(hostU,?devU,?size,??
  • ????cudaMemcpyDeviceToHost);??
  • ????cudaFree(devU);??
  • ????return?0;??
  • }??
  • ??
  • //Dynamic??
  • extern?__shared__?int?tmp[];??
  • ??
  • __global__?example(float*?u)?{??
  • ????int?i=threadIdx.x;??
  • ?????tmp[i]=u[i];??
  • ?????u[i]=tmp[i]*tmp[i]+tmp[3-i];??
  • }??
  • ??
  • int?main()?{??
  • ????float?hostU[4]?=?{1,?2,?3,?4};??
  • ????float*?devU;??
  • ????size_t?size?=?sizeof(float)*4;??
  • ????cudaMalloc(&devU,?size);??
  • ????cudaMemcpy(devU,?hostU,?size,?cudaMemcpyHostToDevice);??
  • ????example<<<1,4,size>>>(devU,?devV);??
  • ????cudaMemcpy(hostU,?devU,?size,?cudaMemcpyDeviceToHost);??
  • ????cudaFree(devU);??
  • ????return?0;??
  • }??
  • ?

    ?4、? 全局存儲器 global memory

      特點:所有線程都可以訪問;沒有緩存

    [cpp] view plaincopy
  • //Dynamic??
  • __global__?add4f(float*?u,?float*?v)?{??
  • int?i=threadIdx.x;??
  • ?u[i]+=v[i];??
  • }??
  • int?main()?{??
  • ????float?hostU[4]?=?{1,?2,?3,?4};??
  • ????float?hostV[4]?=?{1,?2,?3,?4};??
  • ????float*?devU,?devV;??
  • ????size_t?size?=?sizeof(float)*4;??
  • ????cudaMalloc(&devU,?size);??
  • ????cudaMalloc(&devV,?size);??
  • ????cudaMemcpy(devU,?hostU,?size,??
  • ????cudaMemcpyHostToDevice);??
  • ????cudaMemcpy(devV,?hostV,?size,??
  • ????cudaMemcpyHostToDevice);??
  • ????add4f<<<1,4>>>(devU,?devV);??
  • ????cudaMemcpy(hostU,?devU,?size,??
  • ????cudaMemcpyDeviceToHost);??
  • ????cudaFree(devV);??
  • ????cudaFree(devU);??
  • ????return?0;??
  • }??
  • ??
  • //static??
  • __device__?float?devU[4];??
  • __device__?float?devV[4];??
  • ??
  • __global__?addUV()?{??
  • int?i=threadIdx.x;??
  • ?devU[i]+=devV[i];??
  • }??
  • ??
  • int?main()?{??
  • ????float?hostU[4]?=?{1,?2,?3,?4};??
  • ????float?hostV[4]?=?{1,?2,?3,?4};??
  • ????size_t?size?=?sizeof(float)*4;??
  • ????cudaMemcpyToSymbol(devU,?hostU,?size,?0,?cudaMemcpyHostToDevice);??
  • ????cudaMemcpyToSymbol(devV,?hostV,?size,?0,?cudaMemcpyHostToDevice);??
  • ?????addUV<<<1,4>>>();??
  • ????cudaMemcpyFromSymbol(hostU,?devU,?size,?0,?cudaMemcpyDeviceToHost);??
  • ????return?0;??
  • }??
  • ? ?5、? 常數存儲器constant memory

    ?  用于存儲訪問頻繁的只讀參數

    ?  特點:只讀;有緩存;空間小(64KB)

       注:定義常數存儲器時,需要將其定義在所有函數之外,作用于整個文件?

    1 __constant__ int devVar; 2 cudaMemcpyToSymbol(devVar, hostVar, sizeof(int), 0, cudaMemcpyHostToDevice) 3 cudaMemcpyFromSymbol(hostVar, devVar, sizeof(int), 0, cudaMemcpyDeviceToHost)

    ?6、? 紋理存儲器 texture memory

    ? ? ?是一種只讀存儲器,其中的數據以一維、二維或者三維數組的形式存儲在顯存中。在通用計算中,其適合實現圖像處理和查找,對大量數據的隨機訪問和非對齊訪問也有良好的加速效果。

    ? ? ?特點:具有紋理緩存,只讀。

    TNE END

    總結

    以上是生活随笔為你收集整理的CUDA内存类型memory的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。