Nel mio programma di dottorato in scienze computazionali, stiamo lavorando quasi esclusivamente in C ++ e Fortran. Sembra che alcuni professori preferiscano uno sullaltro. Mi chiedo quale sia “migliore” o se uno sia migliore dellaltro in una determinata circostanza.

Commenti

  • Un mix di alti e un linguaggio di basso livello è meglio che usarli esclusivamente, secondo me. Per esempio. Uso Python + C ++.
  • Le risposte a questa domanda saranno quasi puramente soggettive e quindi ‘ non sono sicuro che questa domanda sia appropriata.

Risposta

Come spesso accade, la scelta dipende da (1) il problema che stai cercando di risolvere, (2) il abilità che hai e (3) le persone con cui lavori (a meno che non sia “un progetto solista). Lascerò (3) da parte per il momento perché dipende dalla situazione individuale di ognuno.

Dipendenza dal problema: Fortran eccelle nellelaborazione di array.Se il tuo problema può essere descritto in termini di strutture dati semplici e in particolare array, Fortran è ben adattato.I programmatori di Fortran finiscono per utilizzare array anche in casi non ovvi (ad esempio per rappresentare grafici). Il C ++ è più adatto per strutture dati complesse e altamente dinamiche.

Dipendenza dalle abilità: ci vuole molta più esperienza di programmazione per scrivere buoni programmi C ++ che per scrivere buoni programmi Fortran. Se inizi con poco programma Se hai solo così tanto tempo per imparare quellaspetto del tuo lavoro, probabilmente otterrai un migliore ritorno sullinvestimento nellapprendimento di Fortran rispetto allapprendimento del C ++. Supponendo, ovviamente, che il tuo problema sia adatto a Fortran.

Tuttavia, cè di più nella programmazione oltre a Fortran e C ++. Consiglio a chiunque si dedichi alla scienza computazionale di iniziare con un livello dinamico -Livello di livello come Python. Ricorda sempre che il tuo tempo è più prezioso del tempo della CPU!

Commenti

  • ” Ricordalo sempre il tuo tempo è più prezioso del tempo della CPU! ” Come qualcuno che lavora in HPC, non sono daccordo con questa parte; tutto il resto è perfetto.
  • ” Ricorda sempre che il tuo tempo è più prezioso del tempo della CPU! ” As qualcuno che lavora nella ricerca scientifica, non potrei ‘ t essere più daccordo con quella parte.
  • ” Ricordalo sempre il tuo tempo è più prezioso del tempo della CPU! ” – ‘ vorrei aggiungere i miei 2 centesimi, utilizzando diverse centinaia di nodi, ciascuno con 10+ core per eseguire un programma per diverse settimane può essere interpretato come un orribile spreco di una risorsa preziosissima, se un paio di settimane in più potessero produrre un codice che viene eseguito in solo un paio di giorni. Questi cluster HPC sono una risorsa comune rara e costosa.
  • ” Ricorda sempre che il tuo tempo è più prezioso del tempo della CPU! “, codice per una settimana ma eseguito per un mese, questo ‘ è abbastanza normale signore!
  • ” Ricorda sempre che il tuo tempo è più prezioso del tempo della CPU! “, preferirei scrivere codice per un mese ed eseguire in una settimana! – È possibile fare di più una volta che il codice è stato scritto e anche gli altri troveranno più utile il codice che hai scritto.

Risposta

Penso che sia C ++ che Fortran siano abbastanza buoni e funzionino bene.

Tuttavia penso che Fortran sia migliore per il calcolo scientifico numerico , per algoritmi che possono essere espressi usando array e non hanno bisogno di altre strutture dati sofisticate, quindi in campi come differenze finite / elementi, solutori PDE, calcoli di strutture elettroniche. Fortran è un linguaggio specifico del dominio. In particolare penso che sia più facile scrivere velocemente in Fortran che in C ++, da uno scienziato (non necessariamente un esperto di informatica).

