Ich schreibe gerade eine Simulation mit boost :: mpi auf openMPI und alles funktioniert super. Sobald ich jedoch das System vergrößert habe und daher größere std :: Vektoren senden muss, bekomme ich Fehler.Gibt es eine Grenze für die Nachrichtengröße in MPI mit boost :: mpi?
#include <boost/mpi.hpp>
#include <boost/mpi/environment.hpp>
#include <boost/mpi/communicator.hpp>
#include <boost/serialization/vector.hpp>
#include <iostream>
#include <vector>
namespace mpi = boost::mpi;
int main() {
mpi::environment env;
mpi::communicator world;
std::vector<char> a;
std::vector<char> b;
if (world.rank() == 0) {
for (size_t i = 1; i < 1E10; i *= 2) {
a.resize(i);
std::cout << "a " << a.size();
world.isend(0, 0, a);
world.recv(0, 0, b);
std::cout << "\tB " << b.size() << std::endl;
}
}
return 0;
}
druckt:
Ich habe das Problem auf das folgende Problem reduziert
a 1 B 1
a 2 B 2
a 4 B 4
....
a 16384 B 16384
a 32768 B 32768
a 65536 B 65536
a 131072 B 0
a 262144 B 0
a 524288 B 0
a 1048576 B 0
a 2097152 B 0
Ich bin mir bewusst, dass es eine Grenze zu einer Größe mpi Nachricht ist, aber 65kB scheint ein bisschen tief zu mir. Gibt es eine Möglichkeit, größere Nachrichten zu senden?
Nach [diese] (http://stackoverflow.com/questions/13558861/maximale Datenmenge, die gesendet werden kann, wenn Sie -misend verwenden) Sie sollten nicht einmal in der Nähe des Maximums sein. Nachrichtengröße. Keine Ahnung, was hier schief läuft. –
Was passiert, wenn Sie 'isend' in' send' ändern? Es kann sein, dass das nicht blockierende Senden ein Problem verursacht. – NathanOliver
@NathanOliver: Wenn ich das zu sendende Isend ändere, stoppt es einfach (Blöcke) nach dem Schreiben der Zeile a 65536 B 65536. – tik