• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kompilatory - wydajność oraz aktualność

Object Storage Arubacloud
+2 głosów
567 wizyt
pytanie zadane 5 października 2015 w C i C++ przez Dash Nałogowiec (29,650 p.)

Witam, podczas mojej wesołej twórczości, próbując przyśpieszyć kod, doszedłem do wniosku że wąskim gardłem (tak się to po naszemu nazywa?) jest kompilator. Używam GCC w wersji 5.1. Też tak mieliście?

Pytanie nasuwa się samo. Który kompilator jest najlepszy.

PS. (poniżej "jakość" opieram na wydajności i szybkości programu, a nie czasie kompilacji itp. ) 


PC:  

  • GCC najpopularniejszy, bardzo aktualny i polecany przez większość. W benchmarkach znalezionych w internecie, z reguły zajmował uśrednioną pozycję. 
  • Windowsowy (VS), nie używałem, ludzie ględzili coś o tym że nie jest tak aktualny jak GCC. Wydajność klasowała się średnio delikatnie niżej niż GCC. 
  • Intel - wcześniej nie słyszałem o nim za dużo. Przekonało mnie to, że niektóre testy pokazywały jego wydajność większą o 7% - 10% od swoich konkurentów. Obiło mi się o uszy że jest płatny. 
  • Clang cóż... z reguły najwolniejszy. W zamian oferuje krótki czas kompilacji oraz dobre opisywanie błędów.

Android:

  • NDK- GCC standard. W zasadzie nie potrafiłem znaleźć w internecie niczego sensownego w jaki sposób to działa. 
  • Intel chwalą się że są prawie dwa razy szybsi. Chyba nie jest zbyt popularny, większość internetu milczy. Prawdopodobnie płatny. 

Teraz pytanie/prośba do was. Żeby nie spędzać pół życia w internecie: 

  1. Jaki kompilator c++ oferuje najlepszą wydajność? Macie materiały dotyczące tego? 
  2. Czy istnieje alternatywny kompilator w stosunku do tego w NDK? Jak przyśpieszyć aplikację na androidzie (oczywiście w kontekście kompilatora). 
  3. Intel i jego wynalazki. Używaliście? Wszystkie są płatne czy istnieją jakieś kruczki? Warto?
  4. GCC (jako że pewnie większość go używa), jakie flagi przy budowaniu wersji release? Moje standardowe -O3 pewnie nie jest najlepsze. 

Temat kompilatorów jest traktowany często po macoszemu, a może warto się mu przyjrzeć? Fajnie jeżeli podzielicie się swoją opinię, odpowiedzią chociaż na jedno pytanie. Dla dobra społeczności i dla siebie, w końcu szybki program to dobry program. 

 

 

 

 

5 odpowiedzi

+3 głosów
odpowiedź 5 października 2015 przez adrian17 Ekspert (344,860 p.)
edycja 5 października 2015 przez adrian17

Z doświadczenia:

  • GCC najszybszy (bez patrzenia na Intela). Jak masz 5.1 to w zasadzie pełen luksus, pełne wsparcie dla C++14. Niektóre dystrybucje Linuxa są dopiero w powolnym okresie przejściowym z 4.9 do 5.
  • Clang parę procent wolniejszy, czasem nie zauważa niektórych optymalizacji. Od dawna pełne wsparcie C++14, parę fajnych rzeczy z C++17. Znacznie lepsze wiadomości o błędach, znacznie lepsza integracja z edytorami, analiza statyczna, BOSKI AddressSanitizer. Warto.
  • MSVC - też kilka-kilkanaście procent wolniejszy od GCC, ale żółwiem to to nie jest. Wlecze się z C++11/14 z samym językiem, ale biblioteka standardowa wręcz lekko wyprzedza GCC/Clanga. Wygodny debugger i oprzyrządowanie jeśli lubisz Visual Studio (ja lubię).
  • Intel - nigdy nie dotykałem. Słyszałem że zna jakieś brudne sztuczki dające mu przewagę w szybkości nad konkurencją, czasem bardzo dużą w jakiś mocno numerycznych zastosowaniach. Komercyjny. Słyszałem opinię że wsparcie dla C++11/14 jest mocno zabugowane, ale nie wiem ile w tym prawdy. Mała społeczność (z definicji). Może gdyby był darmowy to bym się zainteresował.

Osobiście używam: Na Windowsie MSVC do normalnej pracy, trzymam na boku GCC gdybym chciał coś porównywać. Na Linuxie skaczę między Clangiem a GCC w zależności od potrzeb, czasem kompiluję oboma naprzemiennie.

TL;DR GCC NIE jest wąskim gardłem. O dodatkową opinię zapytaj kernel Linuxa.

