[問題] cuda gpu運算if else問題

看板C_and_CPP作者 (aada)時間16年前 (2009/12/01 23:51), 編輯推噓5(5016)
留言21則, 5人參與, 最新討論串1/1
大家好, 請問一下我在執行CUDA時要做大量的if else判斷, 但是這樣執行很慢, 難道GPU無法加速if else判斷運算嗎, 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.122.193.103

12/02 00:01, , 1F
會快是因為把程式分成很多thread平行算吧 單一thread
12/02 00:01, 1F

12/02 00:02, , 2F
應該是不會快過用cpu算的
12/02 00:02, 2F

12/02 00:07, , 3F
它是靠大量的平行運算單元增加單位時間的throughput, 不
12/02 00:07, 3F

12/02 00:07, , 4F
是用來設計加速某些單一特殊功能的, 尤其平行運算時每個
12/02 00:07, 4F

12/02 00:08, , 5F
thread執行相同的code卻餵入不同的data時, flow control
12/02 00:08, 5F

12/02 00:09, , 6F
是一個極大的致命傷; 我所了解它的作法是if/else兩block
12/02 00:09, 6F

12/02 00:09, , 7F
都會完整走過, 但是運用predict還是什麼機制控制條件成
12/02 00:09, 7F

12/02 00:10, , 8F
立與不成立時哪些block的result不用寫出才做到的.
12/02 00:10, 8F

12/02 00:10, , 9F
換句話說, 不會所有的東西都適合用GPU加速, 也不要以為
12/02 00:10, 9F

12/02 00:11, , 10F
把原來的程式灌給GPU跑就馬上能有幾倍的效能成長, 這是
12/02 00:11, 10F

12/02 00:11, , 11F
要看資料特性還有平行計算演算法與GPU單元協同的:)
12/02 00:11, 11F

12/02 00:55, , 12F
以後也許會在branch跟pipeline stage上增加transistor
12/02 00:55, 12F

12/02 00:56, , 13F
大家都在等3.0會不會具有stack且ins/data 同section
12/02 00:56, 13F

12/02 00:57, , 14F
目前還是自己profiling吧
12/02 00:57, 14F

12/02 00:58, , 15F
我想如果改寫類似OpenCL的buildProgram 幫忙判斷branch量
12/02 00:58, 15F

12/02 00:58, , 16F
用以決定在CPU/GPU是可行的.
12/02 00:58, 16F

12/04 04:18, , 17F
V大說的對所以,所以如果可以的話
12/04 04:18, 17F

12/04 04:19, , 18F
要盡量把會走if的data跟會走else的data分堆
12/04 04:19, 18F

12/04 04:19, , 19F
讓SM一次讀到的都走if或else 不然兩邊都會跑過一遍
12/04 04:19, 19F

12/05 00:25, , 20F
單位是warp 目前是32threads一個warp
12/05 00:25, 20F

12/05 00:29, , 21F
要自己去盡量讓一個warp都走if或else同邊 不然會兩邊都跑
12/05 00:29, 21F
文章代碼(AID): #1B5JkQjI (C_and_CPP)