C_and_CPP 板


LINE

開發平台(Platform): (Ex: Win10, Linux, ...) Win10 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) VS2015 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) OpenGL 4.3 問題(Question): 我想利用compute shader做一個global index array 假設我每個在 compute shader 中的 work group 有一個 shared variable, 叫做local index array, array長度固定, 但是裡面內含的有效index 數量並非固定, 例如說: shared int array[1024]; // 每一個work group 自己具有的array group 1: length = 3, array = 3, 4, 2, -1, -1, -1, -1.... (-1代表無效值) group 2: length = 5, array = 1, 5, 3, 4, 6, -1, -1, -1,.. group 3: length = 1, array = 2, -1, -1, -1, -1.... 因為我想要節省記憶體, 所以我想把這些group的local index array merge到 global index array, 也就是一個Shader Storage Buffer Object , 並且讓他長成以下這個樣子: global index array = 3, 4, 2, 1, 5, 3, 4, 6, 2, -1, -1, ..... 此array 為group 依序將自己的 index array 接到前一個group的 array後方 我現在的問題是, 是否有辦法做到這件事情? 困難點在於, group 2必須要等到 group 1貼完array(或至少要更新一個offset讓group 2 知道他要從哪邊開始貼) ,group 3 也要等到group 2 更新玩global index array的offset才知道要從哪裡開始 但是 OpenGL 的barrier 只有同步同一個group的thread功能, 並無法同步不同 group, 所以我想請問有甚麼方法可以達到我的要求? 我原本的想法是用一塊Shader Storage Buffer Object 來記錄說最後一個更新 list offset group的編號是多少, 還沒有輪到你的group就在一個while loop 裡面等, 但是我在想這個方法是不是沒甚麼效率, 會不會有比較好的解法? 請各位前輩幫忙回答一下, 感謝! 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): 其實我想實作Forward Plus Rendering, 但是一直不知道linked list 該怎麼做.. --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 65.186.78.215
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1482438858.A.089.html ※ 編輯: Ninja5566 (65.186.78.215), 12/23/2016 04:34:43
1F:推 Sidney0503: 為何不使用vao vbo? 12/23 08:03
2F:→ Ninja5566: compute shader完全不相容rendering pipeline 12/23 08:16
※ 編輯: Ninja5566 (65.186.78.215), 12/23/2016 09:48:19 ※ 編輯: Ninja5566 (65.186.78.215), 12/23/2016 11:49:56 ※ 編輯: Ninja5566 (65.186.78.215), 12/23/2016 11:51:28
3F:→ johnjohnlin: 基本上要 2-pass,用 parallel prefix sum 作 12/23 15:30
因為我不是很熟compute shader, 所以這邊我是用猜的, 有錯請指正 如果用兩個pass, local index array勢必無法宣告成shared, 因為一旦第一 個pass (算local index array)執行完, shared variable會被回收, 所以 local index array 就必須要存在 SSBO. 但是這樣一來做所謂的prefix sum就 沒有意義了, 因為 1. 我直接要存取的話就讀local index array的SSBO就好, 何必讀global index array? 2. 既然local index array都存在SSBO了, 省下記憶體的目標基本上也失敗了 ※ 編輯: Ninja5566 (65.186.78.215), 12/23/2016 21:58:40
4F:→ johnjohnlin: 第一個 pass 只產生 element 數量,prefix sum 之後 12/23 23:06
5F:→ johnjohnlin: 就是 offset 了,gpu 幾乎不會有 global sync thread 12/23 23:07
6F:推 johnjohnlin: 如果不 care order 的話,用 atomic add 應該還行 12/23 23:10
只產生數量會造成計算浪費, 因為要得到數量前必須要先算local index array 有哪些, 所以第二階段雖然有了正確的offset, 但是還要再算一次local index有哪些 才能update global index array 其實我這邊沒講清楚是我的疏忽, 每個rendering cycle中, 每個work group所 產生的 index array 有效長度都會變動, 所以不能假設它們數量是固定的 ※ 編輯: Ninja5566 (65.186.78.215), 12/23/2016 23:38:29 ※ 編輯: Ninja5566 (65.186.78.215), 12/23/2016 23:41:02







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP