[閒聊] 為什麼llvm的效能比gcc差

作者: flypaper (一直飛)   2019-02-02 19:33:23
肥宅 我翻了幾篇文章
好像都說gcc生出來的code效能比較好(也沒說為什麼
肥宅我實在不懂
這兩個是差在哪裡
llvm 的pass順序不是還可以自己調 更有彈性嗎
我唯一知道的就是 llvm的暫存器分佈是用 linear scan
而不是用理論效能較佳的 graph coloring
有人可以告訴肥宅我嗎
作者: alan23273850   2019-02-02 21:49:00
這問題太專業,推一個
作者: Lipraxde (Lipraxde)   2019-02-02 22:09:00
那幾篇文章是那幾篇?我也想看看,能提供嗎?
作者: stupid0319 (徵女友)   2019-02-02 22:17:00
llvm的webassembly確實還跟gcc原生程式有一段差距
作者: Lipraxde (Lipraxde)   2019-02-02 23:29:00
可能codegen輸了一些吧,那部分還沒看完不是很肯定
作者: longlongint (華哥爾)   2019-02-03 00:42:00
ㄖㄨㄍ如果gcc又沒彈性效能又差就沒人要用了(馬後炮XD
作者: alan23273850   2019-02-03 02:24:00
所以原PO如果發現改成graph coloring就能跟gcc比的話是不是就可以生一篇 paper 了ㄋ
作者: suhorng ( )   2019-02-03 04:52:00
你貼的文章結論明明是 "LLVM Clang performance has comea long way over the past few years and is generallyon-par with GCC these days, but as these benchmarkresults show, there still are many cases where theGNU Compiler Collection can offer a measurableadvantage over Clang for the performance of generatedbinaries from C/C++." XD
作者: KanzakiHAria (神崎・H・アリア)   2019-02-03 09:44:00
據我所知 大部分情況clang編譯速度和執行效能>>>gccclang沒有取代gcc的原因是flag和binary沒有通用至少我自己和學長的經驗都是這樣 能換clang絕對換
作者: suhorng ( )   2019-02-03 13:24:00
沒有說吧, 就是說大致在同一個等級, 不過有些 benchmark輸. 他沒特別去分析原因或看是哪樣子類型的程式速度輸可能性太多了, 也許是 LLVM 沒有某一個特定的最佳化演算法, 跑的 pass 順序跟參數不同導致被最佳化的結果不同不一定後端生機器碼的部分
作者: final01 (牛頓運動定律)   2019-02-03 22:03:00
可是我聽到做編譯器的人都說gcc黑科技比較多,蠻多情況是是比clang+llvm好的吧?
作者: KanzakiHAria (神崎・H・アリア)   2019-02-04 08:45:00
c++11以前我不確定 但是GNU現在人力缺乏到跟不上標準 可能我經驗太少吧 我還沒遇過gcc換clang變慢的
作者: firejox (Tangent)   2019-02-04 10:09:00
https://godbolt.org/z/pl-A9s gcc 意外的比較會算?
作者: KanzakiHAria (神崎・H・アリア)   2019-02-04 23:23:00
樓上老梗了https://youtu.be/bSkpMdDe4g4?t=3892cpp2017這場有說clang有大量數學base的轉換如果GCC是這兩年變強 那就是我資訊太落後 抱歉gcc黑科技應該是指直接對cpu優化這件事吧GNU團隊針對蠻多cpu做編譯的人工加速之類的技巧 這個clang因為要轉llvm所以不行使用所以實務上還是要benchmark常用系統硬體reddit.com/r/cpp/comments/9or8s1/llvm_vs_gcc/蠻新的討論串
作者: firejox (Tangent)   2019-02-05 00:01:00
這只是除法,所以有compile time evaluation 就足夠了030
作者: Sidney0503 (Sidney0503)   2019-02-05 22:01:00
那個討論串看起來是都要混著用了clang-tidy/senertizer/analyer + msvc + gcc
作者: tinlans ( )   2019-02-09 04:54:00
LLVM 後端的最佳化演算法還不能共用,少了 GCC RTL 層級的一些最佳化,包括一堆 dirty work 的 combination pass都要各個後端自己手刻,這問題之後會改善。我轉行半年了不知道現況,但短期內問題的根本都差不多吧。平台無關的最佳化,LLVM 其實也因為太年輕,很多東西都沒有實作出來,光是 loop unrolling 就有 GCC 能展開但是LLVM 無法展開的狀況。

Links booklink

Contact Us: admin [ a t ] ucptt.com