[問題] CUDA不同block有辦法共享資料嗎?

看板C_and_CPP作者 (e40614)時間10年前 (2013/11/28 18:38), 編輯推噓0(0010)
留言10則, 2人參與, 最新討論串1/1
剛開始學cuda 最近在寫一些基本的矩陣乘法 之前有利用過shared memory來寫tiling版本的乘法 最近看到書上有提到另一種加速法 就是利用rectangular tiles 假設矩陣乘法是M*N=P 其中block A需要利用到N1和M1 block B需要利用N2和M1 因為都需要利用到M1 所以我想讓A來load資料就好 B直接利用A所load的資料 但問題是cuda的shared memory只能在相同block的threads共享 請問有辦法可以讓不同block之間分享資料嗎? 或是有什麼其他可行的方法可以做到rectangular tiles ------------------------------------------------ 此外這種方法看起來好像不會比較快吧 因為B要做計算還是需要等A LOAD完 感覺只是把overhead降低 並沒有把速度提升 不知道我有沒有想錯 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.123.42 ※ 編輯: e40614 來自: 140.113.123.42 (11/28 18:41)

11/28 19:30, , 1F
我猜那作法是將 block A 跟 block B 都放在同一個 block 算
11/28 19:30, 1F

11/28 19:31, , 2F
這樣可以省 overhead
11/28 19:31, 2F

11/28 19:32, , 3F
但是不一定比較快. 因為需要 sync. 當然可能跟我想的不同
11/28 19:32, 3F

12/01 18:24, , 4F
還有L1跟L2 這種設計應該是利用L1 4個矩陣只讀3次DRAM
12/01 18:24, 4F

12/01 18:25, , 5F
我想不需要自己加sync 共用的是唯讀的矩陣
12/01 18:25, 5F

12/01 18:27, , 6F
可能得把L1跟矩陣大小配好+multithreading issue才有效果
12/01 18:27, 6F

12/01 19:07, , 7F
要 sync 是因為第二個矩陣要一起讀進來
12/01 19:07, 7F
請問Feis大 你的意思是說把原本2個block的事,放在同一個Block執行? 這樣不會造成平行度降低 反而更慢嗎? ※ 編輯: e40614 來自: 140.113.123.42 (12/03 03:34)

12/03 11:08, , 8F
平行的重點是只要 job 夠塞滿就好. 人人有事作.
12/03 11:08, 8F

12/03 11:08, , 9F
只要 block 還夠多就可以.
12/03 11:08, 9F

12/03 11:10, , 10F
block 個數太小或每個 block 要做的事情太多就有可能虧
12/03 11:10, 10F
文章代碼(AID): #1Ibnqcy0 (C_and_CPP)