2016-04-04 27 views
0

Ich habe MPICH für Android kompiliert und konfiguriert. Es funktioniert gut, wenn ich einen einzigen Prozess erzeugen alsmpiexec löst Fehler "mkstemp fehlgeschlagen Keine solche Datei oder Verzeichnis"

$./mpiexec -n 1 -launcher=fork ./mpi_hello_world        
Hello world from processor zero, rank 0 out of 1 processors 

folgt jedoch das Android-System mit folgenden Fehler reagiert, wenn der Parameter „n“ größer als 1 ist wie folgt:

$./mpiexec -n 2 -launcher=fork ./mpi_hello_world           
Fatal error in MPI_Init: Other MPI error, error stack: 
MPIR_Init_thread(474).................: 
MPID_Init(190)........................: channel initialization failed 
MPIDI_CH3_Init(89)....................: 
MPID_nem_init(272)....................: 
MPIDI_CH3I_Seg_commit(327)............: 
MPIU_SHMW_Seg_create_and_attach(897)..: 
MPIU_SHMW_Seg_create_attach_templ(610): mkstemp failed No such file or directory 

Es kann etwas sein im Zusammenhang mit dem Namen der Temp-Datei auf Android erstellt wird? Bitte helfen Sie.

+1

Ich bin nicht sicher, was das Problem oder die Lösung hier ist, aber ich muss sagen, dass die Kreuzung der MPI-Entwickler und Android-Entwickler an dieser Stelle wahrscheinlich nur Sie, also müssen Sie genug zu graben Erfahren Sie mehr darüber, was MPICH versucht, damit Android-Leute Ihnen helfen können. Obwohl, ein erster Stich wäre, dass es kein Programm namens mkstemp in der Android-Installation gibt, die Sie verwenden. Sie müssen möglicherweise einen Pfad hinzufügen oder eine Alternative herausfinden. –

+0

Wenn Sie MPICH ohne Unterstützung für gemeinsamen Speicher erstellen, sollte die 'mkstemp'-Funktion nicht benötigt werden. Fügen Sie Ihrer Konfigurationszeile '--with-device = ch3: sock' hinzu. In diesem Build verlieren Sie jedoch die Leistung für Übertragungen innerhalb von Knoten. – kraffenetti

+0

@kraffenetti, Danke für den Kommentar, ich benutze bereits --with-device = ch3: sock option. –

Antwort

0

Das Problem ist, dass auf Android-Dateisystem haben Sie nicht/tmp und/dev/shm Verzeichnisse, die zum Erstellen temporärer Dateien für Shared-Memory-Kommunikation sind. Aus diesem Grund wird mkstemp() fehlschlagen. mkdir sie, während Sie su sind, richten Sie die Berechtigungen und ch3: Nemesis wird funktionieren.