了解CUDA计算(一)
生活随笔
收集整理的這篇文章主要介紹了
了解CUDA计算(一)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
初識CUDA計算
-
矩陣計算基礎:C=AB,A?R(K,M),B?R(M,P)C=AB, A-R(K,M), B-R(M,P)C=AB,A?R(K,M),B?R(M,P)
- 矩陣計算的內積視角
- 將A視為行向量矩陣,B視為列向量矩陣 C(i,j)=A(i,:)B(:j)C(i,j)=A(i,:)B(:j)C(i,j)=A(i,:)B(:j)
- 行向量視角
- 將B視為行向量矩陣,A視為系數矩陣C(i:)=∑m?>MA(I,:)B(M:)C(i:)=\sum{m} ->M A(I,:)B(M:)C(i:)=∑m?>MA(I,:)B(M:)
- 列向量視角
- 將A視為列向量矩陣,B視為稀疏矩陣C(:j)=∑m?>MB(mj)A(:m)C(:j)=\sum{m} -> M B(mj)A(:m)C(:j)=∑m?>MB(mj)A(:m)
- 矩陣計算的內積視角
-
并行計算理論
- 數據并行(多核多進程)
- 將許多可以解決問題的任務分割,然后分布在一個或者多個核上進行程序的執行。
- 任務并行(多核多進程)
- 將可以解決問題的數據進行分割,將分割好的數據放在一個或者多個核上進行執行;每一個核對這些數據都進行類似的操作。
- 數據并行(多核多進程)
-
CPU和GPU體系結構差異
- CPU有三級緩存,core數較少,擅長IO操作、中斷操作及分支等
- GPU有二級緩存,core數較多,計算處理單元多,擅長計算操作
-
CUDA多設備系統
- 設備遍歷
- // 設置設備數int deviceCount; // 獲取設備cudaGetDeviceCount(&deviceCount); int device;// 遍歷設備for (device=0;device<deviceCount;++device){cudaDevicePorp deviceProP;cudaGetDevicePorperties(&deviceProp, device);printf("Device %d has compute capability %d %d \n",device,devicePorp.major, deviceProp.minor);}
- 設備遍歷
-
設備選擇
- size_t size = 1024 * sizeof(float); cudaSetDevice(0); float* p0; cudaMalloc(&p0, size); MyKernek<<<1000, 12>>>(p0); cudaSetDevice(1); float* p1; cudaMalloc(&p1, size); MyKernel<<<1000, 128>>>(p1);
-
cuda事件和cuda流
- cudaSetDevice(0); cudaStream_t s0; cudaStreamCreate(&s0); MyKernel<<<100, 64, 0, s0>>>(); cudaSetDevice(1); cudaStream_t s1; cudaStreamCreate(&s1); MyKernel<<<100, 64, 0, s1>>>(); MyKernel<<<100, 64, 9, s0>>>();
-
設備間互訪
- cudaSetDevice(0); float* p0; size_t size = 1024*sizeof(float); cudaMalloc(&p0, size); MyKernel<<<1000, 128>>>(p0); cudaSetDevice(1); cudaDeviceEnableFeetAccess(0, 0); MyKernel<<<1000, 128>>>(p0);
-
Trust:cuda編程體系的STL
總結
以上是生活随笔為你收集整理的了解CUDA计算(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 贷款违约预测--赛题理解
- 下一篇: 刷题(一)