Комбінована оптимізація та її реалізація
Поняття «оптимізація» зазвичай передбачає, що система зберігає ту ж саму функціональність. Однак, значне поліпшення продуктивності часто може бути досягнуто і за допомогою видалення надлишкової функціональності. Наприклад, якщо припустити, що програмі не потрібно підтримувати більш, ніж 100 елементів при введенні, то можливо використовувати статичну виділення пам'яті замість більш повільного динамічного.
У дослідженні операцій, оптимізація — це проблема визначення вхідних значень функції, при яких вона має максимальне або мінімальне значення. Іноді на ці значення накладаються обмеження, така задача відома як обмежена оптимізація.
У програмуванні, оптимізація зазвичай позначає модифікацію коду і його налаштувань компіляції для даної архітектури для виробництва більш ефективного ПО.
Типові проблеми мають настільки велику кількість можливостей, що програмісти зазвичай можуть дозволити використовувати тільки «досить хороше» рішення.
Оптимізація за витратами процесорного часу особливо важлива для розрахункових програм, в яких велику питому вагу мають математичні обчислення. Тут наведені деякі прийоми оптимізації, які може використовувати програміст при написанні вихідного тексту програми.
Оптимізація може відбуватися на декількох рівнях. Зазвичай більш високі рівні впливають більше і їх важче змінити пізніше у проекті. Таким чином, оптимізація, як правило, проводиться через удосконалення на вищому рівні до нижчого. Початкове збільшення ефективності велике і досягається меншими зусиллями, а потім воно зменшується і вимагає більше роботи. Тим не менше, в деяких випадках загальна продуктивність залежить від продуктивності низькорівневої частини програми і невеликі зміни на пізній стадії або початок розгляду з низькорівневих деталей можуть значно вплинути. Зазвичай деяка увага приділяється ефективності цілого проекту і, хоча так не завжди, але вважається, що краще оптимізувати пізно,ніж ніколи . На довгострокових проектах, як правило, є циклиоптимізації, де поліпшення однієї області показує обмеження в інший, і їх, як правило, урізають, коли продуктивність прийнятна або ефективність майже не зросте або буде дороговартісною.
Реалізація та методи
1.Рівень дизайну вважається найвищим. Його можна оптимізувати для найкращого використання наявних ресурсів, враховуючи цілі, обмеження та очікуване використання / навантаження. Вибір дизайну залежить від цілей, сформованих при проектуванні.
2.Наступним рівнем є рівень алгоритмів та структур даних . Враховуючи загальну конструкцію, продуманий вибір ефективних алгоритмів і структур даних (за асимптотичною складністю) і ефективна реалізація цих алгоритмів і структур даних може значно вплинути на продуктивність.
3.Ще один важливий метод – кешування, особливо мемоїзації , що дозволяє уникнути надлишкових обчислень. Через важливість кешування в системі часто є багаторівневий кеш, що може викликати проблеми з використанням пам'яті, а також питання коректності роботи з старими моделями кешів.
4.Між рівнем вихідного коду і рівнем компіляції, є рівень збірки, який налаштовує продуктивність у вихідному коді і компіляторі відповідно. Директиви і прапори збірки, такі як використання препроцесора, дозволяють відключити непотрібні функції програмного забезпечення, оптимізувати процесори для конкретних моделей, апаратні частини або передбачення розгалуження.
5.На найнижчому рівні є написання коду, використовуючи мову асемблер , яка призначена для певної апаратної платформи і може виробляти найбільш ефективний і компактний код, якщо програміст користується повним набором машинних інструкцій.
Немає коментарів:
Дописати коментар