Wie kompilieren und ausführen C-Programm, sowohl mit MPI und OpenMP auf Windows
Ich habe ein Programm auf C, die beide MPI und OpenMP. Um zu kompilieren, dieses Programm auf Windows-system habe ich heruntergeladen und installiert gcc-compiler zur Verfügung gestellt, die von MinGW. Mit diesem compiler kann ich kompilieren und ausführen von C-Programmen mit OpenMP mit der Taste -fopenmp
für den gcc. Solche Programme laufen ohne Probleme. Um kompilieren und ausführen von C-Programmen mit MPI habe ich heruntergeladen und installiert MPICH2. Jetzt kann ich kompilieren und ausführen von Programmen ohne Probleme, die Angabe zusätzlicher Parameter für den gcc von MinGW. Aber wenn ich kompilieren wollen und ein Programm ausführen, verwendet sowohl OpenMP und MPI habe ich ein problem. Ich angegeben beide Tasten -fopenmp
und Tasten MPI-Programm für den gcc-compiler. Compilator nicht mir irgendwelche Fehler. Ich habe versucht zu starten, mein Programm mpiexec
von MPICH2. Mein Programm wollte nicht arbeiten (Es war ein "HelloWorld" - Programm und es wird nicht alles gedruckt ausgegeben). Bitte helfen Sie mir, kompilieren und starten Sie solche Programme korrekt.
Hier ist mein HelloWorld-Programm, das produziert keine Ausgabe.
#include <stdio.h>
#include <mpi.h>
int main(int argc, char ** argv)
{
int thnum, thtotal;
int pid, np;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&pid);
MPI_Comm_size(MPI_COMM_WORLD,&np);
printf("Sequental %d out of %d!\n",pid,np);
MPI_Barrier(MPI_COMM_WORLD);
#pragma omp parallel private(thnum,thtotal)
{
thnum = omp_get_thread_num();
thtotal = omp_get_num_threads();
printf("parallel: %d out of %d from proc %d out of %d\n",thnum,thtotal,pid,np);
}
MPI_Barrier(MPI_COMM_WORLD);
MPI_Finalize();
return 0;
}
- Können Sie ein MPI-Programm zu arbeiten (ohne OpenMP)? Was sind die genauen Schritte, die Sie ergreifen, um das Programm erstellen und ausführen?
- MPI-Programm funktioniert gut. Zum erstellen und ausführen von MPI-Programm ich benutze: gcc -c -o main.o-main.c-I"C:\...\MPHICH2\include"; gcc -o main.exe main.o -L"C:\...\MPICH2\lib" -lmpi; mpiexec -n 4 main.exe
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die
mpicc
compiler mit der -openmp
option. Zum Beispiel,Könnte dies nicht die Ursache des Problems ist, aber die MPI-standard Mandate, die threaded-Programme verwenden
MPI_Init_thread()
stattMPI_Init()
. In Ihrem Fall gibt es keine MPI-Aufrufe innerhalb der parallelen region so threading Ebene derMPI_THREAD_FUNNELED
sollte ausreichen. Sie sollten ersetzen Sie den AufrufMPI_Init()
mit:Obwohl einige MPI-Bibliotheken möglicherweise nicht werben threading-Unterstützung (
provided
zurückgegeben wirdMPI_THREAD_SINGLE
) Sie funktionieren immer noch einwandfrei mit hybride OpenMP/MPI-codes, wenn man nicht machen MPI-Aufrufe innerhalb von parallelen Regionen.MPI_Init
durch Ihren code. Der im inneren Abschnitt derif
ist nicht erreicht, wenn ich kompilieren, ohne-fopenmp
- Taste. Aber, wenn ich kompiliere mein Programm identisch zu dem Fall des MPI-nur Programm, sondern mit-fopenmp
Schlüssel habe ich erhalten, dass ein Programm produziert keine Ausgabe wieder.Die OpenMP - - Teil der Programm erfordert möglicherweise
#include <omp.h>
: