Ich habe viele ähnliche Themen hier gesehen, aber das Problem mit mir ist, dass mein Programm tatsächlich für verschiedene Einstellungen läuft.MPI Fehler: (Segmentierungsfehler: 11)
Zum Beispiel: wenn meine Matrix 1024x1024
für 2 Kern: Fehler 11
für 4, 8, 16 usw. funktioniert.
Matrix 2048x2048
:
Für Kerneinsetzvorgang: Fehler 11.
Ich verstehe nicht, warum dies geschieht, wird jeder Prozess eine 2048/(Gesamtprozess) X 2028 Matrix nehmen zu berechnen. Und es sollte richtig funktionieren. Diese
ist, wie ich meine Matrix erklären:
int temp[wp][hp];
Für erhalten:
rc = MPI_Recv(&temp[0][0], wp*hp, MPI_INT, i, tag, MPI_COMM_WORLD, &status);
Und senden:
rc = MPI_Send(&temp[0][0], wp*hp, MPI_INT, 0, tag, MPI_COMM_WORLD);
ich es nicht, sollte es sein Arbeiten. Denkst du, es ist vielleicht ein Speicherproblem und nicht pointerbezogen?
C und C++ sind zwei verschiedene Sprachen. Wenn 'wp' und/oder' hp' Variablen sind, ist dies: 'int temp [wp] [hp];' ist nicht zulässig C++. – PaulMcKenzie
Auch, 2048 * 2048 * sizeof (int) '- Betrachten Sie, was das entspricht, und ob Ihr Array lokal oder global deklariert wird. Wenn es lokal ist. Sie können den Stapel ausblasen. – PaulMcKenzie
@PaulMcKenzie Es ist C, Sie haben Recht. Ich bin mir nicht ganz sicher, was Sie global oder lokal meinen. '' temp''Es ist in main() deklariert und für jeden Prozess zugänglich; Diese Matrix sollte 256x2048 sein, wenn wir 8 Prozesse hatten. Die letzte Matrix heißt "im" und es ist 2048x2048, auch für jeden Prozess zugänglich, aber tatsächlich wird nur der Master-Prozess es am Ende verwenden. –