gpu_device

In un post precedente  è stata descritta  la classe gpu_platform, interfaccia c++ verso le platform  OpenCL; la gpu_platform incapsula un insieme di istanze della classe gpu_device, ciascuna interfaccia di uno dei device OpenCL presenti.

Tutti i device appartenenti alla stessa piattaforma condividono lo stesso context, e possono utilizzare gli stessi oggetti di memoria (gpu_buffer, gpu_image e classi derivate, come la gpu_screener, gpu_vector ecc).

class AFX_EXT_CLASS gpu_device
{
public:
	gpu_device ( );
	~gpu_device ( );

	/** \brief  rimanda l'id opencl del device
	*/
	cl_device_id Get_id( );

	/** \brief rimanda la piattaforma di appartenenza del device
	*/
	gpu_platform *Platform ( );

	bool gpu_device::Set_platform ( gpu_platform *platform, int progr );

	/** \brief rimanda la classe work-group del device
	*/
	gpu_work_group *WorkGroup ( );

	/** \brief rimanda la coda dei comandi del device
	*/
	gpu_command_queue *Queue ( );

	/**  \brief genera un programma estraendo dal database dei sorgenti precaricati
	\details
		La funzione compila il sorgente di nome program_name presente nella lista gestita dalla classe gpu_programs_db e lo rende disponibile per tutte le chiamate successive;
		Il programma compilato è memorizzato nel database e reso disponibile anche per tutte le chiamate successive, fino alla chiusura del framework opencl
	*/
	class gpu_program *Get_program ( STRING program_name);

	/** \brief verifica la compatibilita sharing con openGL
	*/
	bool Is_OpenGL_Sharing_Supported ( );

	/** \brief nome del device
	*/
	char *Name ( );

	void Set_id( cl_device_id id );

	/** \brief rimanda il puntatore alla struttura device_caps del device
	*/
	device_caps *Get_device_caps();

	__use_private_struct
};

Come le istanze valide delle   classi gpu_platform e gpu_context, anche quelle di gpu_device sono definite in fase di inizializzazione del namespace OPCL; Le istanze sono ottenibili attraverso la classe GPU. Di seguito è riportato un esempio di codice per ottenere l’istanza di un particolare device:

using namespace OPCL
.....

if (GPU::Open())
{
	if (GPU::NumPlatForms())
	{
		gpu_platform *platform = GPU::Platform(0);
		if (platform->NumDevices())
		{
			gpu_device *device= platform->Device(0)
		}
		.......................
	}
	............
}

Il device di default

Se non è necessario utilizzare più device, è sufficiente ricorrere alla funzione  GPU::GetDefaultDevice ( ) per ottenere un gpu_device valido;  la funzione effettua automaticamente tutte le inizializzazioni preliminari e rimanda il device di default sulla piattaforma di default;

Le funzioni e metodi di questa classe sono usate internamente dalle altre classi del namespace OPCL, e difficilmente saranno utilizzate direttamente nella progettazione dei programmi che fanno uso di OpenCL; pertanto questa breve esposizione non propone la spiegazione delle funzioni, ma solo una informazione preliminare che sarà ripresa in prossimi articoli, nei quali si esporranno esempi di codice OpenCL e le relative interfacce c++ verso le GPU;

 

 

 

Leave a Reply

Skip to toolbar