這裡矩陣c=a*b,原始文件給的公式是c=alpha*a*b+beta*c,所以這裡alpha=1,beta=0。
主要使用cublassgemm這個函式,這個函式的第二個引數有三種型別,這裡cublas_op_n求出來矩陣結果是按行排列,所以不需要轉置了。
如果用cublas_op_t引數求得的結果是按列排列,做成c形式的矩陣應該還需要轉置一下,並且後面跟的引數也不太一樣,這個引數我就沒再嘗試了。
**如下:
#include "結果:cuda_runtime.h
"#include
"cublas_v2.h
"#include
#include
#include
#include
using
namespace
std;
intmain()
cout
<
for (int i = 0; i < n*k; i++)
cout
<
float *d_a, *d_b, *d_c,*d_ct;
cudamalloc((
void**)&d_a, sizeof(float)*m*n);
cudamalloc((
void**)&d_b, sizeof(float)*n*k);
cudamalloc((
void**)&d_c, sizeof(float)*m*k);
cudamemcpy(d_a, h_a, m*n * sizeof(float
), cudamemcpyhosttodevice);
cudamemcpy(d_b, h_b, n*k * sizeof(float
), cudamemcpyhosttodevice);
float alpha = 1
;
float beta = 0
;
//c=a*b
cublashandle_t handle;
cublascreate(&handle);
cublassgemm(handle,
cublas_op_n,
cublas_op_n,
k,
//矩陣b的列數
m, //
矩陣a的行數
n, //
矩陣a的列數
&alpha,
d_b,
k,
d_a,
n,
&beta,
d_c,
k);cudamemcpy(h_c, d_c, m*k * sizeof(float
), cudamemcpydevicetohost);
for (int i = 0; i < m*k; i++)
cudafree(d_a);
cudafree(d_b);
cudafree(d_c);
free
(h_a);
free
(h_b);
free
(h_c);
return0;
}
CUDA庫的cmake寫法
cmake minimum required version 3.8 fatal error project cmake and cuda languages cxx cuda add library particles static randomize.cpp randomize.h partic...
CUDA動態庫封裝以及呼叫
參考 通過將cuda相關計算操作放在庫中,方便在專案中呼叫,省去了每次編譯cu檔案的麻煩,也便於整合到其他平台上。一 封裝cuda動態庫 主要步驟 修改自定義方式 設定cu檔案項型別為cdua cc 新增依賴庫cudart.lib.1 建立乙個動態庫,這裡建的庫是x86的,也可以更改為x64.2 新...
CUDA動態庫封裝以及呼叫
cuda動態庫封裝以及呼叫 參考 通過將cuda相關計算操作放在庫中,方便在專案中呼叫,省去了每次編譯cu檔案的麻煩,也便於整合到其他平台上。一 封裝cuda動態庫 主要步驟 修改自定義方式 設定cu檔案項型別為cdua cc 新增依賴庫cudart.lib.1 建立乙個動態庫,這裡建的庫是x86的...