Kernel di calcolo - Compute kernel

In informatica , un kernel di elaborazione è una routine compilata per acceleratori ad alto rendimento (come unità di elaborazione grafica (GPU), processori di segnali digitali (DSP) o array di porte programmabili sul campo (FPGA)), separati ma utilizzati da un programma principale ( tipicamente in esecuzione su un'unità di elaborazione centrale ). A volte vengono chiamati shader di calcolo , condividendo unità di esecuzione con vertex shader e pixel shader su GPU, ma non sono limitati all'esecuzione su una classe di dispositivi o API grafiche .

Descrizione

I kernel di calcolo corrispondono all'incirca ai cicli interni quando si implementano algoritmi nei linguaggi tradizionali (eccetto che non vi è alcuna operazione sequenziale implicita) o al codice passato agli iteratori interni .

Possono essere specificati da un linguaggio di programmazione separato come " OpenCL C " (gestito dall'API OpenCL ), come "compute shader " scritti in un linguaggio di ombreggiatura (gestiti da un'API grafica come OpenGL ) o incorporati direttamente nel codice dell'applicazione scritto in un linguaggio di alto livello , come nel caso di C ++ AMP .

Elaborazione vettoriale

Questo paradigma di programmazione si associa bene ai processori vettoriali : si presume che ogni invocazione di un kernel all'interno di un batch sia indipendente, consentendo l' esecuzione parallela dei dati . Tuttavia, le operazioni atomiche possono talvolta essere utilizzate per la sincronizzazione tra elementi (per il lavoro interdipendente), in alcuni scenari. Alle singole chiamate vengono forniti indici (in 1 o più dimensioni) da cui è possibile eseguire l'indirizzamento arbitrario dei dati del buffer (comprese le operazioni di raccolta a dispersione ), a condizione che venga rispettata l'ipotesi di non sovrapposizione.

API Vulkan

L' API Vulkan fornisce la rappresentazione SPIR-V intermedia per descrivere sia gli shader grafici che i kernel di calcolo, in modo indipendente dal linguaggio e dalla macchina . L'intenzione è di facilitare l'evoluzione del linguaggio e fornire una capacità più naturale di sfruttare le capacità di elaborazione della GPU, in linea con gli sviluppi hardware come l' architettura di memoria unificata e l' architettura di sistema eterogenea . Ciò consente una più stretta collaborazione tra CPU e GPU.

Guarda anche

Riferimenti