co oznacza konfigurowanie MPI dla pamięci współdzielonej?

Mam trochę pytań związanych z badaniami.

Obecnie ukończyłem implementację szkieletowej struktury szkieletowej działającej w oparciu o MPI (szczególnie przy użyciuopenmpi 6.3). rama ma być używana na pojedynczej maszynie. teraz porównuję to z innymi poprzednimi implementacjami szkieletów (takimi jakskandu, szybki przepływ, ..)

Zauważyłem, że wydajność mojej implementacji nie jest tak dobra, jak w przypadku innych implementacji. Myślę, że to dlatego, że moja implementacja opiera się na MPI (a więc komunikacji dwustronnej, która wymaga dopasowania operacji wysyłania i odbierania), podczas gdy inne implementacje, z którymi się porównuję, oparte są na pamięci współdzielonej. (... ale nadal nie mam dobrego wytłumaczenia, aby to uzasadnić i jest to część mojego pytania)

Istnieją pewne duże różnice w czasie ukończenia dwóch kategorii.

Dzisiaj wprowadzono mnie również do konfiguracji open-mpi dla pamięci współdzielonej tutaj =>openmpi-sm

i nadchodzi moje pytanie.

1. co to znaczy skonfigurować MPI dla pamięci współdzielonej? Chodzi mi o to, że procesy MPI żyją we własnej pamięci wirtualnej; co tak naprawdę jest flaga w poniższym poleceniu? (Pomyślałem, że w MPI każda komunikacja polega na jawnym przekazywaniu wiadomości, nie ma pamięci współdzielonej między procesami).

    shell$ mpirun --mca btl self,sm,tcp -np 16 ./a.out

2. dlaczego wydajność MPI jest o wiele gorsza w porównaniu z innymi implementacjami szkieletów opracowanymi dla pamięci współdzielonej? Przynajmniej prowadzę go także na jednej maszynie wielordzeniowej. (Przypuszczam, że to dlatego, że inna implementacja używała programowania równoległego wątku, ale nie mam na to przekonującego wyjaśnienia).

wszelkie sugestie lub dalsze dyskusje są bardzo mile widziane.

Daj mi znać, jeśli muszę dalej wyjaśnić moje pytanie.

Dziękuję za Twój czas!

questionAnswers(1)

yourAnswerToTheQuestion