Sono abbastanza nuovo per la programmazione GPU, ma dal momento che ho un compito computazionalmente intensivo, mi sono rivolto alla GPU per ottenere possibili miglioramenti delle prestazioni.ArrayFire rispetto alla programmazione CUDA raw?
Ho provato a riscrivere il mio programma con la versione ArrayFire Free. È effettivamente più veloce della mia routine CPU con multi-threading abilitato, ma non al grado che mi aspettavo (ovvero, < 100% di accelerazione) ei risultati restituiti non sono corretti (< errore dell'1% rispetto alla routine della CPU, supponendo i risultati della routine della CPU sono corretti).
Il mio compito è principalmente element-wise float-32 operazioni matematiche su matrici di grandi dimensioni (dimensioni 300MB-500MB), con pochi casi/interruttori ecc. Immagino che il collo di bottiglia delle prestazioni sia probabilmente la larghezza di banda tra CPU e GPU memoria poiché c'è molta lettura dei dati, ecc. La GPU che ho provato è una GeForce 580GTX con 3 GB di memoria video.
C'è ancora spazio significativo per l'ottimizzazione se scrivo codice CUDA grezzo (con CUBLAS ecc. E ottimizzazione media) invece di usare ArrayFire per il mio compito? Ho letto alcune guide all'ottimizzazione NVIDIA; sembra che ci siano alcuni trucchi di accesso alla memoria per un accesso ai dati più rapido e per ridurre i conflitti bancari. ArrayFire usa questi trucchi generali automaticamente o no?
Non rispettano entrambi le specifiche IEEE? Presumo che l'utilizzo di 'Single Precision' su entrambi dovrebbe produrre lo stesso risultato. Anche in questo caso, assumere l'ordine del calcolo è lo stesso. – Royi