Ho un po 'di domande relative alla ricerca.cosa significa configurare MPI per la memoria condivisa?
Attualmente ho terminato l'implementazione del lavoro di struttura scheletro struttura basato su MPI (in particolare utilizzando openmpi 6.3). il lavoro del telaio dovrebbe essere usato su una singola macchina. ora, mi sto confrontando con altre implementazioni scheletro precedenti (come scandium, fast-flow, ..)
Una cosa che ho notato è che la prestazione della mia implementazione non è buono come le altre implementazioni. Penso che questo sia dovuto al fatto che la mia implementazione è basata su MPI (quindi una comunicazione su due lati che richiede la corrispondenza tra invio e ricezione) mentre le altre implementazioni con cui sto confrontando si basano sulla memoria condivisa. (... ma ancora non ho una buona spiegazione per ragionare, ed è parte della mia domanda)
Ci sono alcune grandi differenze nei tempi di completamento delle due categorie.
Oggi sto anche introdotto per la configurazione di open-MPI per la memoria condivisa qui =>openmpi-sm
e ci vengo arriva la mia domanda.
1st cosa significa configurare MPI per la memoria condivisa? Intendo mentre i processi MPI vivono nella loro memoria virtuale; che cosa è veramente la bandiera come nel seguente comando? (Ho pensato che in MPI ogni comunicazione passasse esplicitamente un messaggio, nessuna memoria è condivisa tra i processi).
shell$ mpirun --mca btl self,sm,tcp -np 16 ./a.out
secondo perché è la performance del MPI è molto peggio con rispetto ad altre implementazioni scheletro sviluppato per la memoria condivisa? Almeno lo sto eseguendo anche su una singola macchina multi-core. (Suppongo che sia perché l'altra implementazione ha usato la programmazione parallela dei thread, ma non ho una spiegazione convincente per quello).
qualsiasi suggerimento o ulteriore discussione è molto gradito.
Per favore fatemi sapere se devo chiarire ulteriormente la mia domanda.
grazie per il vostro tempo!
FWIW, come di Linux 3.2, ci sono le sbrigie process_vm_readv/writev, che hanno approssimativamente lo stesso di KNEM. Vedi per es. http://man7.org/linux/man-pages/man2/process_vm_readv.2.html – janneb
@janneb, grazie per averlo indicato, ma i kernel 3.x non sono molto popolari con la maggior parte dei sistemi di produzione HPC ora. Tuttavia, KNEM fornisce molto più di semplici trasferimenti di dati, ad es. operazioni asincrone, notifiche di completamento, ecc. –
Questo è vero, ma anche in questo caso, nemmeno i kernel hanno la patch KNEM. – janneb