CUDA系列三 矩陣相乘

2021-09-22 12:53:01 字數 1978 閱讀 6129

本博文主要講解下基於cuda的矩陣相乘,cuda特別擅長的就是矩陣乘法,而且也比較容易實現。通過矩陣乘法的實現,可以比較容易理解cuda的核心思想。網上也有很多基於cuda實現的矩陣乘法,但是感覺都不完成,要不就是有錯,本文給出的**都是經過驗證可行的,希望能夠幫助到大家。

矩陣乘法實現方式一:矩陣乘法的逐點實現方式,具體如下圖所示

對應實現**:

#include #include #include __global__ void matmul(int *m,int *n,int *p,int width)

p[y * width + x] = value;

}int main() }

int size = nd * nd;

//資料拷貝,主機到裝置

cudamemcpy(m,a,size * sizeof(int),cudamemcpyhosttodevice);

cudamemcpy(n,b,size * sizeof(int),cudamemcpyhosttodevice);

cudaeventrecord(start,0);

matmul<<<1,blocksize>>>(m,n,p,width);//呼叫核函式

cudathreadsynchronize();

cudaeventrecord(stop,0);

cudaeventsynchronize(stop);

cudaeventelapsedtime(&elapsedtime,start,stop);

cudamemcpy(c,p,size * sizeof(int),cudamemcpydevicetohost);

printf("c0 = %d \n",c[0][0]);

//釋放裝置記憶體

cudafree(m);

cudafree(n);

cudafree(p);

return 0;

}

執行結果:

矩陣相乘實現方式二:矩陣乘法分塊實現,具體如下圖所示

具體**實現:

#include #include #include #define tile_width 10

//核函式的具體實現

__global__ void matmul(int *m,int *n,int *p,int width)

p[row * width + col] = pervalue;

}int main() }

//資料拷貝,主機到裝置

cudamemcpy(m,a,size * sizeof(int),cudamemcpyhosttodevice);

cudamemcpy(n,b,size * sizeof(int),cudamemcpyhosttodevice);

cudaeventrecord(start,0);

matmul<<>>(m,n,p,nd); //呼叫核函式

cudathreadsynchronize();

cudaeventrecord(stop,0);

cudaeventsynchronize(stop);

cudaeventelapsedtime(&elapsedtime,start,stop);

cudamemcpy(c,p,size * sizeof(int),cudamemcpydevicetohost);

printf("c0 = %d\n",c[0][0]);

cudafree(m);

cudafree(n);

cudafree(p);

return 0;

}

執行結果:

CUDA矩陣相乘

include include include include 並行矩陣乘法kernel函式 global void matrixmultiply int m d,int n d,int p d,int width p d row width col p 每個執行緒計算p d矩陣的乙個元素 生成隨機...

cuda矩陣相乘 CUDA的矩陣乘法

2 那麼下面就是不使用shared memory的並行化演算法的思路。簡單地來說,就是將上述可並行化的部分傳遞給gpu,使用cuda來計算。如下 void matrixmulondevice float m,float n,float p,intwidth int size width width ...

CUDA 共享儲存器實現矩陣相乘

共享儲存器使用 shared 限定詞分配。cuda程式設計介面 執行初始化與裝置儲存器 cuda程式設計介面 使用nvcc編譯器的相容性 cuda程式設計介面 如何用nvcc編譯cuda程式 cuda程式設計模型 儲存器層次和異構程式設計 cuda程式設計模型 核心與執行緒層次概述 正如在前面的文章...