C ++ è un linguaggio generico, quindi si può esprimere qualsiasi algoritmo in esso, ed è decisamente migliore per algoritmi che non possono essere espressi usando array, dal campo HPC probabilmente alcuni grafici, generatori di mesh, manipolazioni simboliche e così via.

È anche possibile scrivere array y algoritmi in C ++, ma nella mia esperienza richiede molta più conoscenza dellinformatica e in generale più lavoro (es. è necessario creare o riutilizzare classi per la manipolazione di array e gestire la gestione della memoria manualmente o utilizzando alcune librerie come Teuchos di Trilinos). I non esperti tendono a scrivere programmi Fortran piuttosto buoni, ma programmi C ++ orribili (parlando della mia esperienza).

Disclaimer: Personalmente mi piace molto Fortran e lo preferisco al C ++ per il calcolo numerico. Ho trascorso più di 2 anni di programmazione quotidiana in C ++ e quasi un anno programmando quotidianamente in Fortran moderno (in unarea degli elementi finiti). Uso molto anche Python e Cython.

Commenti

  • Uno in più perché la prima risposta sia equilibrata. Penso che C ++ e Fortran non siano di gran lunga le uniche possibilità nellHPC contemporaneo. Penso che sia bene conoscere i punti di forza e di debolezza quando decidi per Fortran, C ++ o Python (o quello che preferisci). Ho visto 20.000 linee di Fortran in un unico file, coltivate organicamente in alcuni decenni. Personalmente non lo userei per qualcosa di diverso dallelaborazione di array pesanti isolati. Nemmeno per tutto ciò che riguarda loutput. Finora per un commento parziale.
  • Non potrei ‘ t essere più in disaccordo con questa risposta. Il nostro codice agli elementi finiti non sarebbe stato possibile scrivere in Fortran. In effetti, è iniziato 15 anni fa come un mix di C semplice e Fortran (questultimo è per le parti numericamente intensive del metodo), e gradualmente è passato al C puro e poi al C ++ nel corso di diversi anni. Il codice è diventato costantemente più breve, più veloce e più facile da capire ed era più capace dopo ogni iterazione. Sono daccordo con altri che sottolineano che il C ++ ti dà un sacco di corda con cui spararti. Scegli la lingua con cui ‘ ti senti più a tuo agio.
  • Bill, hai usato il Fortran moderno (90 e versioni successive?). Questo è molto importante (avrei dovuto essere più esplicito nella mia risposta su questo). Ovviamente ” 20.000 righe di Fortran ” o f77 di solito non sono migliori di un C ++ ben scritto.
  • @ OndřejČert í k: Penso che se credi che i programmi a elementi finiti moderni utilizzino ” semplice ” strutture dati, quindi ‘ non ne hai esaminate nessuna di recente. Prova a implementare elementi finiti adattivi, metodi hp o multigrid su mesh non strutturate utilizzando semplici strutture di dati. Bill è perfetto e credo di poter parlare per lui dicendo che luso del ” Fortran moderno ” avrebbe reso poco più di un piccolo differenza.
  • @WolfgangBangerth, vedi ad esempio Phaml ( math.nist.gov/phaml ) per unimplementazione Fortran di praticamente tutto ciò che hai citato.

Risposta

Sto anche “buttando i miei due centesimi in ritardo, ma io” Ho appena visto questo thread e sento che, per i posteri, ci sono alcuni punti che hanno un disperato bisogno di essere chiariti.

Notate di seguito che parlerò di C e non di C ++. Perché? Bene, altrimenti è mele e arance confrontare un vero e proprio linguaggio orientato agli oggetti tipizzato dinamicamente con qualcosa di statico come Fortran. Sì, alcune implementazioni moderne degli ultimi standard Fortran possono fare di più, ma pochissime persone in realtà usarli, e quindi quando parliamo di Fortran, pensiamo che il linguaggio sia semplice, statico e imperativo. Anche C è lì, quindi sostituirò C con C ++ per quanto segue.

