Progettazione software scientifica [chiusa]

2

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?

    
posta BrT 21.12.2012 - 18:44
fonte

1 risposta

5

In un'ora su una lavagna, mi concentrerei su quanto segue:

  1. Requisiti: cosa fa il sistema? Chi lo utilizzerà? Quali sono le loro aspettative minime? Con una base di codice esistente potresti avere un vantaggio su questo, quindi se roba di alto livello come quella è già noto, immagino che per il software scientifico puoi concentrare l'attenzione su dati : quali sono gli input? Che tipo di pre-elaborazione / pulizia hanno bisogno? Allora quali sono i principali processi / trasformazioni che il sistema fa (pensate a flussi di lavoro e flussi di dati qui)? Quali sono le uscite che contano? Come dovrebbero essere formattati e / o presentati agli utenti?

  2. Architettura: non è necessario nulla di speciale, solo caselle di funzionalità correlate , ad es. una semplice struttura a 3 blocchi di Input - > Elaborazione - > Le uscite possono sembrare troppo ingenue, ma puoi costruire una discussione da lì con i colleghi e iniziare a scoppiare i pezzi, ad es. Input - > serie temporali, parametri, vettori rispetto a scalari; Elaborazione - > cos'è seriale e cosa è potenzialmente parallelo? quali modelli sono necessari ?; Output - > grafici / grafici? discariche CSV? Il punto è separare e modularizzare a questo livello quando è economico e facile farlo, prima di molto tempo di sprecare / energia nel codice.

Sospetto che quanto sopra possa facilmente consumare diverse ore. :) Inoltre, per il codice scientifico che è incentrato sui dati, OO potrebbe essere o non essere una buona idea. Non utilizzare "schemi di progettazione" per il loro stesso interesse, molti di questi modelli sono complicati per la debolezza delle lingue che non hanno funzioni di ordine superiore. Spero che questo aiuti.

    
risposta data 21.12.2012 - 19:24
fonte

Leggi altre domande sui tag