2009-10-18 12 views
8

Vari demo CUDA nell'SDK CUDA si riferiscono a "scrittura dispersa". Che cos'è questa scrittura sparsa e perché è così grande? In contrasto con che cosa sta in piedi?CUDA: cos'è la scrittura dispersa?

risposta

5

Ho intenzione di usare la terminologia CUDA qui.

scattered write significa che si sta scrivendo da ogni thread di cuda a un indirizzo arbitrario (ad esempio, i fili del proprio ordito non scriveranno nella memoria consecutiva, ad es.). Contrasta con le scritture frame-buffer, che sono coerenti con 2d e possono essere coalizzate dall'hardware. Quelle erano le uniche scritture disponibili per le GPU fino a non molto tempo fa.

Sono l'operazione opposta di un gather read, che legge i dati dalla posizione sparsa e li raccoglie tutti prima che i thread vengano eseguiti in modo SIMD sui dati raccolti. Tuttavia, le letture raccolte sono state a lungo disponibili sulle GPU attraverso fasci di texture arbitrarie.

5

La scrittura sparsa è ottima perché consente di scrivere su qualsiasi indirizzo di memoria. Le precedenti imperfezioni dello shader erano solitamente limitate negli indirizzi di memoria a cui un dato programma shader poteva scrivere.

"Mentre i programmi di frammenti nelle API grafiche sono limitati all'emissione di 32 float (destinazioni di rendering RGBA * 8) in una posizione prestabilita, CUDA supporta scritture sparse, ovvero un numero illimitato di negozi per qualsiasi indirizzo. algoritmi che non erano possibili con grafica API per eseguire in modo efficiente utilizzando CUDA"

dalla FAQ CUDA:

http://forums.nvidia.com/index.php?s=fd8a3833d78a50e273c5c731476eed0d&showtopic=84440&pid=478583&start=0&#entry478583

Fondamentalmente si rende programmi CUDA più facile da scrivere, perché non sono come limitata da dove può scrivere risultati Tieni presente che una delle chiavi per ottenere buone prestazioni su una GPU è sfruttare la località di memoria. Sovraccaricare le scritture sparse scrivendo nella memoria globale molto probabilmente avrà un impatto sulla tua performance.

+0

che si verifica ancora nella "memoria del dispositivo", giusto? (Contrariamente alle operazioni di I/O scatter/gather che consentirebbero a un motore DMA di pilotare il contenuto da una diversa posizione della memoria principale, ad esempio una singola striscia I/O) – PypeBros

+0

Corretto. Questo si riferisce alla memoria sulla GPU, non alla memoria globale. –