Prima di tutto, qualsiasi discussione sul fatto che Fortran / C abbia compilatori migliori è discutibile. I compilatori C / Fortran dedicati appartengono al passato. Sia gcc / gfortran che icc / ifc sono solo front-end diversi per lo stesso back-end, cioè il tuo programma sarà trasformato in una descrizione astratta dal front-end e poi ottimizzato e assemblato dal back-end. Se scrivi, semanticamente, lo stesso codice in Fortran o in C, il compilatore, in entrambi i casi, produrrà lo stesso assembly che verrà eseguito altrettanto velocemente.

Questo ora porta al mio secondo punto: perché vediamo ancora diff erences? Il problema è che la maggior parte dei confronti sono fatti da programmatori Fortran che provano qualcosa in C o viceversa. Hai mai notato come la maggior parte degli autori o dei poeti preferisce scrivere nella loro lingua madre? Vorresti scrivere poesie in una lingua in cui non ti senti completamente a tuo agio oa casa? Certo che no … Io stesso considero C il mio linguaggio di programmazione “nativo”. lavorando in un gruppo che utilizzava solo Fortran, nel quale ho raggiunto un certo livello di scioltezza. Tuttavia, non scriverei mai nulla da solo in Fortran poiché sono più a mio agio con C e, di conseguenza, il codice risultante sarà migliore , qualunque cosa tu lo definisca.

Quindi la differenza principale è nel programmatore, non nella lingua. Quindi non ci sono differenze? Beh, non proprio. Ecco alcuni esempi:

  • SIMD: Che si tratti di SSE, SSE3 o AltiVec, se vuoi usarli in Fortran, faresti meglio a sperare e pregare che il compilatore indovini esattamente quello che vuoi e lo fa. Buona fortuna. In C generalmente hai funzioni intrinseche per ogni architettura, o, più recentemente, tipi di vettori SIMD generali in gcc . La maggior parte dei compilatori Fortran useranno solo le istruzioni SIMD per srotolare i cicli, ma se hai un kernel che funziona su brevi vettori di dati in un modo non ovvio, il compilatore molto probabilmente non lo vedrà.

  • Diverse architetture hardware: lintera architettura CUDA è costruita attorno ai kernel in C. Sì, il gruppo Portland ora ha un CUDA compatibile anche con il compilatore fortran , ma è commerciale e, cosa più importante, non è NVIDIA. Lo stesso vale per OpenCL, per il quale il meglio che ho trovato è un progetto recente che supporta solo poche chiamate di base.

  • Programmazione parallela: Sì, sia MPI che OpenMP funzionano perfettamente sia con C che con Fortran. Tuttavia, se vuoi un controllo reale dei tuoi thread, cioè se hai un calcolo della memoria condivisa completamente dinamico, sarai fuori al freddo con Fortran. In C hai i pthread standard che, sebbene non caldi e sfocati, ti aiuta comunque a superare la tempesta. In generale, la maggior parte dei calcoli che si basano sullaccesso al sistema operativo, ad esempio thread, processi, file system, ecc … sono meglio serviti con C. networking con Fortran.

  • Facilità duso: Fortran è più vicino a Matlab di quanto lo sia C. Dopo aver esaminato tutte le diverse parole chiave e come dichiarare le variabili, il resto del codice assomiglia a Matlab, rendendolo più accessibile agli utenti con esperienza di programmazione limitata.

  • Interoperabilità: quando si crea una struttura in C, il layout dei dati effettivi è diretto e deterministico. In Fortran, se si utilizzano array di puntatori o dati strutturati, il layout effettivo dei dati dipende fortemente dal compilatore, non avanti, e di solito completamente non documentato. Puoi chiamare C da Fortran e viceversa, ma non iniziare a pensare che potrebbe essere facile passare qualcosa di più di un array statico da uno allaltro e viceversa.

