Angenommen, dass ich einen Strukturtyp haben wie folgt:MPI Verschiedene Methoden finden Verschiebungen
typedef struct {
float x, y, z;
float velocity;
int n, type;
} Particle;
Ich möchte sie senden. Ich muss einen MPI_Type erstellen. Ich kenne 4 Möglichkeiten, es zu tun. Ich habe sie unten aufgelistet. Ich möchte wissen, was die Unterschiede, Grenzen und Vorteile von ihnen sind.
MPI_Type_extent
Mit
offsetof()
instddef.h
verwenden, wurde es in dieser Antwort erklärt: MPI Derived Type Send answerMPI_Get_address
Verwendung, auch ein Beispiel in der gleichen Antwort.Mit
reinterpret_cast<const unsigned char*>
, ich habe nicht versucht, aber es ist ein Beispiel hier: MPI Create Custom Data
Während der Punkt im MPI-Standard für Zeiger gegen Adressen gültig ist, ist der Unterschied zwischen zwei Zeigern des gleichen Typs gut als Unterschied zwischen den Indizes der Elemente eines Arrays dieses Typs definiert, auf die die beiden Zeiger zeigen . Auch das ISO C++ gibt an, dass der Wert eines Zeigers die Adresse des Bytes im Speicher ist, wo der Objektspeicher startet (und diese Adresse wird bei Umwandlungen beibehalten, soweit ich den Standard verstehe), obwohl die tatsächliche Wertdarstellung eine Implementierung sein könnte -Spezifisch. Daher sollte # 4 ziemlich portabel sein. –