Паралелізм завдань: відмінності між версіями

[неперевірена версія][неперевірена версія]
Вилучено вміст Додано вміст
Vader995 (обговорення | внесок)
Немає опису редагування
Vader995 (обговорення | внесок)
виправлення помилок
Рядок 1:
'''Паралелізм завдань''' (також відомий як '''функція паралелізму''' або '''керування паралелізмом''') є однією з форм [[Паралельні обчислення|розпаралелювання]] [[Початковий код|комп'ютерного код]]<nowiki/>у між декількома [[Центральний процесор|процесорам]]<nowiki/>и]] в паралельних обчислювальних середовищах. Паралелізм завдань акцентує увагу на розподіл завдань—конкретно виконуваних [[Процес (інформатика)|процесів]] або [[Нитка (інформатика)|потоків]]—на різних процесорах. Це контрастує з паралелізмом даних як інша форма паралелізму.
 
== Опис ==
У багатопроцесорній системі, паралелізм завдань досягається, коли кожен процесор виконує іншу нитку (або процес) на одних і тих же або різних даних. Нитки можуть виконувати один і той же або інший код. У загальному випадку, потоки які виконуються, взаємодіють один з одним, під час виконання. Зв'язок зазвичай відбувається шляхом передачі даних від одного потоку до іншого, як частина [[Потік робіт|робочого процесу]].
 
Як простий приклад, якщо ми запускаємо код на 2-процесорній системі (CPU "a" і "b") в [[wiktionary:parallel|паралельн]]<nowiki/>ому середовищі, і хочемо виконати завдання "A" і "B" одночасно, можна сказати процесору "а" робити завдання "A" і процесору "b", щоб виконував завдання "B", тим самим скорочуючи час виконання виконаннь. Завдання можуть бути призначені, за допомогою [[УмовнийОператор перехід(програмування)|умовних оператор]]<nowiki/>ів]], як описано нижче.
 
Паралелізм завдань підкреслює розподілений (паралельний) характер обробки (тобто потоки), на відміну від даних ([[Паралелізм даних|п]]<nowiki/>аралелізм даних]]). Більшість реальних програм знаходяться десь на континуумі між паралелізмом задач і паралелізмом даних.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;" contenteditable="false">&#x5B;''<span title="This claim needs references to reliable sources. (June 2013)">правити</span>''&#x5D;</sup>
 
 
'''Паралелізм рівня ниток''' ('''ПРН''') - це [[Паралельні обчислення|паралелізм]] , властивий програмам, які виконуються в кількох [[Нитка (інформатика)|поток]]<nowiki/>ах]] одночасно. Цей тип паралелізму зустрічається в основному в програмах, написаних для комерційних [[Сервер|сервер]]<nowiki/>ів]] , таких як бази даних. Запустивши багато потоків одночасно, ці програми здатні переносити велику кількість операцій введення-виведення і час очікування системи пам'яті, які їх робочі навантаження можуть перейняти на себе, поки одна нитка затримана, чекаючи пам'яті або  доступу до диску, інша нитка може виконувати корисну роботу.
 
Експлуатація рівня ниток паралелізму також почала робити набігивиходити на ринок настільних комп'ютерів з появою багатоядерних мікропроцесорів. Це сталося тому що, що, з різних причин, це стає все більш недоцільним збільшувати або тактову частоту або інструкції за такт одного ядра. Якщо ця тенденція збережеться, нові програми повинні бути розроблені, щоб використовувати кілька потоків для того, щоб отримати вигоду зі збільшенням потенційної обчислювальної потужності. Це контрастує з попередніми мікропроцесорнихмікропроцесорними інноваціями, в якому існуючий код був автоматично прискорено, запустивши його на новішому / швидшому комп'ютері.
 
== Приклад ==
П[[Псевдокод|севдокод]] ілюструє паралелізм завдань:
program:
...
Рядок 27:
* У [[ОПБПД|SPMD]] системи, обидва CPU будуть виконувати код.
* У паралельному середовищі, обидва будуть мати доступ до тих же даних.
* Оператор "if" диференціюєтьсярозмежовує міжроботу CPUпроцесорів. CPU "а" читатимебуде вірнозчитувати наtrue в "if", іа CPU "b" читатимезчитувати вірноtrue наз "else if", таким чином, маючи свою власну задачу.
* Тепер обидва CPU виконують окремі блоки коду одночасно, виконуючи різні завдання одночасно.
Код, виконуваний CPU "а":
Рядок 43:
Ця концепція може бути узагальнена на будь-яке число процесорів.
 
== Підтримка мов ==
== Мовна підтримка ==
 
=== Мови для паралельних завдань ===
Приклади мов для паралельних завдань можуть бути знайдені в області [[Мови опису апаратури|м]]<nowiki/>ови опису апаратури]] таких як [[verilog]] іабо [[VHDL]], які можуть також розглядатися як представлення "статичного коду" парадигми програмного забезпечення, де програма має статичну структуру, і цідані зміни - якзмінюються щодо "статичних даних" моделі, де дані не змінюються (або змінюються повільно) і обробки (прикладні методи), зміна (наприклад, пошук по базі).<sup class="noprint Inline-Template " style="margin-left:0.1em; white-space:nowrap;" contenteditable="false">&#x5B;''<span title="The text near this tag may need clarification or removal of jargon. (October 2010)">роз'яснення необхідності</span>''&#x5D;</sup>
 
=== Основні цільові мови ===
Паралелізм завдань може підтримуватися на основних мовах, генеральськихвбудованих цілей або вбудовані засоби,засобах або бібліотекибібліотеках. Відомі приклади включають:
* C++ (Intel): [[Intel Threading Building Blocks|Threading Building Blocks]]
* C, C++, Objective-C (Apple): Grand Central Dispatch