gpu_program

Un’istanza della classe gpu_program viene creata ogni volta che viene caricato un programma opencl da eseguire. Il database dei programmi opencl viene sempre caricato ad inizializzazione dell’applicazione. Tutti i programmi OpenCL sono caricati in forma di codice sorgente e la loro compilazione avviene a seguito della prima richiesta di esecuzione di uno dei kernel presenti. ogni programma è incapsulato nella classe gpu_program, mentre  il database dei programmi è gestito dalla classe gpu_programs_db.  Notare che non  c’è necessità di utilizzare direttamente la classe gpu_program_db, poiché  l’accesso al database dei programmi e la loro compilazione è effettuata automaticamente dall’infrastruttura del namespace OPCL.

Anche le istanze della classe gpu_program non sono in genere direttamente usate, e sono generate e gestite in modo completamente trasparente nella funzione

OPCL::GPU::OpenKernel(prog_name, kernel_name);

che genera un kernel da eseguire.

La classe espone un insieme di metodi e funzioni utilizzate dall’infrastruttura per eseguire automaticamente la compilazione ed il caricamento su un device del programma eseguibile. Il programma è compilato utilizzando il compilatore OpenCL del device assegnato; Se sulla piattaforma sono presenti più device, il programma è compilabile ed eseguibile su ciascuno di essi;

	class AFX_EXT_CLASS gpu_program
	{
	public:

		gpu_program (STRING name, char *src, gpu_device *device );
		~gpu_program ( );

		gpu_device *Device ( );

		char *Source ( );

		cl_program Id ( );

		gpu_kernel *OpenKernel ( char *function_name );

		gpu_program_str pdata;
	};

gpu_program (STRING name, char *src, gpu_device *device );

il costruttore genera ed inizializza un programma dato il suo nome, il codice sorgente ed un device di esecuzione; come già scritto, le istanze della classe sono generate in modo trasparente dall’infrastruttura, e non c’è necessità di utilizzare direttamente questo costruttore;

Source()

Il codice sorgente del programma è accessibile usando la funzione Source();

OpenKernel(char *function_name )

L’apertura di un kernel OpenCL è effettuata attraverso questa funzione; l’istanza della classe gpu_kernel rimandata è utilizzata per eseguire il kernel, dopo averli  assegnato gli argomenti. Per una discussione approfondita sull’esecuzione del kernel leggere l’articolo che descrive la classe gpu_kernel.

Id()

La funzione rimanda l’handle cl_program del programma compilato in OpenCL; anche questa funzione, come tutte quelle esposte nella classe non ha necessità di essere utilizzata, a meno che non si debbano generare nuove classi nel namespace OPCL.

Compilazione del  programma

Quando viene generata un’istanza di gpu_program viene eseguita internamente la compilazione del programma OpenCL del quale è fornito il sorgente ed il device di esecuzione; se sono presenti errori sintattici verrà presentata una finestra come quella riportata di fianco.

nel frammento di codice presentato vengono riportate le coordinate nel testo con l’indicazione del tipo di errore trovato; Perchè un programma OpenCL sia compilato occorrerà avere installato correttamente il compilatore ed il driver OpenCL fornito dal produttore del device; In genere, per le schede grafiche che sono compatibili con OpenCL, il software necessario è installato sul computer in fase di installazione dei driver;

Nel caso non fosse già installato il compilatore, fare riferimento a questa pagina   sul sito di Khronos per valutare la conformità dell’hardware a OpenCL.

Leave a Reply

Skip to toolbar