作者fishlinghu (令狐瑜)
看板C_and_CPP
標題Re: [問題] OpenCL GPU benchmark
時間Sat Oct 22 20:21:10 2016
: hmmmm,
: 你沒有放程式碼,只能猜測你沒有檢查return value,
: 例如事實上他從clGetPlatformIDs或clGetDeviceIDs就失敗了,
: 或者你的Kernel Source在clBuildProgram編譯過程中有錯誤,
: 所以clCreateContext或後面的操作也都只是在面對invalid argument
: 在kernel內超出存取範圍也會讓kernel直接跳掉。
我有檢查return value
應該是沒有錯誤
: memory transferring time看你data size有多大,因為也不知道你用的是哪個API
: 是clEnqueueWriteBuffer嗎? 還是SVM?
我是先用writebuffer把資料從host寫到device
kernel長這樣
做的事情只是把data從source copy到destination
__kernel void bw(__global unsigned char* src, __global unsigned char* dst)
{
int xid = get_global_id(0) + get_global_size(0) * get_global_id(1) + get_global_size(0) * get_global_size(1) * get_global_id(2);
dst[xid] = src[xid];
}
然後在host program那邊測試kernel執行時間
除出來1XXX GB/s
而且數字很飄
更慘的是data變小
執行時間也沒變小很多
感覺一定是哪邊測錯了
: 搞不好因為Intel Graphic的data傳很快而沒有像是PCIe的瓶頸。
: 因此還是得將程式碼攤開,把程式印出訊息秀出來才知道問題
我code有放GitHub
有興趣的人可以看一下
不過有點亂亂的= =
https://github.com/fishlinghu/OpenCL/blob/master/gpu_cache_profile_3.cpp
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 128.61.97.245
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1477138875.A.66F.html
1F:推 LPH66: xid 計算是不是應該要有 get_global_id(1)? 10/22 20:50
2F:→ LPH66: 你的中間項是兩個 get_global_size() 相乘 10/22 20:50
3F:→ LPH66: 喔, 我看錯了 orz 10/22 20:51
4F:推 VictorTom: 弱弱問一句 clGetDeviceInfo() 不就可以問cache/line 10/25 23:12
5F:→ VictorTom: size了嗎?_? 10/25 23:14
6F:推 sOuOr: 原po可能想練習自己測試? 不然照你說上網也可以查啊XDD 10/27 04:48