Witam,
Piszę program w MPI dla C++ operujący na macierzach. Używam tablic jednowymiarowych, bo mimo że są mniej czytelne łatwiej je przesłać (wskaźnik na bufor) np. MPI::DOUBLE, a łatwo sobie przeliczyć co znaczyłby indeks w tablicy dwuwymiarowej.

Dane wczytuje na procesorze 0, następnie przesyłam go do wszystkich pozostałych (replikacja przesz broadcast). Ustawiam barierę, aby nie było hazardu.

Następnie przechodzę do obliczeń, każdy procesor na swojej cząstce danych. Ustawiam barierę. Do tego momentu wszystko dobrze.

Potem zaczynają się schody: wyniki ze wszystkich tablic należy zebrać na jednym procesorze. Nie mam pomysłu jak przesyłać tablice z liczbami DOUBLE, tak aby na procesorze 0 złożyć z nich tablicę ze wszystkich możliwych procesorów np.

CPU 0: tablicaA
CPU 1: tablicaB -> wyślij do CPU0
CPU 2: tablicaC -> wyślij do CPU1

Wiem, że MPI ma funkcje Send, Recv oraz Sendrecv działające na komunikatorze i wydaje mi się, że to ich powinienem użyć (wydają się strasznie toporne). Idę w dobrą stronę, czy błądze jak dziecko we mgle?

Pozdrawiam!