Re: [問題] OpenCL GPU benchmark

看板C_and_CPP作者 (令狐瑜)時間7年前 (2016/10/22 20:21), 編輯推噓3(303)
留言6則, 3人參與, 最新討論串3/3 (看更多)
: 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://www.ptt.cc/bbs/C_and_CPP/M.1477138875.A.66F.html

10/22 20:50, , 1F
xid 計算是不是應該要有 get_global_id(1)?
10/22 20:50, 1F

10/22 20:50, , 2F
你的中間項是兩個 get_global_size() 相乘
10/22 20:50, 2F

10/22 20:51, , 3F
喔, 我看錯了 orz
10/22 20:51, 3F

10/25 23:12, , 4F
弱弱問一句 clGetDeviceInfo() 不就可以問cache/line
10/25 23:12, 4F

10/25 23:14, , 5F
size了嗎?_?
10/25 23:14, 5F

10/27 04:48, , 6F
原po可能想練習自己測試? 不然照你說上網也可以查啊XDD
10/27 04:48, 6F
文章代碼(AID): #1O2rcxPl (C_and_CPP)
文章代碼(AID): #1O2rcxPl (C_and_CPP)