cublasSgemmBatched使用說明

2021-10-07 17:18:43 字數 3051 閱讀 8126

在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...