看板 C_and_CPP 關於我們 聯絡資訊
請教各位一個關於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
tinlans:不行,它不是 source to source 的轉換。 05/22 22:43
tinlans:下 -da 倒是有機會出現類似你要的東西,但有很大的差距。 05/22 22:44
septemhill:所以連gcc本身也無法透過參數直接轉出嗎...? 05/22 22:44
tinlans:記得在那種產生一大堆檔案也沒關係的地方用這參數。 05/22 22:45
septemhill:這樣我明白了,謝謝 05/22 22:45
tinlans:講錯了,-da 是 back-end 的東西,打 -fdump-tree-all 看 05/22 22:51
tinlans:omplower 那個檔就是了。但已經不是 C level 的東西。 05/22 22:51
tinlans:它是 GCC 內部的 GIMPLE Tree 表示法,以 printable 形式 05/22 22:52
tinlans:印出來給你看。 05/22 22:52
septemhill:瞭解,所以實際上還是只能自行trace嗎 05/22 22:56
tinlans:-da 輸出的 expand 那個檔看到的是進 back-end 前的最後 05/22 22:56
tinlans:結果,基本上它還是有類似 C 的長相,OpenMP 的處理在那之 05/22 22:57
tinlans:後應該都不會再有變化了。你可以從那個檔看。 05/22 22:57
septemhill:謝謝,我會研究看看的 05/22 22:58
tinlans:後續的動作大都是針對平台相依的最佳化,把那些一般化的 05/22 22:59
tinlans:表示法換成最佳的硬體指令組合,OpenMP 這種高階概念在那 05/22 22:59
tinlans:之後基本上是不會再被動到了。 05/22 22:59
tinlans:如果你覺得看那個太亂,-fdump-tree-all 的 ompexp 就很 05/22 23:00
septemhill:嗯,我明白了,謝謝您 05/22 23:00
tinlans:足夠。不然進了 SSA form 就會出現很多臨時變數。 05/22 23:00
septemhill:對啊...我實在看不是很懂fdump-tree-all的結果 05/22 23:01
BIGHEADXYZ:直接用Pthread就好了?麻煩一點而以阿 05/26 22:05