Ich bin neu in MPI-Programmierung! Ich versuchte, die Punkt-zu-Punkt-Kommunikationsbandbreite zwischen Prozessoren für praktische zu messen. Aber jetzt bekomme ich eine Segmentation Fault! Ich verstehe nicht, warum das passiert. Ich habe auch Valgrind auf Ubuntu versucht, aber keine Ahnung. Vielleicht kann mir jemand helfen: DMPI Segmentierungsfehler in MPI_Isend()
Dank für die schnelle Antwort, aber das ändert sich nicht das Problem :( ich gerade aktualisiert den Fehler
hier den Quellcode
#include "mpi.h"
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
int myrank, size;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
int *arraySend = (int *)malloc(25000*sizeof(int));
int *arrayRecv = (int *)malloc(25000*sizeof(int));
double startTime = 0.0, endTime = 0.0;
MPI_Status status,statusSend, statusRecv;
MPI_Request requestSend, requestRecv;
if(size != 2){
if(myrank == 0){
printf("only two processors!\n");
MPI_Finalize();
return 0;
}
}
if(myrank == 0){
startTime = MPI_Wtime();
MPI_Send(&arraySend, 25000, MPI_INT, 1, 0,MPI_COMM_WORLD);
}else{
MPI_Recv(&arrayRecv, 25000, MPI_INT, 0, 0, MPI_COMM_WORLD, &status);
}
if(myrank == 0){
endTime = MPI_Wtime();
printf("100k Bytes blocking: %f Mb/s\n", 0.1/(endTime-startTime));
startTime = MPI_Wtime();
MPI_Isend(&arraySend, 25000, MPI_INT, 1, 0, MPI_COMM_WORLD, &requestSend);
MPI_Wait(&requestSend, &statusSend);
}else{
MPI_Irecv(&arrayRecv,25000,MPI_INT,0,0,MPI_COMM_WORLD, &requestRecv);
MPI_Wait(&requestRecv, &statusRecv);
}
if(myrank == 0){
endTime = MPI_Wtime();
printf("100k Bytes non-blocking: %f Mb/s\n", 0.1/(endTime-startTime));
}
free(arraySend);
free(arrayRecv);
MPI_Finalize();
return 0;
}
und hier der Fehler aktualisiert!
$ mpirun -np 2 nr2
[P90:05046] *** Process received signal ***
[P90:05046] Signal: Segmentation fault (11)
[P90:05046] Signal code: Address not mapped (1)
[P90:05046] Failing at address: 0x7fff54fd8000
[P90:05046] [ 0] /lib/x86_64-linux-gnu/libpthread.so.0(+0x10060) [0x7f8474777060]
[P90:05046] [ 1] /lib/x86_64-linux-gnu/libc.so.6(+0x131b99) [0x7f84744f7b99]
[P90:05046] [ 2] /usr/lib/libmpi.so.0(ompi_convertor_pack+0x14d) [0x7f84749c75dd]
[P90:05046] [ 3] /usr/lib/openmpi/lib/openmpi/mca_btl_sm.so(+0x1de8) [0x7f846fe14de8]
[P90:05046] [ 4] /usr/lib/openmpi/lib/openmpi/mca_pml_ob1.so(+0xd97e) [0x7f8470c6c97e]
[P90:05046] [ 5] /usr/lib/openmpi/lib/openmpi/mca_pml_ob1.so(+0x8900) [0x7f8470c67900]
[P90:05046] [ 6] /usr/lib/openmpi/lib/openmpi/mca_btl_sm.so(+0x4188) [0x7f846fe17188]
[P90:05046] [ 7] /usr/lib/libopen-pal.so.0(opal_progress+0x5b) [0x7f8473f330db]
[P90:05046] [ 8] /usr/lib/openmpi/lib/openmpi/mca_pml_ob1.so(+0x6fd5) [0x7f8470c65fd5]
[P90:05046] [ 9] /usr/lib/libmpi.so.0(PMPI_Send+0x195) [0x7f84749e1805]
[P90:05046] [10] nr2(main+0xe1) [0x400c55]
[P90:05046] [11] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed) [0x7f84743e730d]
[P90:05046] [12] nr2() [0x400ab9]
[P90:05046] *** End of error message ***
--------------------------------------------------------------------------
mpirun noticed that process rank 0 with PID 5046 on node P90 exited on signal 11
(Segmentation fault).
Haben Sie einen Unterschied in der Geschwindigkeit zwischen den Sperroperationen und der Kombination von nicht-blockierenden Operationen gefolgt imeddiately durch ein wartet? –