Das type map
ist ein wichtiges, aber verwirrendes Konzept im MPI. Ich möchte, dass eine Routine eine Typenkarte für mich anzeigt oder druckt.
Zum Beispiel (entnommen aus dem MPI-3-Standard),
MPI_TYPE_CREATE_RESIZED(MPI_INT, -3, 9, type1)
führt zur Typkarte
{(lb_marker, -3), (int, 0), (ub_marker, 6)}.
Verwenden Sie diesen Typ erneut:
MPI_TYPE_CONTIGUOUS(2, type1, type2)
und die Typkarte ist
{(lb_marker, -3), (int, 0), (int,9), (ub_marker, 15)}
Ich möchte eine Möglichkeit, diese Typkarte automatisch anzuzeigen.
Sicherlich könnte man verwenden MPI_Type_get_contents
und MPI_Type_get_envelope
rekursiv absteigen, bis man die eingebauten Typen trifft. Dies ist eher ein großer Schmerz und ich hätte gedacht, dass 20 Jahre auf einem Werkzeug existieren würden, um dies für mich zu tun.
Einige Tools, die vielversprechend sind, aber nicht ganz funktionieren:
Ich hatte MPImap von ~ 2001 hier gefunden . Erstens muss es für moderne Tcl / TK aktualisiert, gepatcht werden, um einige Speicherfehler zu beheben, und danach; Sie erhalten eine nicht reagierende Benutzeroberfläche. Stattdessen suche ich nach einer Bibliothek / Routine, die ich zur Laufzeit aufrufen kann.
MPIDU_Datatype_deubg
ist eine MPICH-spezifische interne Typ-Dumping-Routine. Die Typzuordnung wird nicht angezeigt (es wird die Datenschleifendarstellung angezeigt, wieder geschlossen).Es gab einmal einen Debugger namens XMPI, der unter seinen Funktionen die Möglichkeit auflistet, eine MPI-Typzuordnung anzuzeigen. Dieser Debugger scheint LAM-MPI-spezifisch zu sein und verwendet get_contents / get_envelope nicht.
MPI_Datatype
Funktion suchen Sie eine Funktion, die eine Zeichenfolge des Formulars zurückgibt{(type, displacement), (type, displacement), ..}
, das die Struktur dieses Datentyps beschreibt?Antworten:
Wie Rob Latham sagte, gibt es keine guten Lösungen. Mit Hilfe der von tim gegebenen Links habe ich diese auf Github verfügbare Funktion erstellt . Ich habe Ihr Beispiel für den zusammenhängenden + Größenänderungstest ( hier ) genommen und die Ausgabe ist
Mit dieser Funktion müssen Sie nur noch tun
printMapDatatype(mydatatype)
. Ich hoffe, das war es, wonach Sie gesucht haben.Hier ist die Funktion, nur für den Fall von:
quelle