gpu_platform

Ogni classe gpu_platform individua e gestisce una delle piattaforme OpenCL la cui list può essere ottenuta usando la funzione  clGetPlatformIDs.

Le istanza della classe sono in numero pari alle piattaforme hardware presenti, ed una delle specifiche piattaforme è ottenibile come descritto nel segmento di codice che segue

if (GPU::Open ( ))
{
   for (cl_uint np = 0; np < GPU::NumPlatForms ( ); np++)
   {
	gpu_platform *platform = GPU::Platform ( np );
        ...........................................
        .......................
        .............
    }
}

La gestione delle piattaforme OpenCL è  completamente effettuata all’interno della classe GPU, sia per l’allocazione che per il rilascio delle stesse. Una piattaforma può contenere più device, ai quali si accede attraverso la funzione platform->Device(x)  dove x è un ordinale valido.

ogni gpu_platform contiene un context  OpenCL gestito attraverso la classe gpu_context e visibile attraverso la funzione platform->Context(); tutti i device  della piattaforma accedono allo stesso context.

E’ rara l’esigenza di accedere direttamente alle funzioni di gpu_platform, a meno che non si intenda scrivere nuove classi del namespace OPCL ed  in genere, come già descritto qui , per utilizzare un programma OpenCL (un suo kernel)  non è necessario ottenere informazioni sulla piattaforma e classi incapsulate;

Analizziamo ora le funzionalità della classe

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

		cl_platform_id Id ( );

		char *Name ( );

		int NumDevices ( );

		/** rimanda il device ord-esimo
		*/
		class gpu_device *Device ( int ord );

		/** \brief rimanda il context  della  piattaforma
		details il contesto opencl è automaticamente definito quando viene inizializzata la struttura gpu_platform dall'interno GPU ed è comune a tutti i device
		nella piattaforma;
		*/
		class gpu_context *Context ( );


		/** rimanda la descrizione della versione opencl gestita dalla piattaforma
		*/
		char *OpenCl_Version ( );

		friend class GPU;
		friend class gpu_context;

	private:
		bool SetDevices ( int n, cl_device_id *devs );
		bool SetName ( char *name );
		bool SetId ( cl_platform_id id );
		bool SetOpenCL_Version ( char *version );

		__use_private_struct
	};

Le funzioni private sono usate dalle classi GPU e gpu_context  per definire gli attributi durante l’inizializzazione della infrastruttura nel namespace OPCL;  Le altre funzioni permettono di accedere  alle istanze gpu_device e gpu_context incapsulate;

Tutti gli attributi esposti attraverso i metodi della gpu_platform sono visibili nella finestra richiamabile dal menu dei Tools di  Colibri; la finestra presenta inoltre un insieme di caratteristiche utili per individuare le potenzialità delle piattaforme OpenCL installate nel computer in uso; Un’ultima annotazione: più piattaforme e device possono essere presenti nella stesso host, tutti utilizzabili attraverso le classi del namespace OPCL.

 
OpenCL info

 

 

Leave a Reply

Skip to toolbar