Паралельні бібліотеки спільної пам'яті на основі наукових обчислень на основі завдань


10

В останні роки з'явилося кілька бібліотек / програмних проектів, які пропонують ту чи іншу форму загального призначення паралелізму спільної пам'яті, керованого даними.

Основна ідея полягає в тому, що замість написання явно потокового коду програмісти реалізують свої алгоритми як взаємозалежні завдання, які потім динамічно плануються середнім програмним забезпеченням загального призначення на машині спільної пам'яті.

Прикладами таких бібліотек є:

  • КВАРТ : Спочатку розроблений для паралельної лінійної алгебри MAGMA паралельної лінійної алгебри, здається, використовувався і для паралельного методу швидкого багатополюсності .

  • Cilk : Спочатку проект на базі MIT, який зараз підтримується Intel, реалізований як розширення мови / компілятора на C, який використовується в комп'ютерному шаховому програмному забезпеченні Cilkchess та експериментально в FFTW .

  • Суперскаляр SMP : розроблений в Барселонському центрі суперкомп'ютерів, багато в чому схожий на Cilk, заснований на #pragmaрозширеннях.

  • StarPU : Подібні "бібліотеки" на основі бібліотеки, які можна скласти і запланувати в декількох різних архітектурах, включаючи GPU.

  • Завдання OpenMP: Починаючи з версії 3.0, OpenMP представив "завдання", які можна запланувати асинхронно (див. Розділ 2.7 специфікації).

  • Інтелектуальні будівельні блоки Intel : Використовують класи C ++ для створення та запуску асинхронних завдань, див. Розділ 11 Підручника.

  • OpenCL : підтримує паралелізм на основі задач на декількох ядрах.

Хоча є багато літератури, яка описує внутрішню роботу цих бібліотек / розширень мови та їх застосування до конкретних проблем, я натрапив на дуже мало прикладів їх використання на практиці в наукових обчислювальних програмах.

Тож ось питання: Хтось знає про наукові обчислювальні коди, що використовують будь-яке з цих бібліотек / розширень мови або подібне, для паралелізму спільної пам'яті?


Ви шукаєте паралелізм на основі завдань? Чи є причина, що ви пропустили OpenCL та Intel TBB? Я мушу визнати, що не можу точно сказати, що ви шукаєте тут.
Арон Ахмадія

1
@AronAhmadia: Невігластво, головним чином ... :) Я додав TBB та OpenCL до списку, але питання все одно: Чи ці, тобто їх компоненти, що базуються на завданнях, використовуються у будь-якій значній частині програмного забезпечення для наукової роботи обчислення?
Педро

Як ми ставимось до того, щоб перетворити це питання та його відповіді на спільноту-вікі порівняно із спробами розширити її далі?
Арон Ахмадія

@AronAhmadia: Я трохи переживаю, що якщо я залишу формат запитань, це швидко переросте у довгі дискусії щодо переваг / недоліків програмування на основі завдань та / або загальної пам'яті взагалі. Я хотів би висловитись за його перемикання після отримання ще кількох відповідей.
Педро

Назва не підходить. Це питання стосується паралелізму завдань, а не спільної пам'яті.
Джефф

Відповіді:


8

deal.II використовує нитки будівельних блоків у всій бібліотеці, і загалом ми з цим задоволені. Ми розглянули декілька альтернатив, зокрема OpenMP, оскільки всі, здається, використовують це для більш простих кодів, але виявили їх відсутність. Зокрема, OpenMP має величезний недолік у тому, що його модель завдань не дозволяє отримати ручку для завдання, яке ви розпочали, і, отже, важко отримати доступ до стану завдання (наприклад, дочекатися його закінчення) або повернути значення функції, які ви виконуєте в окремому завданні. OpenMP в першу чергу хороший для паралелізації внутрішніх циклів, але ви отримуєте паралельну ефективність шляхом паралелізації найбільш зовнішніх , складних циклів, і OpenMP не є інструментом для цього, хоча TBB досить добре для цього.


Дякую, що вказали на це, я не розглядав угоду. II! Чи є якась публікація або фрагмент документації, в якому детально описано використання TBB?
Педро

