Szukam programisty ze znajomością MPI - Zadanie w opisie
Zadanie polega na stworzeniu równoległej wersji algorytmu optymalizacyjnego wykorzystującego rój robotów, który dzieli się na grupy, aby odnaleźć lokalne maksima funkcji. Obecnie dostępny jest działający kod sekwencyjny w klasie SequentialSwarm, na podstawie którego należy zaimplementować klasę ParallelSwarm z wykorzystaniem MPI, aby przyspieszyć obliczenia.
Kluczowe wymagania:
Efektywność równoległa: Każdy dodatkowy proces powinien przyspieszać obliczenia. Wyniki wersji sekwencyjnej i równoległej muszą być identyczne.
Zasada podziału pracy: Każdy proces obsługuje część robotów i wymienia niezbędne informacje między procesami po każdej iteracji.
Minimalizacja komunikacji: Optymalizacja wymiany danych między procesami poprzez:
Grupowanie informacji w większe komunikaty.
Ograniczenie wymiany danych do niezbędnego minimum.
Zachowanie abstrakcji: Klasa ParallelSwarm ma dziedziczyć po klasie Swarm i spełniać jej kontrakt. Kod innych klas nie może być modyfikowany.
Implementacja:
Klasa ParallelSwarm musi zawierać:
Konstruktor: ParallelSwarm(int robots, Antenna* antenna, Function* function).
Metody odpowiedzialne za równoległe obliczenia, takie jak ocenianie wartości funkcji, wyszukiwanie sąsiadów i aktualizacja pozycji robotów.
Algorytm:
Podział robotów na procesy.
Wykonanie kroków obliczeniowych:
Ocena funkcji przez każdy proces dla swoich robotów.
Wyszukiwanie najlepszych sąsiadów w ramach lokalnej grupy.
Wymiana danych między procesami, aby zsynchronizować informacje o robotach w zasięgu.
Aktualizacja pozycji robotów.
Iteracja aż do spełnienia kryterium zakończenia.
Kompilacja i uruchamianie:
Kod MPI jest aktywowany przez definicję #define MPI_ON.
Kompilacja: mpiCC -O *cpp.
Testy mają być przeprowadzone na klastrze wydziałowym z MPI (np. OpenMPI).