在gpu進行計算的時候,很多時候都需要利用cublas的api, 常用的api有兩個:cublassgemm 和cublassgemmbatched, 使用過mkl的可能覺得很熟悉,連引數都是一樣的,但是這裡有一比較坑的地方是,在mkl的矩陣乘法中我們可以設定使用行優先或者列優先,考慮到很多**底層都是c/c++寫的,所以平時矩陣都是按照行優先來寫的,不過mkl是支援列優先的矩陣乘法,但是cublas只支援列優先,也不知道英偉達公司是怎麼想的,做成相容的就那麼難?不管怎麼樣,反正既然別人是制定規則的,我們就必須按別人的遊戲規則來玩。
cublassgemm
cublassgemm直接參考這裡,建議大家必須把這個搞明白,不然下面的batch乘法更加會暈。
cublassgemmbatched
很多時候我們不是簡單的進行兩個單獨的矩陣乘法,而是將兩個集合的矩陣進行相乘,例如下圖,我們知道,如果利用之前的api.那麼需要做乙個迴圈,根據相關資料顯示,cublassgemmbatched的效果要遠好於cublassgemm,為此我們需要掌握該api的使用使用方式。
下面是該api的介面,介面說明可以在這裡檢視
cublasstatus_t cublassgemmbatched
(cublashandle_t handle,
cublasoperation_t transa,
cublasoperation_t transb,
int m,
int n,
int k,
const
float
*alpha,
const
float
*aarray,
int lda,
const
float
*barray,
int ldb,
const
float
*beta,
float
*carray,
int ldc,
int batchcount)
接下來看看實際如何使用:假如我們有矩陣a和b如下,對應矩陣相乘得到c
事例**如下,自己可以根據**琢磨一下相關引數設定的原理
#include
#include
#include
#include
using
namespace std;
__global__
void
show
(float
* ptr,
int size)
intmain()
}const
float
**d_marray,
**d_narray;
float
**d_parray;
cudamalloc((
void**
)&d_marray,8*
sizeof
(float*)
);cudamalloc((
void**
)&d_narray,16*
sizeof
(float*)
);cudamalloc((
void**
)&d_parray,8*
sizeof
(float*)
);cudamemcpy
(d_marray, a_array,8*
sizeof
(float*)
, cudamemcpyhosttodevice)
;cudamemcpy
(d_narray, b_array,16*
sizeof
(float*)
, cudamemcpyhosttodevice)
;cudamemcpy
(d_parray, c_array,8*
sizeof
(float*)
, cudamemcpyhosttodevice)
;const
float alpha =
1.0f
;const
float beta =
0.0f
;int m =2;
int n =1;
int k =2;
int lda =8;
int ldb =8;
int ldc =8;
int batch =8;
ret =
cublassgemmbatched
(handle,
cublas_op_n,
cublas_op_n,
m,n,k,
&alpha,
d_narray, ldb,
d_marray, lda,
&beta,
d_parray, ldc,
batch)
;cublasdestroy
(handle);if
(ret == cublas_status_success)
show<<
<1,
1>>
>
(c_array[0]
,16);
cudamemcpy
(c, d_c, size, cudamemcpydevicetohost)
;for
(int i=
0; i<
16; i++
) cout<
<<
" "<
return0;
}
建議大家使用cublasgemmbatchedex,因為很多gpu可是支援fp16, 如果後面想改用fp16的話不用來回折騰**了,改改配置引數就行了
python Flask JQuery使用說明
0.前言 這個例子將執行在樹莓派中,請注意windows平台和linux平台也可以執行該示例,python具有良好的跨平台效能。倉庫 倉庫位於 bitbucket 相關博文 python 擴充套件庫安裝 使用第三方映象源 python flask 學前班 前端學習 html4和html5設定頁面語言...
Fastjson API Stream使用說明
fastjson當需要處理超大json文字時,需要stream api,在fastjson 1.1.32版本中開始提供stream api。如果你的json格式是乙個巨大的json陣列,有很多元素,則先呼叫startarray,然後挨個寫入物件,然後呼叫endarray。jsonwriter wri...
python Flask JQuery使用說明
0.前言 普通情況下,位於static資料夾下 見圖1 資料夾結構 本文結合乙個很easy的加法樣例試圖說明flask框架中jquery和ajax的使用方法。這個樣例將執行在樹莓派中,請注意windows平台和linux平台也能夠執行該演示樣例,python具有良好的跨平台效能。倉庫 倉庫位於 bi...