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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

cuda笔记-初始化矩阵及thread,block,grid概念

發布時間:2025/3/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cuda笔记-初始化矩阵及thread,block,grid概念 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

thread:一個CUDA的并行程序會被許多threads來執行;

block:多個threads組成一個block,同一個block中threads可以使用_syncthreads()同步,也可以通過shared memory通信。

gird:多個blocks會構成grid。

?

如下代碼:

dim3 blocksize(2, 3); dim3 gridsize(3, 3);

上面的意思是,有2行 * 3列的thread組成一個塊,有3行 * 3列的塊組成了個網。

?

下面是在網中如何獲得線程ID:

grid為1,block為1

int threadId = blockId.x * blockDim.x + threadIdx.x;

grid為1,block為2

int threadId = block.x * blockDim.x * blockDim.y + threadIdx.y * blockDim.x + threadIdx.x

grid為1,block為3

int threadId = blockId.x * blockDim.x * blockDim.y *blockDim.z + threadIdx.z * blockDim.y * blockDim.x + threadIdx.y * blockDim.x + threadIdx.x;

下面舉個例子,是矩陣的初始化。

程序運行截圖如下:

功能也就是將20 * 20全為0的矩陣,變成,矩陣中某個值為x + y的形式。

源碼如下:

#include "cuda_runtime.h" #include "device_launch_parameters.h" #include <iostream> #include <stdio.h>using namespace std;__device__ int coord_int(int x, int y) {return x + y; }__global__ void Matrix_init(int *a, int m, int n) {int x = blockIdx.x * blockDim.x + threadIdx.x;int y = blockIdx.y * blockDim.y + threadIdx.y;if (x < m && y < n) {a[y * n + x] = coord_int(x, y);} }void show_Matrix(int *a, int m, int n) {for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {cout << a[i * m + j] << " ";}cout << endl;}cout << endl; }int main() {int *gpu_int;int cpu_init[400] = {0};show_Matrix(cpu_init, 20, 20);cudaMalloc((void**)&gpu_int, 400 * sizeof(int));dim3 blockdim(8, 8);dim3 gridim(3, 3);Matrix_init << <gridim, blockdim >> > (gpu_int, 20, 20);cudaMemcpy(cpu_init, gpu_int, 400 * sizeof(int), cudaMemcpyDeviceToHost);show_Matrix(cpu_init, 20, 20);cudaFree(gpu_int);getchar();return 0; }

其中這一段的意思是:

x的是獲取當前矩陣里面,x的坐標,y為在矩陣中y的坐標(當前塊的ID號乘以當前塊的維度加上這個塊中x的偏移,姑且叫偏移吧),這個y*n + x是將矩陣坐標轉化為數組坐標。

?

總結

以上是生活随笔為你收集整理的cuda笔记-初始化矩阵及thread,block,grid概念的全部內容,希望文章能夠幫你解決所遇到的問題。

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