Qual è la struttura sottostante delle prestazioni del codice scientifico?


11

Prendi in considerazione due computer con diverse configurazioni hardware e software. Quando si esegue esattamente lo stesso codice seriale di Navier-Stokes su ciascuna piattaforma, ci vuole xey per eseguire una iterazione per il computer 1 e 2, rispettivamente. In questo caso, , è la differenza di tempo di iterazione tra il computer 1 e il computer 2.Δ=xy

Quale potrebbe essere l'impatto sulla grandezza di ? Un ovvio candidato è la CPU, la mia domanda principale è se ci sono altri fattori che potrebbero influenzare sullo stesso ordine della differenza hardware tra le CPU?ΔΔΔ


4
Ovviamente il tuo è solo un singolo campione. Dovresti anche indagare su come dipende dalla dimensione e dalla struttura del problema. Secondo Vorrei suggerire al profilo del codice, cercando di dividere ed nella somma di diversi contributi, e l'analisi delle prestazioni di diverse porzioni del codice rispetto alla hw e sw configurazioni. Δ x yΔΔxy
Stefano M,

4
LA LINEA CACHE MISSE . Questa è la prima cosa da considerare. La memoria è il fattore di collo di bottiglia per molti algoritmi.
Cacciatore di cervi,

Risposte:


13

Questo elenco non è affatto completo, ma si spera che la dimensione possa dare un suggerimento sulla scala dei possibili fattori. Presumo che tu stia compilando il codice dalla fonte sulla tua piattaforma preferita.

Software

  • Prestazioni della libreria standard
  • Lin. Alg. Prestazioni della libreria (se il software si collega a librerie esterne)
  • Scelta del compilatore
  • Ottimizzazione del compilatore
  • Bandiere del compilatore
  • Processi in background (può variare in modo significativo se i sistemi operativi sono diversi)

Hardware

processore

  • Velocità di clock
  • Architettura (la stessa istruzione può richiedere diversi numeri di cicli su architetture diverse)
  • Dimensioni della cache
  • Latenza della cache
  • Capacità SIMD (istruzione singola, dati multipli)

Memoria

  • Numero di canali
  • Velocità

HDD

  • Velocità di lettura / scrittura (per lo più importante solo per la scrittura dei risultati, quindi dipende dalla frequenza con cui si scrive l'output su file per un solutore NS, ma potrebbe essere importante per altri programmi che eseguono operazioni come l'elaborazione delle immagini)

Tutto questo ignora i piccoli trucchi e le caratteristiche che diversi produttori includono per dare ai loro chip un vantaggio sul mercato. Il grande però è che molte librerie sparse di algebra lineare sono legate alla memoria. Fare una matrice sparsa si moltiplica coinvolge molti dati che si spostano senza molti flop effettivi.


Aggiungerei, alla CPU, sia il numero di core che le sue funzionalità SIMD.
Pedro,

@Pedro Ho lasciato i core fuori da quando la domanda diceva risolutore seriale, ma aggiungerò SIMD. Grazie.
Godric Seer,

1
@GodricSeer Ho compilato su una macchina e poi l'ho eseguito. Quindi, usando lo stesso eseguibile compilato, l'ho eseguito sulla seconda macchina. Dalla tua spiegazione sembra che sarebbe meglio ricompilare dalla fonte sul secondo computer. È così?
Oscillazione isopycnal,

1
@IsopycnalOscillation Durante la compilazione su / per una macchina specifica, è possibile utilizzare l'opzione gcc / gfortran -march=nativeo l'opzione icc / ifort -xHOSTche applicherà le ottimizzazioni specifiche dell'architettura sottostante.
Pedro,

1
Un punto chiave qui è che le prestazioni del computer non sono una quantità monodimensionale. Il bilancio relativo di tutti i fattori sopra elencati da Godric può variare enormemente, anche per i computer con chip di processore dello stesso produttore (ad es. Intel.) Di conseguenza, benchmark diversi possono mostrare rapporti di prestazione molto diversi per due processori. In pratica, la maggior parte delle macchine moderne manca seriamente della larghezza di banda della memoria per supportare i carichi di lavoro di calcolo scientifico e questo è spesso il collo di bottiglia.
Brian Borchers,

2

x/yxy

In secondo luogo, la tua domanda esclude specificamente le differenze nel software. Nella mia esperienza, i premi prestazionali per un'accurata messa a punto possono essere fattori importanti, quindi mentre stai considerando problemi hardware, non dimenticare problemi software. Dopotutto, l'hardware può eseguire solo le istruzioni che gli dai e, se lo dai meno, finirà prima.

Non per espandere troppo su questo, ma per ogni dato problema c'è un'infinità numerabile di programmi che lo risolveranno. Tra questi, alcuni richiedono meno tempo di tutti gli altri, e questo è un limite inferiore. Non dare per scontato che un programma sia vicino o addirittura vicino a questo limite inferiore se non è stato accuratamente sintonizzato.

Questo link spiega in dettaglio il metodo non ortodosso che uso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.