Жодна публікація, але це може допомогти: dealii.org/developer/doxygen/deal.II/group__threads.html
Вольфганг Бангерт

4

На мою думку, ці системи були відносно невдалими, насамперед, з наступних причин.

  • Наївна перспектива, що паралельне обчислення стосується паралелізації обчислень (наприклад, флопів) більше, ніж відкриття локальної пам'яті та видалення точок синхронізації. Хоча деякі проблеми, такі як алгоритми щільної матриці, як і раніше обмежені FP, виникають лише після ретельного розгляду підсистеми пам'яті, а більшість обчислювальних ядер (особливо в світі PDE) є більш чутливими до пам'яті. Робочі черги, як правило, торгують місцем пам'яті для кращого наївного балансу флопів та більшої кількості операцій з атомною пам'яттю (за рахунок синхронізації через чергу).
  • Опора на надмірне розкладання для динамічного балансу навантаження за рахунок сильної масштабованості. Задачі, як правило, залежать від даних, що перекриваються (значення привидів). Із зменшенням розміру інтер'єру співвідношення привид / інтер’єр збільшується. Навіть коли це не передбачає зайвої роботи, це передбачає посилення руху пам’яті. Значні скорочення вимог до пропускної здатності пам’яті можуть мати такі підходи, як спільний попередній вибір, за допомогою якого кілька потоків поділяють кеш L1 або L2 шляхом попереднього вибору програмного забезпечення для свого сусіда (який неявно підтримує групу потоків приблизно когерентною). Це якраз протилежне надмірному розкладанню.
  • Непередбачувана продуктивність, здебільшого через вищезазначені проблеми з пам'яттю.
  • Відсутність зручних для бібліотеки компонентів. Це майже можна назвати таким, що не має аналога аналогічного, MPI_Commщо дозволяє різним бібліотекам виконувати розширені операції без зіткнення, а також передавати контекст між бібліотеками та відновлювати необхідні атрибути. Абстракція, що надається "комунікатором", важлива для складання бібліотеки незалежно від того, використовується спільна чи розподілена пам'ять.

Можливо, я нерозумію вашу відповідь, але перший пункт - це якраз протилежне тому, що показали Буттарі, Курзак, Донгарра та інші з MAGMA, бібліотекою спільної пам'яті на основі завдань для щільної лінійної алгебри ... Також у вашому другому пункті Ви посилаєтесь на дані, що перекриваються, тобто значення привидів та відношення поверхні до об'єму, але це перешкоди для схем декомпозиції домену розподіленої пам'яті. Я сам працюю з такими методами для кодів на основі частинок і отримую набагато кращі показники, ніж паралельні реалізації на основі MPI.
Педро

Питання, в будь-якому випадку, було іншим ... Чи знаєте ви про якісь наукові проекти обчислювальних програм, які використовують ці підходи?
Педро

1. Є декілька проектів, що використовують ці системи, але я не думаю, що цей підхід можна вважати "успішним". 2. Залежності все ще перекриваються в спільній пам'яті. Подивіться, як tcmalloc або Linux ядро ​​робить потоки більш незалежними, щоб уникнути вузьких місць, таких як синхронізація через атоми. Спільний простір адрес не означає, що ви повинні діяти так, ніби у вас є однакова пам'ять або що ви повинні вважати атоміку недорогою.
Джед Браун

3. Я не знаю, яке "справедливе порівняння" ви збираєтесь цитувати, але PLASMA отримує лише близько 25% пікового FPU (наприклад, слайд 5 hpcgarage.org/cscads2012/Luszczek-UTK-PowerTools.pdf ), який би був Неймовірно погано для тієї ж операції в розподіленій пам'яті, де очікується щонайменше 70% піку. Щільна лінійна алгебра - це випадок, пов'язаний з FPU, який я конкретно вказав як можливий виняток, але, незважаючи на величезні розміри матриць, PLASMA, очевидно, далеко не пов'язаний з FPU.
Джед Браун

Педро, у більшості фізики є компонент довгого діапазону, тому частинки поєднуються з оновленням, яке підлягає ефекту від поверхні до солюму (PPPM, вихрові частинки тощо)
Метт Кноплі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.