Terminologia OpenCL

Documentazione di riferimento

Questo articolo definisce la terminologia La terminologia riportata in questo articolo fa riferimento ai concetti sottesi alle API Colibri::OPCL , derivati dagli standard  OpenCL. Di seguito sono riportati alcuni siti di riferimento per l’ambiente OpenCL;

OpenCL 1.2 reference pages

OpenCL 2.0 reference pages

inoltre questo articolo del blog contiene una lista di link a siti di riferimento per la documentazione OpenCL;

Documentazione  di riferimento del linguaggio OpenCL dispoibile sul sito Kronos.org; da qui si possono accedere tutte le informazioni relative al linguaggio lato GPU e CPU rev 1.2 e 2.0.

compute kernel

Un kernel è una piccola unità di esecuzione che esegue una funzione chiaramente definita e che può essere eseguita in parallelo. Un kernel può essere eseguito su ogni elemento di un flusso di input (chiamato NDRange) o semplicemente su ciascun punto in uno spazio indice arbitrario. Un kernel è analogo e, su alcuni dispositivi identico, a ciò che i programmatori grafici chiamano un programma shader. Questo kernel non deve essere confuso con un kernel del sistema operativo, che controlla l’hardware. La forma più semplice di un NDRange viene semplicemente mappata sui dati di input e produce un elemento di output per ogni ennupla di input.

Le estensioni successive del modello base forniscono funzionalità di accesso casuale, conteggi delle uscite variabili e operazioni di riduzione / accumulo.

In openCL i kernel vengono specificati usando la parola chiave __kernel.

Un kernel di calcolo è un tipo specifico di kernel che non fa parte della tradizionale pipeline grafica. Il tipo di kernel di calcolo può essere utilizzato per la grafica, ma la sua forza risiede nell’utilizzarlo per campi non grafici come fisica, intelligenza artificiale, modellazione, HPC e varie altre applicazioni ad alta intensità di calcolo.

In un kernel di calcolo, l’ordine di spawn dei work-item  è sequenziale:  ciò significa che su un chip con N work-item per frontwave, i primi N work-item sono trattati dal wavefront 1, i secondi N work-item sono eseguiti dal wavefront 2, ecc.

Quindi, gli ID dei work-item assegnati al wavefront K-esimo sono quelli nell’intervallo

 da (K • N) a ((K + 1) • N) – 1

wavefronts e work-group

Wavefronts e work-group sono due concetti relativi ai kernel di elaborazione che permettono una granularità data-parallel.

Un Wavefront esegue un insieme di work-item in lock-step ciascuno rispetto agli altri.

Ad esempio, sedici elementi di lavoro sono eseguiti in parallelo attraverso l’unità vettoriale e l’intero wavefront  è eseguito in quattro cicli di clock.

Ciò significa che se due work-item del wavefront  seguono percorsi divergenti nel flusso di esecuzione, tutti i work-item del wavefront fanno lo stesso percorso.

Il raggruppamento dei work-item in work-group è invece una granularità di livello superiore del parallelismo dei dati che viene gestita via software, non hardware.

I punti di sincronizzazione definiti  in un kernel garantiscono che tutti i work-item in un work-group raggiungano quel punto (barriera) nel codice prima dell’esecuzione dell’istruzione successiva. I work-group sono organizzati in wavefront , e le migliori prestazioni si ottengono quando la dimensione del work-group è un multiplo intero della dimensione del wavefront.

Local data store (LDS)

La LDS è una memoria ad alta velocità e bassa latenza,  privata per ogni unità di elaborazione.

Un work-group può scrivere ovunque nel suo spazio assegnato.

Questo modello è rimasto invariato per la serie AMD Radeon ™ HD 7XXX. I vincoli dell’attuale modello LDS sono:

  • La dimensione LDS è allocata per work-group.  Ogni work-group specifica la quantità di LDS richiesta. Lo scheduler hardware utilizza queste informazioni per determinare quali work-group possono condividere un’unità di calcolo
  • I dati possono essere condivisi solo all’interno dei work-item del work-group di appartenenza.
  • Gli accessi alla memoria al di fuori del work-group producono un comportamento indefinito.

 

 

 

 

 

Leave a Reply

Skip to toolbar