Розщеплення циклу (англ. loop splitting) — оптимізація компілятора, яка намагається спростити цикл або усунути залежності в циклі, розбивши його на кілька частин, що мають одне і те саме тіло циклу і різні діапазони лічильника.
Розглянемо, наприклад, такий код:
int p = 10; for (int i=0; i<10; ++i) { y[i] = x[i] + x[p]; p = i; }
Зауважимо, що p = 10
лише для першої ітерації, а для всіх інших ітерацій p = i - 1
. Компілятор може скористатися цим, розмотавши (або «відщепивши») першу ітерацію циклу.
Після застосування оптимізації код стане таким:
y[0] = x[0] + x[10]; for (int i=1; i<10; ++i) { y[i] = x[i] + x[i-1]; }
Новий код рівносильний попередньому, проте усуває необхідність у змінній р всередині тіла циклу.
Вперше ця оптимізація з'явилася в GCC версії 3.4. Більш узагальнене розщеплення циклу додано в GCC 7.
Примітки
- . Архів оригіналу за 2 вересня 2020. Процитовано 5 січня 2022.
Література
- Альфред Ахо, Моника Лам, Рави Сети, Джеффри Ульман. Компиляторы: принципы, технологии и инструментарий = Compilers: Principles, Techniques, and Tools. — 2-е издание. — М.: «Вильямс», 2008. — 1184 с. — 1500 экз. — ISBN 978-5-8459-1349-4.
- Steven S. Muchnick. Advanced Compiler Design and Implementation. — 5-е издание. — San Francisco: Morgan Kaufmann Publishers, 1997. — 856 с. — ISBN 1-55860-320-4.
- Kennedy, Ken; & Allen, Randy. Optimizing Compilers for Modern Architectures: A Dependence-based Approach. — , 2001. — .
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Rozsheplennya ciklu angl loop splitting optimizaciya kompilyatora yaka namagayetsya sprostiti cikl abo usunuti zalezhnosti v cikli rozbivshi jogo na kilka chastin sho mayut odne i te same tilo ciklu i rizni diapazoni lichilnika Rozglyanemo napriklad takij kod int p 10 for int i 0 i lt 10 i y i x i x p p i Zauvazhimo sho p 10 lishe dlya pershoyi iteraciyi a dlya vsih inshih iteracij p i 1 Kompilyator mozhe skoristatisya cim rozmotavshi abo vidshepivshi pershu iteraciyu ciklu Pislya zastosuvannya optimizaciyi kod stane takim y 0 x 0 x 10 for int i 1 i lt 10 i y i x i x i 1 Novij kod rivnosilnij poperednomu prote usuvaye neobhidnist u zminnij r vseredini tila ciklu Vpershe cya optimizaciya z yavilasya v GCC versiyi 3 4 Bilsh uzagalnene rozsheplennya ciklu dodano v GCC 7 Primitki Arhiv originalu za 2 veresnya 2020 Procitovano 5 sichnya 2022 LiteraturaAlfred Aho Monika Lam Ravi Seti Dzheffri Ulman Kompilyatory principy tehnologii i instrumentarij Compilers Principles Techniques and Tools 2 e izdanie M Vilyams 2008 1184 s 1500 ekz ISBN 978 5 8459 1349 4 Steven S Muchnick Advanced Compiler Design and Implementation 5 e izdanie San Francisco Morgan Kaufmann Publishers 1997 856 s ISBN 1 55860 320 4 Kennedy Ken amp Allen Randy Optimizing Compilers for Modern Architectures A Dependence based Approach 2001 ISBN 1 55860 286 0