開發平台(Platform): (Ex: Win10, Linux, ...)
Linux
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
nvcc
問題(Question):
用 cuda multiple stream 寫的程式跑的速度比 CPU 用 c code 還要慢好幾倍
餵入的資料(Input):
./backprop 16777216
程式碼(Code):(請善用置底文網頁, 記得排版)
https://github.com/r02941066/Question/blob/master/bpnn_layerforward
補充說明(Supplement):
bpnn_layerforward 裡面 #else 之後的部分是原先 C 的程式碼
上面 #ifdef 是改寫要用 GPU 執行的 host 部分
因為 n1 會是 16777216, 所以把那部分用 cuda 來跑, n2 則用 multiple stream
依據 n2 動態調整 stream 數量
in_d 是要餵給 cuda 的 conn[], 用 2D array 分別將數個 1D array 餵給每個 stream
in_temp 是預先複製好每個 stream 應該要的 1D array
out_d 和 out_h 是每個 stream 得到的 1D array,最後用 CPU 加總
in_d2 只用 1D array 是因為資料都一樣,所以只用一份
GPU: C2075
CPU: E5-2620
跑的結果 GPU 比 CPU 慢很多
我懷疑是 dynamic multiple stream 那邊寫不好