→ johnjohnlin: block size 32 會造成 occupancy 低落,導致效能不佳 09/19 22:02
→ johnjohnlin: 但是改了 block size 之後差那麼多我覺得應該是 bug 09/19 22:03
恩恩 我知道occupancy會不好 官方建議block size128~256,不過我是想量測每個大小的效能影響。
所以我改的地方是對的? 我是修改<<<block, thread, shared memory>>>(參數...);這邊
不過差這麼多讓我覺得怪怪的 執行時間也少了一半..
※ 編輯: v00623 (114.25.14.78), 09/19/2016 22:33:24
※ 編輯: v00623 (140.118.155.204), 09/20/2016 10:43:10
→ freef1y3: 如果要確認是 benchmark 還是 gpgpu-sim 的問題 09/20 10:44
→ freef1y3: 我會建議用真正的 GPU 跑一次看看 09/20 10:44
→ freef1y3: block 和 thread 數量這有時候是跟 benchmark 有關的 09/20 10:45
→ freef1y3: 甚至有的 CUDA 程式必須 block 大小是 2 的次方才能跑 09/20 10:46
後來用模擬器多跑幾種block大小 下圖為結果
http://imgur.com/a/mMjkr
只看IPC的話 原本256threads的相對比較不好
有點不知道如何解釋這個狀況
猜想原本benchmark是否考慮到john大講的occupancy之類的層面
※ 編輯: v00623 (140.118.155.204), 09/20/2016 11:01:50
→ freef1y3: 多個小 block 比少數大 block 好 09/20 14:16
→ freef1y3: 我會猜是因為 __syncthreads() 造成的 overhead 09/20 14:17
→ freef1y3: 若是 occupancy 的關係,應該多個小 block 會比較差 09/20 14:18
→ freef1y3: 但是看這 IPC 的差異,執行時間似乎不該差這麼多 09/20 14:19
→ freef1y3: 除非執行的 Instruction 總數也會隨著 block size 改變 09/20 14:20
→ freef1y3: 若你的學校有授權 visual studio,且你有實體顯示卡 09/20 14:23
→ freef1y3: 可用 nvidia visual profiler 測測看 09/20 14:23
→ freef1y3: 我沒用過 gpgpu-sim,所以這方面的問題就無法回答了 09/20 14:25
程式中沒有使用到__syncthreads()
https://github.com/gpgpu-sim/ispass2009-benchmarks/tree/master/BFS
後來我發現他kernel的執行次數有差 所以inst數量才會不同
http://imgur.com/a/nwIjN
不過我有個疑問 就算kernel跑的次數相同 那inst數量一定會一樣嗎? (這方面還不太熟悉
上圖第二第四列都是跑8次kernel 不過inst還是有差一些
雖然我覺得應該還要看程式怎麼寫...
※ 編輯: v00623 (140.118.155.204), 09/21/2016 10:50:20