Che cosa è un'applicazione con vincoli di latenza e legata alla memoria in HPC?

4

Comprendo che nei sistemi ibridi HPC, ad esempio un'architettura MIC, l'accesso alla memoria principale è molto più lento dell'accesso ai dati nella propria cache o nella cache di un altro core.

Ho letto che l'architettura HPC MIC funziona meglio con i programmi con accesso alla memoria in streaming o accesso alla memoria trascurabile.

Quando diciamo che il programma w è legato alla latenza o legato alla memoria? Qual è la differenza? Esistono alcune architetture HPC che sono ottimali per questo tipo di programmi?

    
posta octoback 24.07.2015 - 14:51
fonte

2 risposte

3

Un'applicazione si chiama legata alla memoria se richiede molti dati dalla memoria, quindi la maggior parte del tempo di esecuzione è impiegata per leggere e scrivere dati.

associato alla latenza può essere pensato come un sottoinsieme della categoria legata alla memoria e si verifica principalmente quando non si recuperano troppi dati dalla memoria contemporaneamente, ma si deve attendere molto per ottenere i dati vicino al processore, nei livelli superiori della gerarchia di memoria.

Di solito gli sviluppatori nascondono questa latenza tramite tecniche come pipeline software e prefetching e per organizzare le istruzioni e le operazioni delle applicazioni in modo che il processore non resti inattivo in attesa di dati.

Non so se ci sia un'architettura specifica per affrontare le applicazioni legate alla memoria, ma conosco tecniche come quelle menzionate prima e che l'industria informatica sta cercando di colmare il divario tra la memoria e le prestazioni del processore avvicinando i dati al calcolo (SoC) o sviluppo di co-processori che possono eseguire in modo più autonomo dall'host (e dalla sua memoria).

C'è una discussione simile in questo thread StackOverflow . Inoltre, puoi dare un'occhiata a diversi articoli come questo .

    
risposta data 24.07.2015 - 17:05
fonte
0

Ad esempio, l'aritmetica a virgola mobile ha spesso un throughput elevato, ma anche una latenza elevata. Ad esempio, potresti essere in grado di avviare due moltiplicazioni ogni ciclo, ma potrebbero essere necessari cinque cicli fino a quando il risultato di una moltiplicazione è disponibile. Il primo è chiamato throughput (due per ciclo), il secondo è latenza.

Se si eseguono i calcoli in modo che un'operazione dipenda dalla precedente, è possibile che si verifichi un limite di latenza. Supponi di calcolare (x0 + y0) * (x1 + y1) * (x2 + y2) * ... Se fai questo in modo ingenuo, ogni moltiplicazione può iniziare solo 5 cicli dopo il precedente, quindi finisci con 0,2 moltiplicazioni e 0,2 aggiunte per ciclo anche se il processore potrebbe fare molto più lavoro per ciclo. Questo è il codice che è legato alla latenza.

L'hyperthreading è molto utile per il codice rilegato a latenza, perché è molto semplice per il processore gestire due thread con latenza alla stessa velocità di uno. Se il tuo codice è limitato dal throughput, l'hyper-threading non aiuta un bit. In pratica, peggiore è il codice, maggiore è l'aiuto derivante dall'hyper threading.

    
risposta data 25.07.2015 - 01:22
fonte

Leggi altre domande sui tag