Jaka jest semantyka Bcast, gdy liczba procesów podczas tego wywołania jest inna niż liczba procesów odradzanych na początku obliczenia?
Muszę poradzić sobie z sytuacją, w której użytkownik określa zbyt wiele procesów, które są niezbędne do wykonania obliczeń. Na przykład, użytkownik może zdecydować się na odrodzenie 16 procesów za pomocą mpirun
, kiedy potrzebuję tylko 12, aby podzielić problem między procesy. Poradzę sobie z tą sytuacją porównując PID do 12 i kończenie procesów za pomocą MPI_Finalize, gdy PID jest zbyt wysoki. Myślę, że powoduje to zakleszczenie w mojej aplikacji, ponieważ Bcast chce wysłać do wszystkich procesów?
Jak sobie z tym poradzić? Czy powinienem po prostu wywoływać Bcast we wszystkich procesach, ale po prostu zignorować dane wyjściowe w niektórych?
2 odpowiedzi
Biorąc pod uwagę, że otrzymujemy, co można uznać za nieprawidłowe dane wejściowe od użytkownika, czy naprawdę musimy kontynuować wykonywanie programu po uświadomieniu sobie tego? Czy nie lepiej wyświetlać użytkownikowi komunikat o błędzie informujący, że zażądano nieprawidłowej liczby procesów, a także informujący użytkownika o dozwolonym interwale (np. „Zażądano 16 procesów, jednak maksymalna liczba procesów to 12 , program zostanie teraz zamknięty").
W przeciwnym razie, jeśli nie jest to możliwe w Twojej sytuacji, rozdział 6 „Grupy, konteksty, komunikatory i buforowanie” i/lub rozdział 10 „Tworzenie i zarządzanie procesami” na stronie Dokumentacja MPI 2.2 może być pomocna. Prawdopodobnie istnieje inna, łatwiejsza do odczytania dokumentacja dostępna gdzieś indziej, ale przynajmniej to początek.
Podczas uruchamiania programu każdy proces powinien przyjrzeć się swojej randze (od MPI_Comm_rank
), całkowitej liczbie procesów (od MPI_Comm_size(MPI_COMM_WORLD)
) oraz liczbie, której faktycznie potrzebuje obliczenia. Niech rangi poniżej numeru, którego potrzebujesz, utworzy nowy komunikator, którego będziesz faktycznie używać do swojej pracy, a wszystkie pozostałe stopnie po prostu zadzwoń do MPI_Finalize
.
Podobne pytania
Nowe pytania
concurrency
W informatyce współbieżność jest właściwością systemów, w których można wykonywać wiele obliczeń w nakładających się okresach czasu. Obliczenia mogą być wykonywane na wielu rdzeniach w tym samym chipie, wątkach z wyprzedzeniem współdzielonych w czasie na tym samym procesorze lub wykonywane na fizycznie oddzielonych procesorach.