Attualmente sto sviluppando un metodo di decomposizione del dominio per la soluzione del problema di scattering. Fondamentalmente sto risolvendo un sistema di Helmholtz BVP in modo iterativo. Discretizzo le equazioni usando il metodo degli elementi finiti su maglie triangolari o tetraedriche. Sto sviluppando il codice per la mia tesi di dottorato. Sono a conoscenza di alcune delle librerie di elementi finiti esistenti là fuori come deal.ii o DUNE e anche se penso che siano fantastici, con design ispiratore e API, per scopi di apprendimento ho voluto sviluppare la mia piccola applicazione da zero.
Sono in un punto in cui ho le mie versioni seriali in esecuzione e ora voglio parallelizzarle. Dopotutto, è uno dei punti di forza del framework di decomposizione del dominio formulare algoritmi facili da parallelizzare, almeno in linea di principio. In pratica, tuttavia, ci sono molti dettagli da considerare. La gestione delle maglie è una di queste. Se le applicazioni devono raggiungere una risoluzione elevata scalando bene su molte CPU, la replica di un'intera mesh su ogni CPU è inefficiente.
Volevo chiedere a quegli sviluppatori che lavorano su applicazioni simili in ambienti di elaborazione ad alte prestazioni come affrontare questo problema.
Esiste una libreria p4est per la gestione di mesh distribuite. Non ho bisogno di AMR, quindi potrebbe essere eccessivo poiché mi interessa solo utilizzare mesh uniformi e non sono sicuro di poter affinare le mesh triangolari. Potrei anche semplicemente creare una mesh uniforme, quindi inserirla in uno dei partizionatori di mesh e fare un po 'di post elaborazione dell'output.
L'approccio più semplice sembra creare un file separato per ogni partizione contenente informazioni mesh relative solo a quella particolare partizione. Questo file verrebbe letto da una singola CPU che sarebbe responsabile dell'assemblaggio del sistema discreto su quella parte della mesh. Naturalmente, alcune informazioni sulla connettività / vicinato della partizione globale dovrebbero anche essere archiviate in un file letto da tutte le CPU per la comunicazione tra processi.
Quali altri approcci ci sono là fuori? Se qualcuno di voi potesse condividere, quali sono alcune delle metodologie comunemente utilizzate nel settore o istituti di ricerca governativi relativi alla gestione di questo problema? Sono abbastanza nuovo nella programmazione di un risolutore di elementi finiti parallelo e volevo avere un'idea del fatto se sto pensando a questo problema correttamente e come gli altri si stanno avvicinando. Qualsiasi consiglio o suggerimento per articoli di ricerca pertinenti sarebbe molto apprezzato!
Grazie in anticipo!