ich an einem Projekt arbeite, wo ich wie dieseMPI abgeleiteten Datentyp für Eigen Array
eine Klasse mit Eigen Array erstelltclass Cartesian{
public:
double x() const { return r_(0); }
double y() const { return r_(1); }
double z() const { return r_(2); }
private:
Eigen::Array3d r_;
}
Eigen::Array<Cartesian, Eigen::Dynamic, 1> Cart_Array(10);
So, jetzt will ich Cart_Array mit MPI_Send von Proc 0 bis Proc 1. Was ist die schicken beste Art es zu tun? Ich möchte einen abgeleiteten MPI-Datentyp erstellen; z.B. Cart_Type, und dann zu senden, wie
MPI_Send(&Cart_Array, 10, Cart_Type, 1, TAG, MPI_COMM_WORLD).
Ich weiß, wie MPI abgeleitete Typen für einfache Dinge zu schaffen MPI_Type_create_struct verwenden, etc. Aber ich weiß nicht, wie es für den Fall zu tun, ich zeigte. Bitte zeig es mir. Wenn möglich, möchte ich andere Bibliotheken wie Boost vermeiden.
EDITS:
fragte ich diese Frage, weil ich mit der Serialisierung Ansatz vermeiden wollte. Und das liegt daran, dass dies Teil eines großen Programms ist, das Effizienz betont.
Danke. Ich habe in meiner früheren Version des Codes tatsächlich die Serialisierung verwendet, aber es beinhaltet das Kopieren und Verschieben von Daten. Ich möchte abgeleiteten Datentyp verwenden, um zu hoffen, dass es effizienter sein könnte, da der Code, den ich zeigte, Teil eines großen High Performance Computation-Programms ist. Irgendein bestimmter Grund, warum Sie std :: vector anstelle von Eigen verwenden, außer Sie haben es nicht? – Bill
Welche Netzwerkstruktur verwenden Sie? Wenn Sie nicht auf Infiniband sind, denken Sie nicht einmal über diese Route nach. Auch wenn ich Sie wäre, würde ich den Code profilieren und herausfinden, ob Sie nicht 0,001% optimieren. Ich bezweifle sehr, dass Sie im Vergleich zur Netzwerk- und Rechenzeit einen Wert auf die Serialisierung legen können. –
Ich benutze den Code auf mehreren Plattformen, einige von ihnen verwenden Infiniband. Danke für Ihre Hilfe. – Bill