So che MPI_Send()
è una chiamata di blocco, che attende finché non è sicuro modificare il buffer dell'applicazione per il riutilizzo. Per fare in modo che la chiamata di invio sia sincrona (dovrebbe esserci un handshake con il ricevitore), dobbiamo usare MPI_Ssend()
. Voglio sapere la differenza tra i due. Supponiamo di dover inviare una quantità fissa di byte tra i processi, quale si suppone richieda più tempo?
Con me il codice funziona bene con la chiamata MPI_Send() ma attende indefinitamente per MPI_Send(). Quali potrebbero essere le possibili ragioni?differenza tra MPI_Send() e MPI_Send()?
E la cosa più importante è che sono abbastanza sicuro che i dati vengano ricevuti nel processo di ricezione quando si utilizza MPI_Send()
, quindi questa inferenza non porta nulla a favore dell'attesa per l'handshake quando si utilizza MPI_Ssend()
.
Oppure posso concludere: con MPI_Send()
è possibile inviare i dati all'autoprocesso ma non è possibile utilizzare MPI_Ssend()
?
E la cosa più importante è, sono abbastanza sicuro che i dati vengono ricevuti nel processo di ricezione quando si utilizza MPI_Send(), quindi questa inferenza non porta nulla a favore dell'attesa dell'handshake quando si utilizza MPI_Send(). Il mio codice funziona bene con MPI_Send() ma attende indefinitamente con MPI_Send(). pensare a tutti i possibili motivi? –
Dipenderà interamente dal codice. Se per qualche ragione il tuo codice non raggiunge la chiamata corrispondente a 'MPI_RECV' senza progressione da' MPI_SEND' per qualche motivo, ciò potrebbe causare il deadlock, ma non c'è modo di dirlo senza vedere il codice. –
http://stackoverflow.com/questions/ 17820445/openmpi-hello-world-on-cluster puoi rispondere per favore? –