Questo è tutto un po geniale, roba di basso livello, ma stiamo parlando di High-Performance Computing, giusto? Se non sei interessato a come sfruttare al meglio lhardware sottostante paradigmi, ovvero implementazione e / o sviluppo di algoritmi ottimali per memoria condivisa / distribuita, thread, vettorizzazione SIMD , GPU che utilizzano SIMT e così via, quindi stai solo facendo matematica su un computer.

Questo è diventato molto più lungo di qualsiasi cosa io intenda, quindi ecco “un riepilogo: una serie di cose da portare a casa messaggi di sorta:

  • Scriverai il miglior codice che puoi puoi nella lingua che tu conosci meglio.
  • Non cè differenza nella qualità del codice prodotto da due compilatori che utilizzano lo stesso back-end: siamo noi che scriviamo codice errato in una lingua o in unaltra.
  • Nonostante la sensazione di un livello più basso, Fortran è unastrazione di alto livello e non ti consente di accedere direttamente a determinate funzionalità hardware / OS, ad es. SIMD, thread, networking, ecc …

Commenti

  • Buona risposta. Non ‘, tuttavia, il tuo commento finale è necessariamente vero. Io ‘ sono un programmatore C, ma puoi accedere a cose di basso livello in Fortran attraverso buone pratiche di programmazione. Il modo ideale per utilizzare cose come SIMD ops è scrivere codice che lo suggerisce fortemente (bloccando i loop, per esempio) e lasciare che il compilatore lo faccia per te. Per il threading, usa semplicemente openMP (pthreads è utilizzabile anche con un po di lavoro extra). Fortran ha tutte le cose che dici non ‘ t, ma solo a un livello importante per il suo utente tipico: numerico.
  • @ Reid.Atcheson: Bene , se blocchi tutto in modo tale che il compilatore lo rilevi, funzionerà automaticamente sia in C che in Fortran. Il problema è, però, fino a che punto vuoi fidarti del tuo compilatore? E perché vuoi fidarti di esso nei casi in cui sai esattamente cosa vuoi che venga fatto? OpenMP fa il threading, sì, ma per quanto riguarda i blocchi. Puoi indurlo a ottenere diversi pool di thread per fare cose diverse, ma questo è solo un uso improprio di OpenMP. I Pthread per Fortran sono solo wrapper per le funzioni C. Sono daccordo, tuttavia, che Fortran è più facile se ‘ non sei interessato ai dettagli.
  • Certo che non sei ‘ Otterrai unefficienza massima del 99% affidandoti al compilatore, ma puoi facilmente avvicinarti abbastanza. Oltre a questo, è necessario utilizzare intrinseci o ASM inline. Devi fare delle concessioni da qualche parte per lefficienza complessiva del programmatore, questo ‘ è il motivo per cui esistono i linguaggi di programmazione in primo luogo. Nella fase in cui sei davvero abbastanza pazzo da entrare nei dettagli degli intrinseci o ASM (ci sono stato alcune volte), Fortran non è ‘ una stampella. ‘ sapresti comunque come creare un link nel tuo codice assemblato ottimizzato a mano.
  • @ Reid.Atcheson: Beh, io ‘ d sostiene che per le applicazioni HPC parallele, potresti finire molto al di sotto del 99% di efficienza massima … E i tipi di vettore gcc rendono luso di intrinseci un non problema 🙂
  • @Pedro, Post brillante. Assolutamente brillante. Grazie mille per la pubblicazione.Lho appena trovato mentre rovistavo a caso tra thread interessanti.

Answer

Dai miei 15 anni di riflessione sul software scientifico : Se il tuo codice viene eseguito più velocemente del 25% perché lo scrivi in Fortran, ma ti ci vuole 4 volte più tempo per scriverlo (nessun STL, difficoltà nellimplementazione di strutture di dati complesse, ecc.), Fortran vince solo se spendi una frazione significativa di la tua giornata girando i pollici e aspettando che i tuoi calcoli finiscano. Dato che per quasi tutti noi la cosa più preziosa è il nostro tempo, la conclusione è questa: usa il linguaggio che ti permette di sviluppare, eseguire il debug e testare il tuo codice il più velocemente possibile, entro limiti ragionevoli ignorando che potrebbe essere più lento di quanto forse possibile se lhai scritto in Fortran.

