Ми працюємо над кодом середнього розміру C ++ (10Mloc), який завдяки нашим зусиллям з оптимізації стає однаково повільним .
Ця база коду - це набір бібліотек, які ми поєднуємо, щоб привести їх у роботу. Коли розроблялися загальні рамки того, як ці бібліотеки спілкувалися, було зроблено деякий акцент на продуктивності і пізніше, коли додавалися ще частини, загальна структура не сильно змінилася. Оптимізацію проводили в міру необхідності та в міру розвитку нашого обладнання. Це зробило дороге раннє рішення очевидним лише значно пізніше. Зараз ми перебуваємо на етапі, коли подальші оптимізації значно дорожчі, оскільки потребують переписування великих частин кодової бази. Ми вважаємо, що ми наближаємось до небажаного локального мінімуму, оскільки знаємо, що в принципі код повинен бути в змозі працювати набагато швидше.
Чи існують якісь успішні методології, які допомагають вирішити, що перетворюється на еволюцію кодової бази до глобально оптимально працюючого рішення, яке не легко переплутати через прості можливості оптимізації?
EDIT
Щоб відповісти на питання, як ми зараз займаємося профілем:
У нас дійсно є лише два різних сценарії, як цей код можна використовувати, обидва бентежно паралельні. Профілювання проводиться як з усередненим часом настінного годинника на великій вибірці входів, так і з більш детальними пробіжками (витрати на інструкції, непередбачення гілок та проблеми кешування). Це добре працює, оскільки ми працюємо виключно на наших надзвичайно однорідних машинах (група з декількох тисяч однакових машин). Оскільки ми зазвичай тримаємо всі наші машини зайняті більшу частину часу швидше, значить, ми можемо переглянути додаткові нові речі. Проблема, звичайно, полягає в тому, що коли з’являться нові вхідні зміни, вони можуть отримати штраф у пізньому стані, оскільки ми усунули найбільш очевидні мікроефективність для інших випадків використання, таким чином, можливо, зменшимо кількість «оптимально працюючих» сценаріїв.
sloc
. Я назвав це "помірно розміром", тому що я не маю уявлення, що тут вважається "великим".