+2 głosów
odpowiedź 5 października 2015 przez draghan VIP (106,230 p.)

próbując przyśpieszyć kod, doszedłem do wniosku że wąskim gardłem (tak się to po naszemu nazywa?) jest kompilator.

Jesteś na 101% pewny, że robisz to właściwie? Pytam zupełnie poważnie.

Jako projektant aplikacji, musisz być świadomy że pewnych ograniczeń docelowej platformy nie przeskoczysz. Kompilatory generują kody wykonywalne dla danego OS - taki opakowany w szufladki, zrozumiały dla OS kod maszynowy.
Szybciej nie za bardzo się da, chyba że jakimś kosztem. Optymalizacje dokonywane przez kompilatory też mają swoją cenę - wydłużenie czasu kompilacji czy zaniedbanie symboli dla debuggera.
Ale znów dochodzimy do sytuacji, w której po prostu nie można przeskoczyć pewnej fizycznej granicy. Wywołanie funkcji zawsze wiąże się z odłożeniem parametrów na stos, odłożeniem obecnego adresu wykonywanego polecenia,  skokiem do odpowiedniej funkcji, zdjęciem ze stosu argumentów, utworzeniem pamięci na obiekt zwrócony... No inaczej się nie da, takie są reguły gry.

C++ jest językiem, którego priorytetem projektowym była jak największa wydajność produkowanych aplikacji (wykorzystywanie go w systemach wbudowanych mówi samo za siebie) - moim skromnym zdaniem ten kompilator, który najwierniej przestrzega reguł standardu, jest najlepszy.
Oczywiście dochodzą również kwestie inne, jak np. "mulitplatformowość: wada czy zaleta?". Wiadomo, że kompilator dedykowany dla danej platformy może dokonywać pewnych usprawnień, które są niedostępne na innych platformach, wykorzystując jej unikalną specyfikę - dlatego właśnie profesjonalne studia piszące gry na PC używają przeważnie kompilatora od M$.

Ciężko doradzać Ci cokolwiek - jednak uważam, że jeśli narzekasz na kompilator, to niestety coś jest nie halo z Twoim kodem.

Temat kompilatorów jest traktowany często po macoszemu

Na pewno nie przez ich twórców. ;)

Pozdrawiam. :)

+1 głos
odpowiedź 5 października 2015 przez phx Początkujący (360 p.)
Nie trzeba spędzać pół życia w necie wystarczy wpisać w google hasło :)
http://www.epokay.net/artur/testykompilatorow2013.html
po ang jeszcze więcej wyników :)
komentarz 5 października 2015 przez Dash Nałogowiec (29,650 p.)
Dwa dni szukałem, znalazłem wiele porównań i innych. Jednak jestem tylko człowiekiem, a to jest temat rzeka. Im więcej ludzi się wypowie, tym precyzyjniejsze będą informacje :).
komentarz 5 października 2015 przez adrian17 Ekspert (344,860 p.)
No, to ma już 2 lata, od tego czasu sporo się mogło zmienić.
0 głosów
odpowiedź 5 października 2015 przez ZakosiliMiNeta Nałogowiec (30,870 p.)
Moim zdaniem patrzenie się na kompilator jest lekką głupotą ( maszyna maszynie nie równa, kompilator na maszynie intelowskiej będzie działać trochę innaczej, a na amd  jeszcze innaczej  ) , ponieważ liczy się zoptymalizowany kod.
0 głosów
odpowiedź 5 października 2015 przez Dash Nałogowiec (29,650 p.)
@Up

Trochę źle się wyraziłem. Nie przeszkadza mi tyle o ile szybkość kompilatora, jeszcze dużo wody upłynie zanim zaczną go w pełni wykorzystywać. Intrygują mnie one same w sobie. Kod zawsze można napisać szybciej (optymalniej, czy ekstremalnie - przesiadka na np. Assemblera ), ale jeżeli istnieją różne kompilatory, to chyba warto wiedzieć co je różni. C i C++ jako stosunkowo niskopoziomowe języki cały czas w jakiś sposób właśnie kierują mnie na poznawanie "niższych" warstw programowania, wykorzystania maxa ich możliwości. Ot, takie moje zboczenie :P

Podobne pytania

0 głosów
1 odpowiedź 280 wizyt
pytanie zadane 22 września 2016 w C i C++ przez DragonCoder Nałogowiec (36,500 p.)
0 głosów
1 odpowiedź 648 wizyt
pytanie zadane 2 kwietnia 2016 w C i C++ przez 0xf Dyskutant (8,180 p.)
+1 głos
2 odpowiedzi 967 wizyt
pytanie zadane 14 marca 2018 w Offtop przez Hiskiel Pasjonat (22,830 p.)

92,576 zapytań

141,425 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...