Answer

Il mio approccio è stato quello di usare C ++ per tutto tranne che per i kernel computazionali, che di solito sono i migliori scritto in assemblea; questo ti acquista tutte le prestazioni del tradizionale approccio HPC ma ti consente di semplificare linterfaccia, ad esempio sovraccaricando i kernel computazionali come SGEMM / DGEMM / CGEMM / ZGEMM in una singola routine, ad esempio Gemm. Chiaramente il livello di astrazione può essere aumentato molto più in alto evitando puntatori grezzi e passando a classi opache, ma è un bel primo passo.

Trovo che il più grande svantaggio di C ++ sia in modo schiacciante laumento del tempo di compilazione, ma, nella mia esperienza, i risparmi nel tempo di sviluppo lo compensano più che altro. Un altro svantaggio è che i compilatori C ++ del fornitore tendono ad avere più bug rispetto ai compilatori C e Fortran del fornitore. Nellultimo anno, penso di essermi imbattuto in quasi dieci bug nei compilatori C ++.

Detto questo, penso che lannullamento dei pacchetti scientifici scritti in linguaggi di basso livello (e Fortran) sia la riluttanza a esporre interfacce convenienti per strutture dati sofisticate: la maggior parte delle persone è soddisfatta dellinterfaccia BLAS di Fortran, poiché richiede solo puntatori e dimensioni iniziali per descrivere le matrici, ma poche persone sosterrebbero che la solita interfaccia del solutore sparse-diretto Fortran a 40 interi è qualcosa di vicino a conveniente (cfr. UHM, SuperLU, PETSc e Trilinos).

In sintesi, sostengo luso di assembly per kernel computazionali di basso livello, ma linguaggi di livello superiore per tutto il resto, specialmente quando si opera su strutture di dati non banali.

Si noti che questo post ha prodotto questo confronto delle prestazioni di C e Fortran sul kernel $ y: = \ alpha x + y $ .

Commenti

  • Perché ‘ non ti fidi di un compilatore C standard con lottimizzazione appropriata abilitata allo scopo di compilare piccoli kernel? A quel livello di dimensione e complessità del codice, la differenza di ciò che un compilatore potrebbe estrarne non è chiara.
  • Ho parlato con diverse persone che mi hanno detto che, anche con un utilizzo limitato appropriato, il loro Fortran era ancora più veloce del loro codice C e / o C ++ per alcune operazioni come una trasposizione di matrice esplicita. ‘ non sto dicendo che ‘ è impossibile rendere il codice C o C ++ così veloce, ma che il compilatore Fortran tende a fare un lavoro migliore.
  • Ho la stessa esperienza con la parola chiave ” limits ” (il mio semplice codice Fortran era sempre un po più veloce). Ma la mia esperienza è limitata e semplicemente non ‘ ho tempo da investire nella comprensione dellassembly generato da gcc. Quindi uso semplicemente Fortran, ‘ è semplice e ‘ è veloce.
  • @JackPoulson: il compilatore largomento è qualcosa che sento molto dalla comunità di Fortran. Sfortunatamente, la maggior parte dei compilatori, ad es. gcc o ifc / icc, usa front-end in lingue diverse per lo stesso back-end. Il meccanismo che esegue lottimizzazione e la generazione del codice è identico e quindi le differenze nei risultati sono molto probabilmente dovute a differenze nella familiarità del programmatore con il linguaggio sottostante …
  • Giusto per dare un po di prospettiva sullaffermazione, spesso ripetuta e raramente convalidata, che Fortran è più veloce sui kernel numerici: qualche tempo fa abbiamo notato che il vettore matrice sparsa si moltiplicava in Trilinos ‘ pacchetto Epetra era del 30% più lento di quello in trattativa.II. Il primo è stato scritto in Fortran 77 semplice, il secondo in C semplice senza luso di ‘ limits ‘. Entrambi avevano circa 10-15 righe di codice. Oggi, Trilinos utilizza il pezzo di codice estratto dallaffare.II. Sono ‘ sono sicuro che si possono trovare molti casi in cui F77 è più veloce di C. Il punto è che ‘ t universalmente non più oggi.

