Metodi e funzioni di gpu_context

Analizziamo ora le funzioni ed i metodi della classe

class AFX_EXT_CLASS gpu_context
{
public:
	gpu_context(gpu_platform *platform);
	~gpu_context();

	bool CreateGpuBuf(class gpu_buffer *buf);

	bool Add_mem_object(gpu_mem_object *memobj);

	bool Destroy_mem_object(gpu_mem_object *mem);

	bool Destroy_kernel_objects(gpu_kernel *kernel);

	void Set_id(cl_context  cid);

	cl_context Get_id();

	gpu_platform *Get_platform();

	__use_private_struct
};

gpu_context(gpu_platform *platform)

gpu_context  è sempre assegnata ad una piattaforma (gpu_platform), definita in fase di allocazione dell’oggetto, come evidenziato dal sui costruttore,

CreateGpuBuf(class gpu_buffer *buf)

La funzione non è usata direttamente dal programmatore, ma dall’interno della gpu_buffer;  alloca un buffer di memoria gpu associandolo all’istanza  gpu_buffer passata come argomento. Ricordiamo che gpu_buffer è la classe base di oggetti di memoria appartenente al namespace OPCL  (gpu_vector, gpu_rgb_lut ed altre).

CreateGpuBuf estrae le informazioni necessarie da gpu_buffer (dimensioni memoria, modalità di mappatura cl_mem_flags etc) e aggiorna la lista dei buffer allocati nel context.

La liberazione della memoria generata in gpu_context è fatta in due modi:

  1.  Disallocando la classe gpu_context vengono rilasciati tutti i gpu_buf inseriti.
  2. in alternativa, alla distruzione di un’istanza gpu_buf (o classi che ereditano gpu_buf) sarà rilasciato anche il buffer allocato dal context nella GPU

Add_mem_object(gpu_mem_object *memobj)

Tutti gli oggetti di memoria del namespace OPCL derivano da gpu_mem_object;    La funzione aggiunge un oggetto alla lista dei gpu_mem_object assegnati al context ed è usata solo internamente dalle classi gpu_context e gpu_image  (attenzione: non deve essere mai usato dal programmatore!).

Tutti gli oggetti inseriti con Add_mem_object saranno automaticamente distrutti a fine esecuzione kernel quando richiamata la funzione kernel->FlushMemObjects().

Destroy_mem_object(gpu_mem_object *mem)

Distrugge un oggetto gpu_mem_object se in precedenza aggiunto al gpu_context (vedi Add_mem_object); questa funzione è usata internamente dalle classi del namespace OPCL, e non c’è alcun motivo di usarla, a meno che non si voglia progettare una nuova classe gpu_mem_object.

Destroy_kernel_objects(gpu_kernel *kernel)

La funzione distrugge tutti gli oggetti di memoria assegnati ad un kernel; è importante ricordare che un oggetto di memoria (gpu_mem_object) può essere usato da più gpu_kernel: in questo caso sarà eliminato solo dal kernel passato alla funzione; Destroy_kernel_objects è usata dall’interno dellla  gpu_kernel::FlushMemObjects().

Set_id() , Get_id()

Le funzioni Set_Id e Get_id sono usate internamente dalla classe GPU quando vengono generate le istanze gpu_context  su una piattaforma gpu_platform; non sono mai usate in contesti diversi, e connettono  un’istanza gpu_context al context  OpenCL.

Get_platform()

La funzione rimanda la piattaforma OpenCL  (la classe gpu_platform del framework OPCL di Colibri); anche questa funzione è usata internamente dalla classe GPU.

Anche questa funzione non è di uso comune ed è usata praticamente solo all’interno del framework. Può comunque essere utile per estrarre in qualunque momento informazioni sulla piattaforma in uso.

Conclusione

Abbiamo descritto la classe gpu_context  Che incapsula le funzionalità del context  OpenCL e abbiano fatto notare che la stessa non è generalmente usata dal programmatore, a meno che non desideri creare nuove classi del  namespace OPCL. Le informazioni contenute in questo articolo ritorneranno utili quando, in un prossimo articolo, discuteremo della costruzione di un oggetto derivato da gpu_mem_object.

 

 

 

Pages: 1 2

Leave a Reply

Skip to toolbar