// hallo_welt.cc // // Hallo-Welt-Programm #include #include #include #include "mpi.h" using namespace std; int main(void) { MPI::Init(); // initialisiere MPI int rank=MPI::COMM_WORLD.Get_rank(); // eigenen Rang und int size=MPI::COMM_WORLD.Get_size(); // Zahl der Prozesse ermitteln const int max_proc_name_length=MPI::MAX_PROCESSOR_NAME+1; int proc_name_length; char *proc_name=new char[max_proc_name_length]; if (proc_name==NULL) // nicht genug Speicher => alle Prozesse beenden MPI::COMM_WORLD.Abort(EXIT_FAILURE); MPI::Get_processor_name(proc_name, proc_name_length); // welcher Hostname? proc_name[proc_name_length+1]='\0'; if (rank==0) { // Rang 0 ist ausgezeichnet ofstream out("hallo_welt.out"); // Ausgabefile anlege if (!out) // Fehlschlag => Prozesse beenden MPI::COMM_WORLD.Abort(EXIT_FAILURE); // Statusmeldungen der anderen Raenge empfangen und in Datei schreiben for (int i=0; i0) MPI::COMM_WORLD.Recv(proc_name, max_proc_name_length, MPI::CHAR, i, 0); out << "Hallo Welt! Mein Rang ist " << i << " von " << size << ". " << "Ich laufe auf " << proc_name << "." << endl; } } else // String senden MPI::COMM_WORLD.Send(proc_name, proc_name_length+1, MPI::CHAR, 0, 0); MPI::Finalize(); // beende MPI return EXIT_SUCCESS; }