Risposta

Dato che sono nuovo qui, stavo cercando vecchie domande e ho trovato questa. Si spera che non sia un tabù rispondere a quelli vecchi!

Dato che nessun altro lo ha menzionato, ho pensato di farlo. Fortran 2003 è quasi completamente supportato dalla maggior parte dei principali compilatori (intel, ibm, cray, NAG, PCG) anche gcc con il (presto) versione più recente 4.7. Fortran 2003 (e 2008) è un linguaggio orientato agli oggetti, anche se un po più prolisso del C ++. Una delle cose che ritengo sia simpatica di Fortran è il fatto che il comitato standard vede l informatica scientifica come il pubblico principale (ringrazio Damian Rouson per avermelo fatto notare laltro giorno).

Parlo di tutto questo non in modo che i programmatori C ++ diventino programmatori Fortran, ma in modo che le persone Fortran sappiano che ora hanno più opzioni oltre a passare a C ++ o emulare concetti orientati agli oggetti in Fortran 90/95.

Uno avvertimento che aggiungerò è che cè un costo per essere allavanguardia di ciò che è implementato nei compilatori. Se intraprendi un grande progetto in Fortran 2003 in questo momento ti imbatterai in bug e avrai bisogno di aggiornare continuamente il tuo compilatore (specialmente se usi gcc), anche se negli ultimi mesi è migliorato notevolmente!

Risposta

Il problema con C ++ è che hai numerose possibilità di rovinare le prestazioni, ad esempio usando ciecamente STL, eccezioni, classi (overhead virtuale più alignm ent problemi), sovraccarico di operatori (ridondanti nuove / cancellazioni) o modelli (compilazioni infinite ed errori criptici sembrano benigni, ma in questo modo puoi sprecare ore).

Tuttavia, più ottieni un migliore accesso alle librerie generali e possibilmente una maggiore visibilità del tuo codice (sebbene questo dipenda fortemente dal campo, e hai ancora il C puro). E puoi ancora compensare la mancanza di flessibilità di Fortran avvolgendo il suo codice in un linguaggio di script come R, Lush, Matlab / Scilab o anche Python, Ruby o Lua.

Commenti

  • Generalmente è una cattiva idea applicare tecniche di basso livello in linguaggi di alto livello. Ad esempio, lSTL è progettato per funzionare a un livello molto astratto. Bisogna essere consapevoli di cosa sia linterfaccia è progettato per, usalo per questa attività e poi allontanati dai compilatori.
  • Penso che sia mbq ‘ se Martin ‘ i punti sono ingiusti. Sì, ci sono modi per spararti ai piedi se provi a implementare un vettore numerico per scopi di algebra lineare utilizzando std :: list < double >. Ma questo ‘ è un argomento sciocco: almeno C ++ ha una classe di elenco collegato che tu può usare, mentre Fortran non ‘ t. ‘ è come dire ” Le auto guidano a una velocità così elevata che potresti sbattere contro un muro e ferirti; dovresti invece usare carrozze trainate da cavalli. ” ‘ è solo unidea sciocca cestinare una lingua di alto livello che supporta anche il basso roba di livello (ad es. C ++) per avere funzionalità di alto livello.
  • @WolfgangBangerth No, ora stai danneggiando Fortran – è come ” di basso livello ” poiché i batteri sono ” meno evoluti ” degli esseri umani . Se vuoi unanalogia con lauto, dovrebbe essere più simile a ” puoi usare sia Jeep che Lexus per attraversare una strada secondaria paludosa, ma usare la prima fa meno male “.
  • Apprezzo la tua opinione, ma ritengo che Fortran non sia ‘ evoluto come il C ++: -)

