Programma OpenMP su diversi host

Voglio sapere se sarebbe ansible eseguire un programma OpenMP su più host. Finora ho solo sentito parlare di programmi che possono essere eseguiti su thread multipli ma tutti all’interno dello stesso computer fisico. È ansible eseguire un programma su due (o più) clienti? Non voglio usare MPI.

Sì, è ansible eseguire programmi OpenMP su un sistema distribuito, ma dubito che sia alla portata di ogni utente in giro. ScaleMP offre vSMP – un costoso software hypervisor commerciale che consente di creare una macchina virtuale NUMA su molti host in rete, quindi eseguire un normale sistema operativo (Linux o Windows) all’interno di questa VM. Richiede una veloce interconnessione di rete (es. InfiniBand) e host dedicati (poiché funziona come un hypervisor al di sotto del normale OS). Disponiamo di un cluster vSMP operativo e vengono eseguite applicazioni OpenMP non modificate, ma le prestazioni dipendono fortemente dalla gerarchia dei dati e dai modelli di accesso.

NICTA sviluppava un hypervisor SSI simile denominato vNUMA, ma anche lo sviluppo si fermò. Inoltre la loro soluzione era specifica per IA64 (IA64 è Intel Itanium, da non confondere con Intel64, che è la loro attuale generazione di CPU x86).

Intel aveva lo scopo di sviluppare Cluster OpenMP (ClOMP, da non confondersi con il progetto con lo stesso nome per portare il supporto OpenMP a Clang), ma è stato abbandonato a causa della “generale mancanza di interesse tra i clienti e di un numero inferiore di casi in cui ha mostrato un vantaggio” (da qui ). ClOMP era un’estensione Intel per OpenMP ed era incorporato nella suite del compilatore Intel, ad esempio non è ansible utilizzarlo con GCC (questa richiesta per avviare lo sviluppo di ClOMP per GCC è andata nel limbo). Se hai accesso a vecchie versioni di compilatori Intel (versioni dalla 9.1 alla 11.1), dovresti ottenere una licenza ClomP (di prova), che potrebbe essere quasi imansible dato che il prodotto è già obsoleto (le licenze di prova) hanno già scaduto. Poi di nuovo, a partire dalla versione 12.0, i compilatori Intel non supportano più ClOMP.

Esistono altri progetti di ricerca (basta cercare “memoria condivisa distribuita”), ma solo vSMP (la soluzione ScaleMP) sembra essere sufficientemente maturo per gli ambienti HPC di produzione (ed è valutato di conseguenza). Sembra che la maggior parte degli sforzi ora vadano invece nello sviluppo di linguaggi co-array (Co-Array Fortran, Unified Parallel C, ecc.). Ti suggerisco di dare un’occhiata a Berkeley UPC o di dedicare un po ‘di tempo all’apprendimento di MPI, visto che sicuramente non andrà via negli anni a venire.

Prima c’era il Cluster OpenMP .

Cluster OpenMP, era un’implementazione di OpenMP che poteva fare uso di più macchine SMP senza ricorrere a MPI. Questo avanzamento ha il vantaggio di eliminare la necessità di scrivere codice di messaggistica esplicito, oltre a non mescolare i paradigmi di programmazione. La memoria condivisa in Cluster OpenMP è stata gestita su tutte le macchine attraverso un sottosistema di memoria condivisa distribuito. Cluster OpenMP è basato sulla consistente memoria memory di OpenMP, che consente di rendere coerenti le variabili condivise solo quando assolutamente necessario. fonte

Considerazioni sulle prestazioni per Cluster OpenMP

Alcune operazioni di memoria sono molto più costose di altre. Per ottenere buone prestazioni con Cluster OpenMP, il numero di accessi alle pagine non protette deve essere il più alto ansible, in relazione al numero di accessi alle pagine protette. Ciò significa che una volta che una pagina viene aggiornata su un determinato nodo, deve essere eseguito un numero elevato di accessi prima della successiva sincronizzazione. Per fare ciò, un programma dovrebbe avere il minimo di sincronizzazione ansible e riutilizzare il più ansible i dati su una determinata pagina. Ciò si traduce nell’evitare una sincronizzazione a grana fine, come costrutti o blocchi atomici, e un’origine di dati ad alta localizzazione.