Obecnie opracowuję metodę dekompozycji domen dla rozwiązania problemu rozpraszania. Zasadniczo rozwiązuję iteracyjnie system BVP firmy Helmholtz. Dyskretyzuję równania metodą elementów skończonych na siatkach trójkątnych lub czworościennych. Rozwijam kod w kierunku mojej pracy doktorskiej. Zdaję sobie sprawę z niektórych istniejących bibliotek elementów skończonych, takich jak deal.ii lub DUNE i chociaż uważam, że są one świetne, z inspirującym projektem i interfejsem API, do celów edukacyjnych chciałem opracować od podstaw swoją własną małą aplikację.
Jestem w punkcie, w którym mam uruchomione moje wersje szeregowe i teraz chcę je zrównoleglić. W końcu jedną z mocnych stron ram dekompozycji domen jest formułowanie algorytmów, które są łatwe do zrównoleglenia, przynajmniej w zasadzie. W praktyce jednak należy wziąć pod uwagę wiele szczegółów. Zarządzanie siatką jest jednym z nich. Jeśli aplikacje mają osiągnąć wysoką rozdzielczość przy dobrym skalowaniu do wielu procesorów, replikacja całej siatki na każdym procesorze jest nieefektywna.
Chciałem zapytać programistów, którzy pracują nad podobnymi aplikacjami w środowiskach obliczeniowych o wysokiej wydajności, jak radzą sobie z tym problemem.
Istnieje biblioteka p4est do rozproszonego zarządzania siatką. Nie potrzebuję AMR, więc może to być przesada, ponieważ interesuje mnie tylko stosowanie jednolitych siatek i nie jestem pewien, czy może ulepszyć trójkątne siatki. Mógłbym również po prostu stworzyć jednolitą siatkę, a następnie podać ją do jednego z partycjonerów siatki i wykonać przetwarzanie końcowe danych wyjściowych.
Najprostsze podejście wydaje się tworzyć osobny plik dla każdej partycji zawierający informacje o siatce istotne tylko dla tej konkretnej partycji. Ten plik zostałby odczytany przez pojedynczy procesor, który byłby odpowiedzialny za montaż systemu dyskretnego na tej części siatki. Oczywiście niektóre informacje o połączeniach / sąsiedztwie partycji globalnej również musiałyby być przechowywane w pliku odczytywanym przez wszystkie procesory w celu komunikacji między procesami.
Jakie są inne podejścia? Jeśli niektórzy z was mogliby się podzielić, jakie są najczęściej stosowane metodologie w branży lub rządowe instytucje badawcze związane z obsługą tego problemu? Jestem całkiem nowy w programowaniu równoległego solvera elementów skończonych i chciałem przekonać się, czy właściwie myślę o tym problemie i jak inni do niego podchodzą. Wszelkie porady lub wskazówki do odpowiednich artykułów badawczych będą mile widziane!
Z góry dziękuję!