Risposta

Tre fatti:

  • N-dimensionale stile F77 array in C: nessun problema nellutilizzo del CnD (una spina spudorata, ammettiamolo)

  • F90 “sistema di moduli è mal progettato e ostile alla creazione di ambienti (il nome di un modulo non deve necessariamente corrispondere al nome del file, ad esempio)

  • Fortran non supporta bene il refactoring. Estrarre alcune funzionalità di una funzione richiede di toccare quattro posizioni: codice effettivo, dichiarazioni di variabili, dichiarazioni di argomenti ed elenco di argomenti. C se la cava con due posizioni da toccare. Questo aggrava leffetto della mancata gestione dei dati (desc ribed sotto): poiché la modularità su piccola scala è così dolorosa, quasi tutti scrivono subroutine gigantesche.

Unimpressione personale:

  • Fortran non funziona bene per la gestione dei dati. Prova a restituire un puntatore a una struttura dati opaca per lutente in F77 o F90. (transfer(), arriviamo)

Commenti

  • Ciao Andreas! CnD è interessante, ‘ non lo sapevo. Ah, lhai scritto tu. 🙂 (f90 supporta anche lo slicing, allocabile per gli array e, cosa più importante, la sintassi degli array per la moltiplicazione, laddizione e così via.) Uso CMake con Fortran e funziona alla grande con i moduli.Che cosè esattamente l ” elenco di argomenti “? Non ‘ penso di usarli, quindi sono necessari solo 3 posti per modificare. In C, in genere è necessario modificare il codice effettivo, i parametri e un file di intestazione, quindi ‘ si trova anche in 3 posizioni (sicuramente in C ++). Sì, transfer () non è ‘ super gentile, ma in genere ‘ non ne hai bisogno in pratica.
  • Il refactoring di fortran moderno è banale con IDE appropriati, come Photran in eclipse.
  • ” Il nome di un modulo ‘ ‘ non deve corrispondere al nome del file, ad esempio ” Stai scherzando, puoi avere molti moduli in un file. Alcuni di loro coprono solo un paio di righe. Sono molto più facili da creare se non devi creare un file per ciascuno di essi.
  • Volevo solo aggiungere a ciò che ha detto @ user389, mentre Photran è fantastico ed è lunico IDE Fortran che consente refactoring, il suo parser fallisce tutto il tempo. Daltra parte, ‘ non è necessario commentare il fatto che Eclipse ha fame di memoria.

Risposta

Fortran è ottimizzato per calcoli di matrice / matrice ed è un problema completo con cui lavorare per qualsiasi tipo di analisi del testo. C e C ++ potrebbero non corrispondere a Fortran nel calcolo numerico (è vicino), ma trovo molto più semplice elaborare il testo e organizzare i dati (cioè strutture dati personalizzate) con C / C ++.

As altri hanno detto di non contare i linguaggi interpretati dinamici (Python et al). Potrebbero non offrire la velocità di fusione di Fortan in anticipo, ma ti consentono di concentrarti più sulla risoluzione del tuo problema computazionale che su tutti i dettagli dellimplementazione. Spesso è possibile implementare una soluzione in Python e, se le prestazioni sono inaccettabili, eseguire un po di profiling, identificare le aree problematiche e ottimizzare il codice utilizzando Cython o reimplementare lintero programma in un linguaggio compilato. Una volta che hai sviluppato la logica di risoluzione dei problemi, il resto è solo implementazione e, con una buona comprensione dei fondamenti di calcolo, dovrebbe essere semplice da rappresentare in qualsiasi varietà di linguaggi di programmazione.

