В даний час я розробляю метод декомпозиції домену для вирішення проблеми розсіювання. В основному я вирішую систему Helmholtz BVP ітеративно. Я дискретизую рівняння методом кінцевих елементів у трикутних або чотиригранних сітках. Я розробляю код до своєї кандидатської дисертації. Мені відомі деякі існуючі бібліотеки з кінцевими елементами, такі як deal.ii або DUNE, і, хоча я вважаю, що вони чудові, з надихаючим дизайном та API, для цілей навчання я хотів розробити власне маленьке додаток з нуля.
Я зараз в моєму запуску серійних версій, і тепер я хочу їх паралелізувати. Зрештою, одна з сильних сторін рамки розкладу домену формує алгоритми, які легко паралелізувати, принаймні в принципі. На практиці, однак, існує багато деталей, які потрібно враховувати. Мережеве управління - одна з них. Якщо програми мають досягти високої роздільної здатності при одночасному масштабуванні багатьох процесорів, реплікація всієї сітки на кожен процесор неефективна.
Я хотів запитати тих розробників, які працюють над подібними додатками у високопродуктивних обчислювальних середовищах, як вони вирішують цю проблему.
Існує p4est бібліотека для управління розподіленою сіткою. Я не потребую AMR, тому це може бути надмірним вмістом, оскільки мені цікаво використовувати лише рівномірні сітки, і я не впевнений, чи зможе він вдосконалити трикутні сітки. Я також міг би просто створити рівномірну сітку, а потім подати її в один із сітчастих партнерів і зробити деяку поштову обробку виводу.
Найпростішим підходом, здається, є створення окремого файлу для кожного розділу, що містить мережеву інформацію, що стосується лише конкретного розділу. Цей файл читатиметься одним процесором, який би відповідав за збірку дискретної системи на цій частині сітки. Звичайно, деякі відомості про підключення / сусідство глобальних розділів також повинні зберігатися у файлі, який читають усі процесори для міжпроцесорної комунікації.
Які ще існують підходи? Якщо хтось із вас може поділитися, які існують найбільш поширені методології в галузі або державні науково-дослідні установи, пов'язані з вирішенням цього питання? Я зовсім новачок у програмуванні паралельного вирішення кінцевих елементів, і я хотів отримати уявлення про те, чи правильно я думаю про цю проблему та як до неї звертаються інші. Будемо дуже вдячні за будь-які поради чи вказівки на відповідні наукові статті!
Спасибі заздалегідь!