Компіляція порівняно з використанням попередньо побудованих показників двійкових файлів?


11

Чи буде продуктивність кращою (швидшою), якщо я вручну компілюю джерело для програмного компонента для фактичної машини, на якому воно буде використовуватися, порівняно з тим, якби джерело було складено на іншій платформі, можливо, для багатьох різних архітектур? Я отримав кілька хороших результатів компіляції джерела, яке я завантажив, і мені цікаво, чи це було пов’язано з його компілюванням, а не завантаженням попередньо складеного бінарного файлу, що часто трапляється з оновленнями програмного забезпечення.


2
Компіляція для сумісності з багатьма архітектурами потенційно виключає певні оптимізації, які можуть бути можливими при компіляції для однієї архітектури.
Роберт Харві

1
Окрім більш цілеспрямованого (що майже завжди буде корисним), ви, мабуть, також зіткнетесь із великими відмінностями між компіляторами - різні компілятори підтримують різні оптимізації, а іноді вузькі місця в роботі можуть бути оптимізовані одним, але не іншим.
Даніель Б

Відповіді:


8

У багатьох (якщо не в більшості) випадках так. Це тому, що компілятор може створювати нативний код, оптимізований для конкретного процесора та середовища. Код більш "орієнтований".


7

Компіляція з джерел дає вам перевагу встановити прапорці компілятора так, як вам потрібно для вашої конкретної платформи. Завантаження пакета, складеного з тими ж точними налаштуваннями, що і ваш, не запропонувало б різниці, але зміна налаштувань за замовчуванням може отримати значні покращення.

Наприклад, якщо бінарні файли, запропоновані для завантаження, були складені для налагодження (навмисно або помилково), увімкнення більш агресивної оптимізації покращить продуктивність майже у всіх ситуаціях. З іншого боку, якби компільований код оптимізований до максимуму, ви не побачили б різниці.


Тож мої зусилля зі збирання, можливо, не були марними. Я завантажив джерело в mod_jk і компілював, і воно отримало дуже швидко, і мені цікаво, чи це було пов’язано з компіляцією вручну. Дякую за відповідь.
Ніклас

1

Це дійсно залежить від двох використовуваних компіляторів та прапорів компілятора. Зазвичай параметри компілятора та прапорця на вашій локальній машині є більш підходящими для вашої конкретної машини, якщо у вас все правильно налаштовано.

Але, якщо, наприклад, попередньо вбудований двійковий файл був побудований із значно кращим оптимізуючим компілятором (або спеціальним еталоном, розробленим за допомогою прапорів, налаштованих на конкретний фрагмент коду та на удачу, відповідний вашій системі) порівняно з компілятором на Ваша система, то можливо, що компілятор у вашій системі може насправді призвести до більш низької продуктивності.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.