[問題] OpenMP展開

看板C_and_CPP (C/C++)作者 (冰淇淋乾杯)時間16年前 (2010/05/22 19:41), 編輯推噓1(1021)
留言22則, 3人參與, 最新討論串1/1
請教各位一個關於OpenMP在gcc底下的問題 一般在寫OpenMP時,都是加directive和clause在程式段即可 而在gcc的libgomp底下實做,是包pthread做的 我想請問的是,要怎麼樣才能看到我用OpenMP寫得程式 然後利用gcc轉出它底層包的pthread程式碼 例如: #pragma omp parallel { for (int i = 0; i <10; i++) { .... .... .... } } 像上述程式希望能夠轉成用gomp裡面包的程式碼取代 不知道應該要用什麼方法 原本有想過下-fdump-tree-all的參數下去看 不過出來的結果似乎不太一樣 不知道各位有沒有好的解決方案? -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.118.8.76

05/22 22:43, , 1F
不行,它不是 source to source 的轉換。
05/22 22:43, 1F

05/22 22:44, , 2F
下 -da 倒是有機會出現類似你要的東西,但有很大的差距。
05/22 22:44, 2F

05/22 22:44, , 3F
所以連gcc本身也無法透過參數直接轉出嗎...?
05/22 22:44, 3F

05/22 22:45, , 4F
記得在那種產生一大堆檔案也沒關係的地方用這參數。
05/22 22:45, 4F

05/22 22:45, , 5F
這樣我明白了,謝謝
05/22 22:45, 5F

05/22 22:51, , 6F
講錯了,-da 是 back-end 的東西,打 -fdump-tree-all 看
05/22 22:51, 6F

05/22 22:51, , 7F
omplower 那個檔就是了。但已經不是 C level 的東西。
05/22 22:51, 7F

05/22 22:52, , 8F
它是 GCC 內部的 GIMPLE Tree 表示法,以 printable 形式
05/22 22:52, 8F

05/22 22:52, , 9F
印出來給你看。
05/22 22:52, 9F

05/22 22:56, , 10F
瞭解,所以實際上還是只能自行trace嗎
05/22 22:56, 10F

05/22 22:56, , 11F
-da 輸出的 expand 那個檔看到的是進 back-end 前的最後
05/22 22:56, 11F

05/22 22:57, , 12F
結果,基本上它還是有類似 C 的長相,OpenMP 的處理在那之
05/22 22:57, 12F

05/22 22:57, , 13F
後應該都不會再有變化了。你可以從那個檔看。
05/22 22:57, 13F

05/22 22:58, , 14F
謝謝,我會研究看看的
05/22 22:58, 14F

05/22 22:59, , 15F
後續的動作大都是針對平台相依的最佳化,把那些一般化的
05/22 22:59, 15F

05/22 22:59, , 16F
表示法換成最佳的硬體指令組合,OpenMP 這種高階概念在那
05/22 22:59, 16F

05/22 22:59, , 17F
之後基本上是不會再被動到了。
05/22 22:59, 17F

05/22 23:00, , 18F
如果你覺得看那個太亂,-fdump-tree-all 的 ompexp 就很
05/22 23:00, 18F

05/22 23:00, , 19F
嗯,我明白了,謝謝您
05/22 23:00, 19F

05/22 23:00, , 20F
足夠。不然進了 SSA form 就會出現很多臨時變數。
05/22 23:00, 20F

05/22 23:01, , 21F
對啊...我實在看不是很懂fdump-tree-all的結果
05/22 23:01, 21F

05/26 22:05, , 22F
直接用Pthread就好了?麻煩一點而以阿
05/26 22:05, 22F
文章代碼(AID): #1BzyB_lc (C_and_CPP)
文章代碼(AID): #1BzyB_lc (C_and_CPP)