Rozwiązuję problem wieloskalowy za pomocą heterogenicznej metody wieloskalowej (HMM) . Zasadniczo moja konkretna procedura wykorzystuje następujący proces iteracyjny:
- Rozwiąż wiele lokalnych systemów macierzowych.
- Oblicz wartość zainteresowania z rozwiązań lokalnych systemów.
- Złóż globalny system macierzy na podstawie lokalnych „wartości zainteresowania”
- Rozwiąż globalny system macierzy
- Skorzystaj z rozwiązania globalnego systemu macierzy, aby utworzyć nowe lokalne systemy macierzy.
Powtarzaj do momentu spełnienia niektórych kryteriów konwergencji.
Ponieważ istnieje wiele lokalnych (niezależnych) liniowych układów równań i wiele systemów może zmieścić się w lokalnej pamięci RAM, uważam, że najlepiej jest załadować wiele „lokalnych” systemów do każdego procesora i rozwiązać każdy system sekwencyjnie ( patrz to opublikowane pytanie ).
Moje pytanie dotyczy najlepszej strategii montażu i rozwiązania globalnego systemu macierzy. W moim szczególnym przypadku globalny system macierzy jest wystarczająco mały, aby zmieścił się całkowicie w pamięci RAM dowolnego procesora. Ponadto macierze lokalne i globalne nie zmieniają rozmiaru między iteracjami. Przewiduję jedną z trzech możliwych strategii:
- Zbierz „wartości będące przedmiotem zainteresowania” na jednym procesorze i złóż / rozwiąż globalny system macierzy sekwencyjnie na jednym procesorze.
- Kopiuj wartości będące przedmiotem zainteresowania na każdy procesor i montuj / rozwiązuj ten sam globalny system macierzy sekwencyjnie na każdym procesorze.
- Zakładając, że każdy procesor posiada „wartości będące przedmiotem zainteresowania” niezbędne do wytworzenia sąsiadujących bloków macierzy globalnej, możemy lokalnie złożyć partycje macierzy globalnej, a następnie rozwiązać je razem równolegle.
Widzę pewne zalety / wady każdej metody. W metodzie 1 komunikacja nie jest konieczna w fazie rozwiązywania, ale komunikacja do iz procesora głównego może stać się wąskim gardłem (szczególnie w skali). Metoda 2 może wymagać większej komunikacji między procesorami w celu złożenia globalnej matrycy niż pierwsza metoda, ale nie jest potrzebna komunikacja w fazie rozwiązywania lub w następnym etapie montażu macierzy lokalnej. Metoda 3 nie wymaga komunikacji między procesorami w celu złożenia macierzy lokalnych lub globalnych, ale wymaga jej w fazie rozwiązywania.
Załóżmy, że każdy system lokalny jest rzędu x i że istnieje x lokalnych systemów macierzowych. Załóżmy ponadto, że globalny system macierzy ma rozmiar x . Przy tych założeniach, która z trzech wyżej wymienionych strategii prawdopodobnie doprowadzi do szybszego rozwiązania systemu globalnego? Czy istnieją inne strategie mapowania dla globalnej macierzy, które mogą działać szybciej podczas iteracji?10 3 10 3 10 3 10 3 10 3
Odpowiedzi:
Nie sądzę, aby był jakikolwiek przypadek, w którym chciałbyś rozwiązać na poziomie 0. Rozwiązanie nadmiarowe jest prawie zawsze lepsze, ponieważ w przypadku drobnych rzeczy redukcja jest tak samo skuteczna jak redukcja, a nadmiarowe obliczenie ma tylko jedno zamiast dwóch.
Jednak to, czy wykonać obliczenia nadmiarowe na wszystkich węzłach, czy też na podzbiorze, czy też na nadmiarowych podzbiorach, zależy od sprzętu i wielkości systemu. Dlatego powinieneś mieć system, który może wykonać dowolną z nich. PCREDUNDANT w PETSc może rozwiązać nadmiarowo wszystkie procesy, niektóre procesy lub podzbiory procesów równolegle.
źródło