Quali sono le implementazioni più veloci disponibili di BLAS / LAPACK o altre routine di algebra lineare sui sistemi GPU?


11

nVidia, ad esempio, ha CUBLAS, che promette uno speedup 7-14x. Ingenuamente, questo non è affatto vicino al throughput teorico di una qualsiasi delle schede GPU di nVidia. Quali sono le sfide nell'accelerare l'algebra lineare sulle GPU e sono già disponibili percorsi di algebra lineare più veloci?

Risposte:


9

Non posso rispondere alla seconda metà della tua domanda per quanto riguarda le altre implementazioni là fuori, ma posso fornire alcune informazioni sulle sfide. Come riferimento, ho usato personalmente ViennaCL su una nVidia GTX 560 Ti con 2 GB di memoria per i miei benchmark.

Su un codice seriale su un i5 di fascia media, ho visto accelerazioni per moltiplicazioni di matrice densa di circa 40x. Per operazioni come una moltiplicazione scalare vettoriale ho visto accelerazioni fino a 1000x. Il gorilla da 800 libbre nella stanza, tuttavia, è la larghezza di banda della memoria. Per la maggior parte delle GPU commerciali, utilizzerai qualcosa come PCIe che ti limita a circa 6 GB / s di throughput. Nel mio caso, mentre il calcolo era 40 volte più veloce, le tre copie a matrice (due sulla GPU e una sul retro) impiegavano ognuna circa il tempo necessario per eseguire il calcolo sulla CPU.

Il problema quindi con qualsiasi libreria generale per l'algebra lineare GPU sarà che non possono davvero riutilizzare oggetti sulla GPU, perché non sanno cosa farai con loro. Quindi, ogni chiamata a un kernel di calcolo richiederà probabilmente la copia sulla GPU, quindi la copia del risultato. Ciò divorerà gran parte dei guadagni.

Se riesci a riutilizzare oggetti come le matrici, allora potresti scrivere gli algoritmi di livello superiore per evitare quanta più memoria possibile, ma una libreria sarebbe difficilmente impegnata a farlo in modo efficiente.

Spero che questo aiuti, e sono sicuro che ci sono altre persone qui che hanno molta più esperienza in questo, ma queste sono le esperienze e le impressioni che ho avuto durante la mia breve incursione nel calcolo della GPU.


3
Questo è il motivo per cui vuoi oggetti che vivono sulla GPU per un lungo periodo di tempo piuttosto che essere copiati con impazienza nella CPU. Ad esempio, le matrici e i vettori PETSc contengono un flag che indica se la CPU e / o la GPU sono correnti. Un'operazione sulla GPU contrassegna la versione della CPU come sporca e viceversa. Una copia viene eseguita in modo trasparente se si richiede la memoria in un luogo sporco, ma ciò è raro se tutti i componenti algoritmici che toccano le grandi strutture di dati possono essere eseguiti nello stesso posto.
Jed Brown,

5

Vorrei concentrarmi solo su CUDA e BLAS.

Lo speedup su un'implementazione BLAS dell'host non è una buona metrica per valutare il throughput, poiché dipende da troppi fattori, anche se sono d'accordo sul fatto che lo speedup è di solito ciò che ci interessa.

Se si guardano i benchmark pubblicati da NVIDIA e si tiene conto del fatto che Tesla M2090 ha 1331 Gigaflop (singola precisione) e 665 Gigaflop (doppia prec.), Si noterà che per SGEMM e DGEMM abbiamo un throughput misurato quasi a Il 60% di quello teorico, il che è abbastanza buono.

Ma come si definiscono le prestazioni dei flop? Conteggio flop / tempo trascorso, dove il conteggio flop è ( e sono le dimensioni della matrice) e il tempo trascorso può includere o meno il tempo di trasferimento dall'host alla memoria GPU e viceversa. (Come sottolinea correttamente Godric, questo fa una grande differenza!)2mnKm×KK×n

Per quanto riguarda il throughput continuo in virgola mobile, penso che i flop debbano essere calcolati senza tener conto dei dati e dei tempi di trasferimento dei risultati, e questo rende difficili i confronti di velocità. Inoltre, devi tenere conto delle dimensioni della matrice, poiché le migliori prestazioni sono per matrici grandi.

In conclusione: l'accelerazione di un'applicazione nella vita reale può essere molto diversa dalle prestazioni di picco misurate sulle routine di algebra lineare, poiché è necessario tenere conto dell'inizializzazione della GPU, dei tempi di trasferimento dei dati, ecc. Ecc.

Quindi non risponderò alla tua domanda sulla libreria più veloce, dal momento che la domanda non ha senso a meno che non venga definita una metrica e un problema precisi. Detto questo, penso che cuBLAS e MAGMA siano un ottimo punto di partenza.

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.