Ho chiesto questa domanda a stackoverflow e è stato suggerito un modulo più stretto da pubblicare qui.
Molti ricercatori numerici della prima infanzia affrontano la prospettiva di dover creare software per prestazioni critiche da zero. La maggior parte non è attrezzata per farlo, e il mio laboratorio non è diverso. Attualmente lavoro estendendo una sofisticata applicazione C tipica di un sacco di codice accademico: è un incubo con cui lavorare e l'aggiunta di nuove funzionalità richiede molto più tempo di quanto dovrebbe.
Voglio imparare come farlo meglio, e imparo facendo. Con questo in mente, vorrei fare un salto nel profondo e creare un'applicazione parallela (OpenMPI + forse OpenCL), combina l'interfaccia utente Python basata su script con C ++ per il sollevamento pesante e, soprattutto, fa uso di schemi di progettazione appropriati per rendere il codice il più modulare possibile. Il motivo principale per farlo è quello di apprendere i principali trucchi e alcune tecniche generali di performance che possono essere documentate e condivise in tutto il laboratorio.
Ho letto alcuni dei libri intorno a OO e pattern, ma trovo che sia difficile prendere la loro natura astratta e applicarla al dominio del problema in un modo utile.
Credo che la domanda che sto ponendo è: se ti è stato assegnato il compito di progettare questo tipo di software, quale sarebbe il focus della tua prima ora di fronte a una lavagna?