Ця стаття є сирим з іншої мови. Можливо, вона створена за допомогою машинного перекладу або перекладачем, який недостатньо володіє обома мовами. (липень 2016) |
Ця стаття не містить . (липень 2016) |
Оптимізація — модифікація системи для вдосконалення її . Система може бути одиночною комп'ютерною програмою, набором комп'ютерів або навіть цілою мережею, такою як Інтернет.
Хоча метою оптимізації є отримання оптимальної системи, істинно оптимальна система в процесі оптимізації досягається далеко не завжди. Оптимізована система зазвичай є оптимальною тільки для однієї задачі або групи користувачів: десь може бути важливіше зменшення часу, необхідного програмі для виконання роботи, навіть ціною споживання більшого обсягу пам'яті; в додатках, де важливіше пам'ять, можуть вибиратися більш повільні алгоритми з меншими запитами до пам'яті.
Більш того, часто не існує універсального рішення, яке працює добре у всіх випадках, тому інженери використовують компромісні (англ. tradeoff) рішення для оптимізації лише ключових параметрів. До того ж, зусилля, необхідні для досягнення повністю оптимальної програми, яку неможливо далі поліпшити, практично завжди перевищують вигоду, яка може бути від цього отримана, тому, як правило, процес оптимізації завершується до того, як досягається повна оптимальність. На щастя, в більшості випадків навіть при цьому досягаються помітні поліпшення.
Оптимізація повинна проводитися з обережністю. Тоні Гоара вперше вимовив, а Дональд Кнут згодом часто повторював відомий вислів: «Передчасна оптимізація — це корінь всіх бід». Дуже важливо мати для початку озвучений алгоритм і працюючий прототип.
Основи
Деякі завдання часто можуть бути виконані більш ефективно. Наприклад, програма на мові Сі, яка підсумовує всі цілі числа від 1 до N:
int i, sum = 0; for (i = 1; i <= N; i++) sum += i;
Маючи на увазі, що тут немає переповнення, цей код може бути переписаний у наступному вигляді за допомогою відповідної математичної формули:
int sum = (N * (N+1)) / 2;
Поняття «оптимізація» зазвичай передбачає, що система зберігає ту ж саму функціональність. Однак, значне поліпшення продуктивності часто може бути досягнуто і за допомогою видалення надлишкової функціональності. Наприклад, якщо припустити, що програмі не потрібно підтримувати більш, ніж 100 елементів при введенні, то можливо використовувати статичну виділення пам'яті замість більш повільного динамічного.
Компроміси (tradeoff)
Оптимізація в основному фокусується на одиничному або повторному часу виконання, використання пам'яті, дискового простору, пропускної здатності або деякому іншому ресурсі. Це звичайно вимагає компромісів — один параметр оптимізується за рахунок інших. Наприклад, збільшення розміру програмного кешу чого-небудь покращує продуктивність часу виконання, але також збільшує споживання пам'яті. Інші поширені компроміси включають прозорість коду та його виразність, майже завжди ціною деоптимізації. Складні спеціалізовані алгоритми вимагають більше зусиль по налагодженню і збільшують ймовірність помилок.
Різні області
У дослідженні операцій, оптимізація — це проблема визначення вхідних значень функції, при яких вона має максимальне або мінімальне значення. Іноді на ці значення накладаються обмеження, така задача відома як обмежена оптимізація.
У програмуванні, оптимізація зазвичай позначає модифікацію коду і його налаштувань компіляції для даної архітектури для виробництва більш ефективного ПО.
Типові проблеми мають настільки велику кількість можливостей, що програмісти зазвичай можуть дозволити використовувати тільки «досить хороше» рішення.
Вузькі місця
Для оптимізації потрібно знайти (англ. bottleneck — пляшкове горлечко): критичну частину коду, яка є основним споживачем необхідного ресурсу. Поліпшення приблизно 20 % коду іноді тягне за собою зміну 80 % результатів (див. також принцип Парето). Для пошуку вузьких місць використовуються спеціальні програми — Профайлер. Витік ресурсів (пам'яті, дескрипторів тощо) також може призвести до падіння швидкості виконання програми, для їх знаходження також застосовуються спеціальні програми (наприклад, [en]).
Архітектурний дизайн системи особливо сильно впливає на її продуктивність. Вибір алгоритму впливає на ефективність більше, ніж будь-який інший елемент дизайну. Більш складні алгоритми і структури даних можуть добре оперувати з великою кількістю елементів, в той час як прості алгоритми підходять для невеликих обсягів даних — накладні витрати на ініціалізацію більш складного алгоритму можуть переважити вигоду від його використання.
Чим більше пам'яті використовує програма, тим швидше вона зазвичай виконується. Наприклад, програма-фільтр зазвичай читає кожен рядок, фільтрує і виводить цей рядок безпосередньо. Тому вона використовує пам'ять тільки для зберігання одного рядка, але її продуктивність зазвичай дуже погана. Продуктивність може бути значно поліпшена читанням цілого файлу і записом потім відфільтрованого результату, проте цей метод використовує більше пам'яті. Кешування результату також ефективно, проте вимагає більшої кількості пам'яті для використання.
Прості прийоми оптимізації програм за витратами процесорного часу
Оптимізація за витратами процесорного часу особливо важлива для розрахункових програм, в яких велику питому вагу мають математичні обчислення. Тут наведені деякі прийоми оптимізації, які може використовувати програміст при написанні вихідного тексту програми.
Ініціалізація об'єктів даних
У багатьох програмах якусь частину об'єктів даних необхідно ініціалізувати, тобто присвоїти їм початкові значення. Таке присвоювання виконується або на самому початку програми, або, наприклад, в кінці циклу. Правильна ініціалізація об'єктів дозволяє заощадити дорогоцінний процесорний час. Так, наприклад, якщо мова йде про ініціалізації масивів, використання циклу, швидше за все, буде менш ефективним, ніж оголошення цього масиву прямим присвоєнням.
Програмування арифметичних операцій
У тому випадку, коли значна частина часу роботи програми відводиться арифметичним обчислень, чималі резерви підвищення швидкості роботи програми полягають у правильному програмуванні арифметичних (та логічних) виразів. Важливо, що різні арифметичні операції значно розрізняються по швидкодії. У більшості архітектур найшвидшими є операції додавання і віднімання. Повільнішим є множення, потім йде ділення. Наприклад, обчислення значення виразу , де — константа, для аргументів з рухомою комою виробляється швидше у вигляді , де — константа, що обчислюється на етапі компіляції програми (фактично повільна операція ділення замінюється швидкою операцією множення). Для цілочисельного аргументу обчислення виразу швидше порахувати у вигляді (операція множення замінюється операцією додавання) або з використанням операції зсуву вліво (що забезпечує виграш не на всіх процесорах). Подібні оптимізації називаються . Множення цілочисельних аргументів на константу на процесорах сімейства x86 може бути ефективно виконана з використанням асемблерних команд LEA
, SHL
и ADD
замість використання програм MUL/IMUL
:
; Вихідний операнд в регістрі EAX ADD EAX, EAX ; множення на 2 LEA EAX, [EAX + 2*EAX] ; множення на 3 SHL EAX, 2 ; множення на 4 LEA EAX, [4*EAX] ; інакший варіант реалізації множення на 4 LEA EAX, [EAX + 4*EAX] ; множення на 5 LEA EAX, [EAX + 2*EAX] ; множення на 6 ADD EAX, EAX ; і т.п.
Подібні оптимізації є мікроархітектурними і зазвичай проводяться прозоро для програміста.
Відносно багато часу витрачається на звернення до підпрограм (передача параметрів через стек, збереження регістрів і адреси повернення, виклик конструкторів копіювання). Якщо підпрограма містить малу кількість дій, вона може бути реалізована підставлянням (англ. inline) — всі її оператори копіюються в кожне нове місце виклику (існує ряд обмежень на inline-підстановки: наприклад, підпрограма не повинна бути рекурсивною). Це ліквідує накладні витрати на звернення до підпрограмі, проте веде до збільшення розміру виконуваного файлу. Саме по собі збільшення розміру виконуваного файлу не є суттєвим, проте в деяких випадках виконуваний код може вийти за межі кешу команд, що спричинить значне падіння швидкості виконання програми. Тому сучасні оптимізують компілятори зазвичай мають налаштування оптимізації за розміром коду і по швидкості виконання.
Швидкодія також залежить і від типу операндів. Наприклад, у мові Turbo Pascal, через особливості реалізації цілочисельний арифметики, операція додавання виявляється найбільш повільною для операндів типу Byte
і ShortInt
: попри те, що змінні займають один байт, арифметичні операції для них двобайтові і при виконанні операцій над цими типами проводиться обнулення старшого байта регістрів і операнд копіюється з пам'яті в молодший байт регістра. Це і призводить до додаткових витрат часу.
Програмуючи арифметичні вирази, варто вибирати таку форму їх запису, щоб кількість «повільних» операцій було зведено до мінімуму. Розглянемо такий приклад. Нехай необхідно обчислити багаточлен 4-го ступеня:
За умови, що обчислення ступеня проводиться перемножуванням підстави певну кількість разів, неважко знайти, що в цьому виразі міститься 10 множень («повільних» операцій) і 4 складання («швидких» операцій). Це ж саме вираз можна записати у вигляді:
Така форма запису називається схемою Горнера. У цьому виразі 4 множення та 4 складання. Загальна кількість операцій скоротилася майже в два рази, відповідно зменшиться і час обчислення багаточлена. Подібні оптимізації є алгоритмічними і зазвичай не виконується компілятором автоматично.
Цикли
Розрізняється і час виконання циклів різного типу. Час виконання циклу з лічильником і циклу з постусловіем при всіх інших рівних умовах збігається, цикл з передумовою виконується декілька довше (приблизно на 20-30 %).
При використанні вкладених циклів слід мати на увазі, що витрати процесорного часу на обробку такої конструкції можуть залежати від порядку проходження вкладених циклів. Наприклад, вкладений цикл з лічильником на мові Turbo Pascal:
for j := 1 to 100000 do for k := 1 to 1000 do a := 1; | for j := 1 to 1000 do for k := 1 to 100000 do a := 1; |
Цикл в лівій колонці виконується приблизно на 10 % довше, ніж у правій.
На перший погляд, і в першому, і в другому випадку 10 000 000 разів виконується оператор присвоювання і витрати часу на це мають бути однакові в обох випадках. Але це не так. Пояснюється це тим, що ініціалізації циклу (обробка процесором його заголовка з метою визначення початкового і кінцевого значень лічильника, а також кроку приросту лічильника) вимагає часу. У першому випадку 1 раз ініціалізується зовнішній цикл і 100 000 разів — внутрішній, тобто всього виконується 100001 ініціалізація. У другому випадку таких ініціалізацій виявляється всього лише 1001.
Аналогічно поводяться вкладені цикли з передумовою і з постумовою. Можна зробити висновок, що при програмуванні вкладених циклів по можливості слід робити цикл з найбільшим числом повторень самим внутрішнім, а цикл з найменшим числом повторень — самим зовнішнім.
Якщо в циклах містяться звернення до пам'яті (зазвичай при обробці масивів), для максимально ефективного використання кешу і механізму апаратної предвибірки даних з пам'яті (англ. Hardware Prefetch) порядок обходу адрес пам'яті повинен бути по можливості послідовним. Класичним прикладом подібної оптимізації є зміна порядку проходження вкладених циклів при виконанні множення матриць.
При обчисленні сум часто використовуються цикли, що містять однакові операції, що відносяться до кожного доданку. Це може бути, наприклад, загальний множник (мова Turbo Pascal):
sum := 0; for i := 1 to 1000 do sum := sum + a * x[i]; | sum := 0; for i := 1 to 1000 do sum := sum + x[i]; sum := a * sum; |
Друга форма запису циклу виявляється економнішою.
Див. також
Цю статтю треба для відповідності Вікіпедії. (січень 2017) |
Це незавершена стаття з інформатики. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Cya stattya ye sirim perekladom z inshoyi movi Mozhlivo vona stvorena za dopomogoyu mashinnogo perekladu abo perekladachem yakij nedostatno volodiye oboma movami Bud laska dopomozhit polipshiti pereklad lipen 2016 Cya stattya ne mistit posilan na dzherela Vi mozhete dopomogti polipshiti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Material bez dzherel mozhe buti piddano sumnivu ta vilucheno lipen 2016 Optimizaciya modifikaciya sistemi dlya vdoskonalennya yiyi Sistema mozhe buti odinochnoyu komp yuternoyu programoyu naborom komp yuteriv abo navit ciloyu merezheyu takoyu yak Internet Hocha metoyu optimizaciyi ye otrimannya optimalnoyi sistemi istinno optimalna sistema v procesi optimizaciyi dosyagayetsya daleko ne zavzhdi Optimizovana sistema zazvichaj ye optimalnoyu tilki dlya odniyeyi zadachi abo grupi koristuvachiv des mozhe buti vazhlivishe zmenshennya chasu neobhidnogo programi dlya vikonannya roboti navit cinoyu spozhivannya bilshogo obsyagu pam yati v dodatkah de vazhlivishe pam yat mozhut vibiratisya bilsh povilni algoritmi z menshimi zapitami do pam yati Bilsh togo chasto ne isnuye universalnogo rishennya yake pracyuye dobre u vsih vipadkah tomu inzheneri vikoristovuyut kompromisni angl tradeoff rishennya dlya optimizaciyi lishe klyuchovih parametriv Do togo zh zusillya neobhidni dlya dosyagnennya povnistyu optimalnoyi programi yaku nemozhlivo dali polipshiti praktichno zavzhdi perevishuyut vigodu yaka mozhe buti vid cogo otrimana tomu yak pravilo proces optimizaciyi zavershuyetsya do togo yak dosyagayetsya povna optimalnist Na shastya v bilshosti vipadkiv navit pri comu dosyagayutsya pomitni polipshennya Optimizaciya povinna provoditisya z oberezhnistyu Toni Goara vpershe vimoviv a Donald Knut zgodom chasto povtoryuvav vidomij visliv Peredchasna optimizaciya ce korin vsih bid Duzhe vazhlivo mati dlya pochatku ozvuchenij algoritm i pracyuyuchij prototip OsnoviDeyaki zavdannya chasto mozhut buti vikonani bilsh efektivno Napriklad programa na movi Si yaka pidsumovuye vsi cili chisla vid 1 do N int i sum 0 for i 1 i lt N i sum i Mayuchi na uvazi sho tut nemaye perepovnennya cej kod mozhe buti perepisanij u nastupnomu viglyadi za dopomogoyu vidpovidnoyi matematichnoyi formuli int sum N N 1 2 Ponyattya optimizaciya zazvichaj peredbachaye sho sistema zberigaye tu zh samu funkcionalnist Odnak znachne polipshennya produktivnosti chasto mozhe buti dosyagnuto i za dopomogoyu vidalennya nadlishkovoyi funkcionalnosti Napriklad yaksho pripustiti sho programi ne potribno pidtrimuvati bilsh nizh 100 elementiv pri vvedenni to mozhlivo vikoristovuvati statichnu vidilennya pam yati zamist bilsh povilnogo dinamichnogo Kompromisi tradeoff Optimizaciya v osnovnomu fokusuyetsya na odinichnomu abo povtornomu chasu vikonannya vikoristannya pam yati diskovogo prostoru propusknoyi zdatnosti abo deyakomu inshomu resursi Ce zvichajno vimagaye kompromisiv odin parametr optimizuyetsya za rahunok inshih Napriklad zbilshennya rozmiru programnogo keshu chogo nebud pokrashuye produktivnist chasu vikonannya ale takozh zbilshuye spozhivannya pam yati Inshi poshireni kompromisi vklyuchayut prozorist kodu ta jogo viraznist majzhe zavzhdi cinoyu deoptimizaciyi Skladni specializovani algoritmi vimagayut bilshe zusil po nalagodzhennyu i zbilshuyut jmovirnist pomilok Rizni oblasti U doslidzhenni operacij optimizaciya ce problema viznachennya vhidnih znachen funkciyi pri yakih vona maye maksimalne abo minimalne znachennya Inodi na ci znachennya nakladayutsya obmezhennya taka zadacha vidoma yak obmezhena optimizaciya U programuvanni optimizaciya zazvichaj poznachaye modifikaciyu kodu i jogo nalashtuvan kompilyaciyi dlya danoyi arhitekturi dlya virobnictva bilsh efektivnogo PO Tipovi problemi mayut nastilki veliku kilkist mozhlivostej sho programisti zazvichaj mozhut dozvoliti vikoristovuvati tilki dosit horoshe rishennya Vuzki miscya Dlya optimizaciyi potribno znajti angl bottleneck plyashkove gorlechko kritichnu chastinu kodu yaka ye osnovnim spozhivachem neobhidnogo resursu Polipshennya priblizno 20 kodu inodi tyagne za soboyu zminu 80 rezultativ div takozh princip Pareto Dlya poshuku vuzkih misc vikoristovuyutsya specialni programi Profajler Vitik resursiv pam yati deskriptoriv tosho takozh mozhe prizvesti do padinnya shvidkosti vikonannya programi dlya yih znahodzhennya takozh zastosovuyutsya specialni programi napriklad en Arhitekturnij dizajn sistemi osoblivo silno vplivaye na yiyi produktivnist Vibir algoritmu vplivaye na efektivnist bilshe nizh bud yakij inshij element dizajnu Bilsh skladni algoritmi i strukturi danih mozhut dobre operuvati z velikoyu kilkistyu elementiv v toj chas yak prosti algoritmi pidhodyat dlya nevelikih obsyagiv danih nakladni vitrati na inicializaciyu bilsh skladnogo algoritmu mozhut perevazhiti vigodu vid jogo vikoristannya Chim bilshe pam yati vikoristovuye programa tim shvidshe vona zazvichaj vikonuyetsya Napriklad programa filtr zazvichaj chitaye kozhen ryadok filtruye i vivodit cej ryadok bezposeredno Tomu vona vikoristovuye pam yat tilki dlya zberigannya odnogo ryadka ale yiyi produktivnist zazvichaj duzhe pogana Produktivnist mozhe buti znachno polipshena chitannyam cilogo fajlu i zapisom potim vidfiltrovanogo rezultatu prote cej metod vikoristovuye bilshe pam yati Keshuvannya rezultatu takozh efektivno prote vimagaye bilshoyi kilkosti pam yati dlya vikoristannya Prosti prijomi optimizaciyi program za vitratami procesornogo chasuOptimizaciya za vitratami procesornogo chasu osoblivo vazhliva dlya rozrahunkovih program v yakih veliku pitomu vagu mayut matematichni obchislennya Tut navedeni deyaki prijomi optimizaciyi yaki mozhe vikoristovuvati programist pri napisanni vihidnogo tekstu programi Inicializaciya ob yektiv danih U bagatoh programah yakus chastinu ob yektiv danih neobhidno inicializuvati tobto prisvoyiti yim pochatkovi znachennya Take prisvoyuvannya vikonuyetsya abo na samomu pochatku programi abo napriklad v kinci ciklu Pravilna inicializaciya ob yektiv dozvolyaye zaoshaditi dorogocinnij procesornij chas Tak napriklad yaksho mova jde pro inicializaciyi masiviv vikoristannya ciklu shvidshe za vse bude mensh efektivnim nizh ogoloshennya cogo masivu pryamim prisvoyennyam Programuvannya arifmetichnih operacij U tomu vipadku koli znachna chastina chasu roboti programi vidvoditsya arifmetichnim obchislen chimali rezervi pidvishennya shvidkosti roboti programi polyagayut u pravilnomu programuvanni arifmetichnih ta logichnih viraziv Vazhlivo sho rizni arifmetichni operaciyi znachno rozriznyayutsya po shvidkodiyi U bilshosti arhitektur najshvidshimi ye operaciyi dodavannya i vidnimannya Povilnishim ye mnozhennya potim jde dilennya Napriklad obchislennya znachennya virazu x a displaystyle frac x a de a displaystyle a konstanta dlya argumentiv z ruhomoyu komoyu viroblyayetsya shvidshe u viglyadi x b displaystyle x cdot b de b 1 a displaystyle b frac 1 a konstanta sho obchislyuyetsya na etapi kompilyaciyi programi faktichno povilna operaciya dilennya zaminyuyetsya shvidkoyu operaciyeyu mnozhennya Dlya cilochiselnogo argumentu x displaystyle x obchislennya virazu 2 x displaystyle 2x shvidshe porahuvati u viglyadi x x displaystyle x x operaciya mnozhennya zaminyuyetsya operaciyeyu dodavannya abo z vikoristannyam operaciyi zsuvu vlivo sho zabezpechuye vigrash ne na vsih procesorah Podibni optimizaciyi nazivayutsya Mnozhennya cilochiselnih argumentiv na konstantu na procesorah simejstva x86 mozhe buti efektivno vikonana z vikoristannyam asemblernih komand LEA SHL i ADD zamist vikoristannya program MUL IMUL Vihidnij operand v registri EAX ADD EAX EAX mnozhennya na 2 LEA EAX EAX 2 EAX mnozhennya na 3 SHL EAX 2 mnozhennya na 4 LEA EAX 4 EAX inakshij variant realizaciyi mnozhennya na 4 LEA EAX EAX 4 EAX mnozhennya na 5 LEA EAX EAX 2 EAX mnozhennya na 6 ADD EAX EAX i t p Podibni optimizaciyi ye mikroarhitekturnimi i zazvichaj provodyatsya prozoro dlya programista Vidnosno bagato chasu vitrachayetsya na zvernennya do pidprogram peredacha parametriv cherez stek zberezhennya registriv i adresi povernennya viklik konstruktoriv kopiyuvannya Yaksho pidprograma mistit malu kilkist dij vona mozhe buti realizovana pidstavlyannyam angl inline vsi yiyi operatori kopiyuyutsya v kozhne nove misce vikliku isnuye ryad obmezhen na inline pidstanovki napriklad pidprograma ne povinna buti rekursivnoyu Ce likviduye nakladni vitrati na zvernennya do pidprogrami prote vede do zbilshennya rozmiru vikonuvanogo fajlu Same po sobi zbilshennya rozmiru vikonuvanogo fajlu ne ye suttyevim prote v deyakih vipadkah vikonuvanij kod mozhe vijti za mezhi keshu komand sho sprichinit znachne padinnya shvidkosti vikonannya programi Tomu suchasni optimizuyut kompilyatori zazvichaj mayut nalashtuvannya optimizaciyi za rozmirom kodu i po shvidkosti vikonannya Shvidkodiya takozh zalezhit i vid tipu operandiv Napriklad u movi Turbo Pascal cherez osoblivosti realizaciyi cilochiselnij arifmetiki operaciya dodavannya viyavlyayetsya najbilsh povilnoyu dlya operandiv tipu Byte i ShortInt popri te sho zminni zajmayut odin bajt arifmetichni operaciyi dlya nih dvobajtovi i pri vikonanni operacij nad cimi tipami provoditsya obnulennya starshogo bajta registriv i operand kopiyuyetsya z pam yati v molodshij bajt registra Ce i prizvodit do dodatkovih vitrat chasu Programuyuchi arifmetichni virazi varto vibirati taku formu yih zapisu shob kilkist povilnih operacij bulo zvedeno do minimumu Rozglyanemo takij priklad Nehaj neobhidno obchisliti bagatochlen 4 go stupenya a x 4 b x 3 c x 2 d x e displaystyle ax 4 bx 3 cx 2 dx e Za umovi sho obchislennya stupenya provoditsya peremnozhuvannyam pidstavi pevnu kilkist raziv nevazhko znajti sho v comu virazi mistitsya 10 mnozhen povilnih operacij i 4 skladannya shvidkih operacij Ce zh same viraz mozhna zapisati u viglyadi a x b x c x d x e displaystyle ax b x c x d x e Taka forma zapisu nazivayetsya shemoyu Gornera U comu virazi 4 mnozhennya ta 4 skladannya Zagalna kilkist operacij skorotilasya majzhe v dva razi vidpovidno zmenshitsya i chas obchislennya bagatochlena Podibni optimizaciyi ye algoritmichnimi i zazvichaj ne vikonuyetsya kompilyatorom avtomatichno Cikli Rozriznyayetsya i chas vikonannya cikliv riznogo tipu Chas vikonannya ciklu z lichilnikom i ciklu z postusloviem pri vsih inshih rivnih umovah zbigayetsya cikl z peredumovoyu vikonuyetsya dekilka dovshe priblizno na 20 30 Pri vikoristanni vkladenih cikliv slid mati na uvazi sho vitrati procesornogo chasu na obrobku takoyi konstrukciyi mozhut zalezhati vid poryadku prohodzhennya vkladenih cikliv Napriklad vkladenij cikl z lichilnikom na movi Turbo Pascal for j 1 to 100000 do for k 1 to 1000 do a 1 for j 1 to 1000 do for k 1 to 100000 do a 1 Cikl v livij kolonci vikonuyetsya priblizno na 10 dovshe nizh u pravij Na pershij poglyad i v pershomu i v drugomu vipadku 10 000 000 raziv vikonuyetsya operator prisvoyuvannya i vitrati chasu na ce mayut buti odnakovi v oboh vipadkah Ale ce ne tak Poyasnyuyetsya ce tim sho inicializaciyi ciklu obrobka procesorom jogo zagolovka z metoyu viznachennya pochatkovogo i kincevogo znachen lichilnika a takozh kroku prirostu lichilnika vimagaye chasu U pershomu vipadku 1 raz inicializuyetsya zovnishnij cikl i 100 000 raziv vnutrishnij tobto vsogo vikonuyetsya 100001 inicializaciya U drugomu vipadku takih inicializacij viyavlyayetsya vsogo lishe 1001 Analogichno povodyatsya vkladeni cikli z peredumovoyu i z postumovoyu Mozhna zrobiti visnovok sho pri programuvanni vkladenih cikliv po mozhlivosti slid robiti cikl z najbilshim chislom povtoren samim vnutrishnim a cikl z najmenshim chislom povtoren samim zovnishnim Yaksho v ciklah mistyatsya zvernennya do pam yati zazvichaj pri obrobci masiviv dlya maksimalno efektivnogo vikoristannya keshu i mehanizmu aparatnoyi predvibirki danih z pam yati angl Hardware Prefetch poryadok obhodu adres pam yati povinen buti po mozhlivosti poslidovnim Klasichnim prikladom podibnoyi optimizaciyi ye zmina poryadku prohodzhennya vkladenih cikliv pri vikonanni mnozhennya matric Pri obchislenni sum chasto vikoristovuyutsya cikli sho mistyat odnakovi operaciyi sho vidnosyatsya do kozhnogo dodanku Ce mozhe buti napriklad zagalnij mnozhnik mova Turbo Pascal sum 0 for i 1 to 1000 do sum sum a x i sum 0 for i 1 to 1000 do sum sum x i sum a sum Druga forma zapisu ciklu viyavlyayetsya ekonomnishoyu Div takozhLinivi obchislennya Graf potoku keruvannya Rozpodil registriv Cyu stattyu treba vikifikuvati dlya vidpovidnosti standartam yakosti Vikipediyi Bud laska dopomozhit dodavannyam dorechnih vnutrishnih posilan abo vdoskonalennyam rozmitki statti sichen 2017 Ce nezavershena stattya z informatiki Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi