type map
Jest ważnym ale mylących koncepcja w MPI. Chciałbym, aby procedura wyświetlała lub drukowała dla mnie mapę typów.
Na przykład (wzięty ze standardu MPI-3),
MPI_TYPE_CREATE_RESIZED(MPI_INT, -3, 9, type1)
powoduje wyświetlenie mapy typu
{(lb_marker, -3), (int, 0), (ub_marker, 6)}.
Użyj tego typu ponownie:
MPI_TYPE_CONTIGUOUS(2, type1, type2)
a typ mapy to
{(lb_marker, -3), (int, 0), (int,9), (ub_marker, 15)}
Chciałbym mieć sposób na automatyczne wyświetlanie tej mapy typu.
Z pewnością można by używać MPI_Type_get_contents
i MPI_Type_get_envelope
i rekurencyjnie schodzić, aż do trafienia w typy wbudowane. To raczej ogromny ból i pomyślałbym, że będzie istnieć 20 lat na jakimś narzędziu, które zrobi to za mnie.
Niektóre narzędzia, które są obiecujące, ale nie do końca działają:
Znalazłem MPImap z ~ 2001 tutaj . Po pierwsze, musi zostać zaktualizowany dla współczesnego Tcl / TK, załatany, aby rozwiązać niektóre błędy pamięci, a potem to zrobić; otrzymujesz niereagujący GUI. Zamiast tego szukam biblioteki / procedury, do której mogę zadzwonić w czasie wykonywania.
MPIDU_Datatype_deubg
jest wewnętrzną procedurą dumpingową specyficzną dla MPICH. Nie wyświetla mapy typów (wyświetla reprezentację dataloop, ponownie zamknij)Był kiedyś debugger o nazwie XMPI, który wśród swoich funkcji wymienia możliwość wyświetlania mapy typu MPI. Ten debugger wydaje się być specyficzny dla LAM-MPI i nie używa get_contents / get_envelope.
MPI_Datatype
funkcję, szukasz funkcji, która zwraca ciąg w postaci{(type, displacement), (type, displacement), ..}
opisującej strukturę wspomnianego typu danych?Odpowiedzi:
Jak powiedział Rob Latham , nie ma dobrych, istniejących wcześniej rozwiązań. Z pomocą linków podanych przez Tima stworzyłem tę funkcję dostępną na Githubie . Wziąłem twój przykład dla testu ciągłego + zmiany rozmiaru ( tutaj ), a wynik to
Dzięki tej funkcji po prostu musisz to zrobić
printMapDatatype(mydatatype)
. Mam nadzieję, że właśnie tego szukałeś.Oto funkcja, tylko w przypadku:
źródło