Commenti

  • Questo ‘ è giusto. Per lanalisi del testo utilizzo anche Python.
  • Puoi anche implementare parte di uno script Python in un linguaggio compilato, ad es. C ++ e collegalo. Ad es. Potenzia Python, Swig ecc.

Answer

Attualmente lavoro in uno dei laboratori nazionali. La maggior parte delle persone intorno a me sono ingegneri meccanici. Chiacchierando con alcune delle persone nei gruppi HPC, stanno facendo principalmente Linux e principalmente C ++. Il gruppo in cui mi trovo attualmente fa principalmente applicazioni desktop e usiamo Windows e in ordine decrescente: C #, FORTRAN, Python, VBA e VB (6, non .NET). Alcuni dei motori di simulazione che utilizziamo sono stati scritti in altri laboratori nazionali in FORTRAN.

Risposta

Scusa per aver scoperto un vecchio thread ma sembra che anche nel 2015 Fortran venga utilizzato molto.

Mi sono appena imbattuto in questo (alternativo link ) che fondamentalmente è un elenco di 13 codici approvati dalla struttura OCLF del DOE per funzionare sulla macchina Summit 300-petaFLOPS che sarà resa disponibile ai ricercatori nel 2018 Ho provato a trovare la lingua principale utilizzata per il codice (basandomi su una rapida ricerca su Google) ed ecco cosa ho trovato:

XGC Fortran SPECFEM Fortran ACME Fortran (Bunch of climate codes) DIRAC Fortran (Mostly) FLASH Fortran GTC Fortran HACC C/C++ LS-DALTON Fortran (some C) NAMD C/C++ NUCCOR Fortran NWCHEM Fortran QMCPACK C++ RAPTOR Fortran 

Quindi su 13 codici, almeno 10 (in base alla mia ricerca rapida) sembrano essere scritti in Fortran. Non male per una lingua di 50 anni.

NOTA: sono ben consapevole che i confronti linguistici sono inutili, ma dato il numero di persone (specialmente utenti C ++) che parlano male di Fortran, ho pensato che potrebbe valere la pena menzionarlo.

Commenti

  • Non sono daccordo, perché la mia esperienza presso i laboratori nazionali è stata semmai lopposto. La maggior parte dei nuovi progetti che vedo a Lawrence Livermore sono scritti in C ++ e la maggior parte delle nuove librerie open source allavanguardia (o gestite attivamente) in solutori ODE, discretizzazioni FEM e librerie di calcolo scientifico generico sembrano essere in C o C ++. Fortran sembra essere utilizzato principalmente in progetti che utilizzano librerie esistenti / legacy; Non ‘ t vedo molti nuovi grandi progetti utilizzando Fortran, indipendentemente da quello che penso del linguaggio.
  • Alcuni codici della teoria del funzionale della densità scritti anche in Fortran include VASP e CASTEP , anche se, come sottolinea @GeoffOxberry, nuovo tendono forse al C ++.
  • @blochwave Come puoi leggere nel link, i progetti sono per una nuova macchina (con acceleratori ecc.) che sarà online nel 2018.Quindi non è come se prendessero un codice di 25 anni e lo compilassero, sperando di funzionare con buone prestazioni. Sono abbastanza sicuro che gran parte dei codici nellelenco sopra sono stati riscritti o sono stati riscritti, come nel nuovo codice. Un certo numero di ” nuovi ” codici climatici sono presenti anche in Fortran e utilizzati da molte agenzie in diversi paesi.

Risposta

Quello che Jack P. penso stia cercando di dire è che dovresti mescolare e abbinare. Un buon pezzo di software è accuratamente stratificato. Livelli diversi possono mappare in modo più naturale o efficiente a lingue diverse. Dovresti scegliere la lingua più appropriata per ogni livello. Dovresti anche capire come le lingue possono interagire, il che può influenzare la lingua scelta per quale livello.

Una domanda migliore è quali esempi di software progettato in modo eccellente sono là fuori che vale la pena studiare per imparare a progettare software a più livelli.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *