Kompilujesz czy używasz wbudowanej wydajności plików binarnych?

11

Czy wydajność będzie lepsza (szybsza), jeśli ręcznie skompiluję źródło komponentu oprogramowania dla rzeczywistej maszyny, na której będzie on używany, w porównaniu z tym, czy źródło zostało skompilowane na innej platformie, być może dla wielu różnych architektur? Mam kilka dobrych wyników kompilacji źródła, które pobrałem i zastanawiam się, czy było to spowodowane kompilacją zamiast pobierania skompilowanego pliku binarnego, co często ma miejsce w przypadku aktualizacji oprogramowania.

Niklas
źródło
2
Kompilacja pod kątem zgodności z wieloma architekturami potencjalnie eliminuje pewne optymalizacje, które mogą być możliwe przy kompilacji dla pojedynczej architektury.
Robert Harvey
1
Oprócz bycia bardziej ukierunkowanym (co prawie zawsze będzie korzystne), prawdopodobnie napotkasz również duże różnice między kompilatorami - różne kompilatory obsługują różne optymalizacje, a czasami wąskie gardła wydajności mogą być optymalizowane przez jedno, ale nie przez inne.
Daniel B

Odpowiedzi:

8

W wielu (jeśli nie w większości) przypadkach tak. Jest tak, ponieważ kompilator może generować natywny kod zoptymalizowany dla tego konkretnego procesora i środowiska. Kod jest bardziej „ukierunkowany”.

epistemex
źródło
7

Kompilacja ze źródeł daje tę zaletę, że ustawia flagi kompilatora tak, jak chcesz dla określonej platformy. Pobranie pakietu, który został skompilowany z tymi samymi dokładnymi ustawieniami co twoje, nie zapewniłoby żadnej różnicy, ale zmiana ustawień z domyślnych może dać ci duże ulepszenia.

Na przykład, jeśli pliki binarne oferowane do pobrania zostały skompilowane do debugowania (celowo lub przez pomyłkę), włączenie bardziej agresywnej optymalizacji poprawi wydajność w prawie wszystkich sytuacjach. Z drugiej strony, jeśli skompilowany kod zostanie zoptymalizowany do maksimum, nie zobaczysz żadnej różnicy.

dasblinkenlight
źródło
Więc mój wysiłek kompilacji mógł się nie udać. Pobrałem źródło do mod_jk i skompilowałem i zrobiło się bardzo szybko i zastanawiam się, czy było to spowodowane ręczną kompilacją. Dziękuję za Twoją odpowiedź.
Niklas
1

To naprawdę zależy od dwóch użytych kompilatorów i flag kompilatora. Zazwyczaj ustawienia kompilatora i flagi na twoim komputerze lokalnym są bardziej odpowiednie dla twojego komputera, jeśli masz poprawnie skonfigurowane.

Ale jeśli, na przykład, wstępnie skompilowany plik binarny był zbudowany z dużo lepiej optymalizującego kompilatora (lub testu porównawczego specjalnie zaprojektowanego z flagami dostrojonymi dla tego konkretnego fragmentu kodu i na szczęście odpowiedniego dla twojego systemu) w porównaniu do kompilatora na twój system, wtedy możliwe jest, że cokolwiek kompilator jest w twoim systemie, może faktycznie spowodować gorszą wydajność.

hotpaw2
źródło