Автоматичне розпаралелювання – це конвертування коду в багатопотоковий, що працює на паралельному комп'ютері (наприклад, на комп'ютері з багатьма процесорами, процесорними ядрами або потоками виконання). Метою автоматизації розпаралелювання є звільнення програміста від трудомісткого процесу ручного розпаралелювання. Незважаючи на те, що якість автоматичного розпаралелювання значно покращилася за останні роки, повне розпаралелювання послідовних програм залишається занадто складним завданням, що вимагає дуже складних видів аналізу програм та ПЗ.
Автоматичний паралелізатор зазвичай фокусується на таких керуючих конструкціях, як цикли, оскільки, в загальному випадку, більша частина виконання програми проходить всередині якихось циклів. Є два основні підходи до розпаралелювання циклів: і .
Визначення циклу, котрий може бути розпаралелений
Розглянемо, наприклад, цикл, який на кожній ітерації виконує 100 операцій, та має тисячу ітерацій. Це можна розглядати як табличку 100 стовпців на 1000 рядків, в цілому 100000 операцій.
Основні поняття
Циклічна багатопотоковість — кожен рядок в іншому потоці.
Конвеєрна багатопотоковість — кожен стовпець в іншому потоці.
Циклічна багатопотоковість
Циклічний багатопотоковий компілятор розпаралелювання намагається розділити цикл так, щоб кожна ітерація могла бути виконана на окремому процесорі одночасно.
Аналіз компілятора розпаралелювання
Компілятор зазвичай проводить два проходи аналізу до фактичного розпаралелювання для того, щоб визначити наступне:
- Чи безпечно розпаралелити цикл? Відповідаючи на це питання необхідний точний аналіз залежностей ([en]) і аналіз незалежності вказівників ([en]).
- Чи варто розпаралелювати його? Ця відповідь вимагає надійної оцінки (моделювання) робочого навантаження програми і потенціалу паралельної системи.
Перший прохід компілятора проводить аналіз залежність даних циклу щоб визначити, чи ітерації циклу можуть бути виконані незалежно один від одного.
Другий прохід намагається виправдати зусилля розпаралелювання шляхом порівняння теоретичного часу виконання коду після розпаралелювання з послідовним часом виконання. Хоч це й може звучати парадоксально, але вигода від паралельного виконання отримується не завжди. Додаткові накладні витрати, які можуть бути пов'язані з використанням декількох процесорів та особливості реалізації архітектури можуть нівелювати позитивний ефект прискорення.
Приклад
Цикл називається DOALL, якщо всі його ітерацій, в тому чи іншому виклику, можуть бути виконані паралельно. Fortran код нижче DOALL, і може бути автоматично розпаралелений компілятором, тому що кожна ітерація не залежить від інших, і кінцевий результат масиву z
буде правильним незалежно від порядку виконання інших ітерацій.
do i = 1, n z(i) = x(i) + y(i) enddo
З іншого боку, наступний код не може бути автоматично розпаралелений, оскільки значення z(i)
залежить від результату попередньої ітерації, z(i - 1)
.
do i = 2, n z(i) = z(i - 1)*2 enddo
Це не означає, що код не може бути розпаралелений. Дійсно, це еквівалентно
do i = 2, n z(i) = z(1)*2**(i - 1) enddo
Тим не менш, компілятори розпаралелювання зазвичай не здатні автоматично зробити такі паралелізми, і сумнівно, що цей код отримає вигоду з паралелізації, в першу чергу.
Конвеєрна багатопотоковість
Конвеєрний компілятор розпаралелювання намагається розбити послідовність операцій всередині циклу на послідовність , таких, що кожен блок коду може бути виконаним на окремих процесорах одночасно.
Є багато паралельних задач, які мають такі відносно самостійні блоки коду. Наприклад, при виробництві живого телевізійного мовлення, наступні завдання мають бути виконані повторно багато разів:
- Зчитати кадр вихідних пікселів від датчика зображення,
- зробити MPEG компенсацію руху для вихідних даних,
- зробити ентропійне стиснення даних data,
- розбити стиснені дані на пакети,
- додати відповідну корекцію помилок і зробити ШПФ для перетворення пакетів даних в COFDM сигнали, і
- надіслати COFDM сигнали на телевізійну антену.
Конвеєрний компілятор розпаралелювання може призначити кожну з цих шести операцій на інший процесор.
Труднощі
Автоматичне розпаралелювання складно для компіляторів з причин:
- Аналіз залежностей складний для коду, що використовує непряму адресацію, вказівники, рекурсію, виклики функцій, особливо непрямі виклики (наприклад, віртуальні функції заздалегідь невідомого класу);
- цикли можуть мати невідому заздалегідь кількість ітерацій. Через це ускладнюється вибір циклів, що вимагають розпаралелювання;
- доступ до глобальних ресурсів важко координувати з точки зору розподілу пам'яті, (вводу-виводу) і загальних змінних;
Обхід труднощів
Через складність повного автоматичного розпаралелювання існує кілька підходів для його спрощення:
- Дати програмістам можливість додавати до програми підказки компілятору, щоб впливати на процес розпаралелювання (або щоб спростити аналізи, позначивши вказівники як непересічні, або вказавши «гарячі» цикли). Серед рішень, що вимагають досить докладних інструкції для компілятора, можна вказати High Performance Fortran для систем з розподіленою пам'яттю і OpenMP для систем зі спільною пам'яттю.
- Створити інтерактивну систему компіляції, в роботі якої брала би участь людина. Такі системи створені в рамках підпроєкту Explorer, в компіляторах Polaris і ParaWise.
- Апаратна підтримка .
Ранні компілятори розпаралелювання
Багато ранніх компіляторів розпаралелювання працювали з програмами, написаними на Fortran, через його більш строгі обмеженя на перетин покажчиків (aliasing) в порівнянні з С. Крім того, на Fortran написано велику кількість програм обчислювальної математики, що вимагають великих ресурсів для своєї роботи. Приклади компіляторів:
- Paradigm compiler
- Polaris compiler
- Rice Fortran D compiler
- compiler
- Vienna Fortran compiler
Починаючи з стандарту Fortran 2008, ця мова програмування отримала архітектурно-незалежний вбудований синтаксис для паралельної декомпозиції даних та виконання інструкцій з допомогою , тому автоматичне розпаралелення з допомогою компілятора залишається корисною, але вже не надто важливою особливістю компіляторів мови фортран.
Сучасні компілятори з підтримкою розпаралелювання
Посилання
- Fox, Geoffrey; Roy Williams; Paul Messina (1994). Parallel Computing Works!. Morgan Kaufmann. с. 575, 593. ISBN .
- Simone Campanoni, Timothy Jones, Glenn Holloway, Gu-Yeon Wei, David Brooks. «The HELIX Project: Overview and Directions» [ 27 травня 2015 у Wayback Machine.]. 2012.
- . Архів оригіналу за 14 липня 2014. Процитовано 27 травня 2015.
- Patrick Lam (10 лютого 2011). (PDF). ECE459: Programming for Performance. Архів оригіналу (PDF) за 27 травня 2015. Процитовано 17 листопада 2013.
- Robert van Engelen (3 жовтня 2012). . HPC @ Florida State University. Архів оригіналу за 27 травня 2015. Процитовано 17 листопада 2013.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Avtomatichne rozparalelyuvannya ce konvertuvannya kodu v bagatopotokovij sho pracyuye na paralelnomu komp yuteri napriklad na komp yuteri z bagatma procesorami procesornimi yadrami abo potokami vikonannya Metoyu avtomatizaciyi rozparalelyuvannya ye zvilnennya programista vid trudomistkogo procesu ruchnogo rozparalelyuvannya Nezvazhayuchi na te sho yakist avtomatichnogo rozparalelyuvannya znachno pokrashilasya za ostanni roki povne rozparalelyuvannya poslidovnih program zalishayetsya zanadto skladnim zavdannyam sho vimagaye duzhe skladnih vidiv analizu program ta PZ Avtomatichnij paralelizator zazvichaj fokusuyetsya na takih keruyuchih konstrukciyah yak cikli oskilki v zagalnomu vipadku bilsha chastina vikonannya programi prohodit vseredini yakihos cikliv Ye dva osnovni pidhodi do rozparalelyuvannya cikliv i Viznachennya ciklu kotrij mozhe buti rozparalelenijRozglyanemo napriklad cikl yakij na kozhnij iteraciyi vikonuye 100 operacij ta maye tisyachu iteracij Ce mozhna rozglyadati yak tablichku 100 stovpciv na 1000 ryadkiv v cilomu 100000 operacij Osnovni ponyattya Ciklichna bagatopotokovist kozhen ryadok v inshomu potoci Konveyerna bagatopotokovist kozhen stovpec v inshomu potoci Ciklichna bagatopotokovistCiklichnij bagatopotokovij kompilyator rozparalelyuvannya namagayetsya rozdiliti cikl tak shob kozhna iteraciya mogla buti vikonana na okremomu procesori odnochasno Analiz kompilyatora rozparalelyuvannya Kompilyator zazvichaj provodit dva prohodi analizu do faktichnogo rozparalelyuvannya dlya togo shob viznachiti nastupne Chi bezpechno rozparaleliti cikl Vidpovidayuchi na ce pitannya neobhidnij tochnij analiz zalezhnostej en i analiz nezalezhnosti vkazivnikiv en Chi varto rozparalelyuvati jogo Cya vidpovid vimagaye nadijnoyi ocinki modelyuvannya robochogo navantazhennya programi i potencialu paralelnoyi sistemi Pershij prohid kompilyatora provodit analiz zalezhnist danih ciklu shob viznachiti chi iteraciyi ciklu mozhut buti vikonani nezalezhno odin vid odnogo Drugij prohid namagayetsya vipravdati zusillya rozparalelyuvannya shlyahom porivnyannya teoretichnogo chasu vikonannya kodu pislya rozparalelyuvannya z poslidovnim chasom vikonannya Hoch ce j mozhe zvuchati paradoksalno ale vigoda vid paralelnogo vikonannya otrimuyetsya ne zavzhdi Dodatkovi nakladni vitrati yaki mozhut buti pov yazani z vikoristannyam dekilkoh procesoriv ta osoblivosti realizaciyi arhitekturi mozhut nivelyuvati pozitivnij efekt priskorennya Priklad Cikl nazivayetsya DOALL yaksho vsi jogo iteracij v tomu chi inshomu vikliku mozhut buti vikonani paralelno Fortran kod nizhche DOALL i mozhe buti avtomatichno rozparalelenij kompilyatorom tomu sho kozhna iteraciya ne zalezhit vid inshih i kincevij rezultat masivu z bude pravilnim nezalezhno vid poryadku vikonannya inshih iteracij do i 1 n z i x i y i enddo Z inshogo boku nastupnij kod ne mozhe buti avtomatichno rozparalelenij oskilki znachennya z i zalezhit vid rezultatu poperednoyi iteraciyi z i 1 do i 2 n z i z i 1 2 enddo Ce ne oznachaye sho kod ne mozhe buti rozparalelenij Dijsno ce ekvivalentno do i 2 n z i z 1 2 i 1 enddo Tim ne mensh kompilyatori rozparalelyuvannya zazvichaj ne zdatni avtomatichno zrobiti taki paralelizmi i sumnivno sho cej kod otrimaye vigodu z paralelizaciyi v pershu chergu Konveyerna bagatopotokovistKonveyernij kompilyator rozparalelyuvannya namagayetsya rozbiti poslidovnist operacij vseredini ciklu na poslidovnist takih sho kozhen blok kodu mozhe buti vikonanim na okremih procesorah odnochasno Ye bagato paralelnih zadach yaki mayut taki vidnosno samostijni bloki kodu Napriklad pri virobnictvi zhivogo televizijnogo movlennya nastupni zavdannya mayut buti vikonani povtorno bagato raziv Zchitati kadr vihidnih pikseliv vid datchika zobrazhennya zrobiti MPEG kompensaciyu ruhu dlya vihidnih danih zrobiti entropijne stisnennya danih data rozbiti stisneni dani na paketi dodati vidpovidnu korekciyu pomilok i zrobiti ShPF dlya peretvorennya paketiv danih v COFDM signali i nadislati COFDM signali na televizijnu antenu Konveyernij kompilyator rozparalelyuvannya mozhe priznachiti kozhnu z cih shesti operacij na inshij procesor TrudnoshiAvtomatichne rozparalelyuvannya skladno dlya kompilyatoriv z prichin Analiz zalezhnostej skladnij dlya kodu sho vikoristovuye nepryamu adresaciyu vkazivniki rekursiyu vikliki funkcij osoblivo nepryami vikliki napriklad virtualni funkciyi zazdalegid nevidomogo klasu cikli mozhut mati nevidomu zazdalegid kilkist iteracij Cherez ce uskladnyuyetsya vibir cikliv sho vimagayut rozparalelyuvannya dostup do globalnih resursiv vazhko koordinuvati z tochki zoru rozpodilu pam yati vvodu vivodu i zagalnih zminnih Obhid trudnoshivCherez skladnist povnogo avtomatichnogo rozparalelyuvannya isnuye kilka pidhodiv dlya jogo sproshennya Dati programistam mozhlivist dodavati do programi pidkazki kompilyatoru shob vplivati na proces rozparalelyuvannya abo shob sprostiti analizi poznachivshi vkazivniki yak neperesichni abo vkazavshi garyachi cikli Sered rishen sho vimagayut dosit dokladnih instrukciyi dlya kompilyatora mozhna vkazati High Performance Fortran dlya sistem z rozpodilenoyu pam yattyu i OpenMP dlya sistem zi spilnoyu pam yattyu Stvoriti interaktivnu sistemu kompilyaciyi v roboti yakoyi brala bi uchast lyudina Taki sistemi stvoreni v ramkah pidproyektu Explorer v kompilyatorah Polaris i ParaWise Aparatna pidtrimka Ranni kompilyatori rozparalelyuvannyaBagato rannih kompilyatoriv rozparalelyuvannya pracyuvali z programami napisanimi na Fortran cherez jogo bilsh strogi obmezhenya na peretin pokazhchikiv aliasing v porivnyanni z S Krim togo na Fortran napisano veliku kilkist program obchislyuvalnoyi matematiki sho vimagayut velikih resursiv dlya svoyeyi roboti Prikladi kompilyatoriv Paradigm compiler Polaris compiler Rice Fortran D compiler compiler Vienna Fortran compiler Pochinayuchi z standartu Fortran 2008 cya mova programuvannya otrimala arhitekturno nezalezhnij vbudovanij sintaksis dlya paralelnoyi dekompoziciyi danih ta vikonannya instrukcij z dopomogoyu tomu avtomatichne rozparalelennya z dopomogoyu kompilyatora zalishayetsya korisnoyu ale vzhe ne nadto vazhlivoyu osoblivistyu kompilyatoriv movi fortran Suchasni kompilyatori z pidtrimkoyu rozparalelyuvannyaIntel C Compiler Intel Fortran Compiler gccPosilannyaFox Geoffrey Roy Williams Paul Messina 1994 Parallel Computing Works Morgan Kaufmann s 575 593 ISBN 978 1 55860 253 3 Simone Campanoni Timothy Jones Glenn Holloway Gu Yeon Wei David Brooks The HELIX Project Overview and Directions 27 travnya 2015 u Wayback Machine 2012 Arhiv originalu za 14 lipnya 2014 Procitovano 27 travnya 2015 Patrick Lam 10 lyutogo 2011 PDF ECE459 Programming for Performance Arhiv originalu PDF za 27 travnya 2015 Procitovano 17 listopada 2013 Robert van Engelen 3 zhovtnya 2012 HPC Florida State University Arhiv originalu za 27 travnya 2015 Procitovano 17 listopada 2013