usare gpu_kernel

La lettura di questo post richiede una buona conoscenza dei paradigmi sottesi alle API di OpenCL;  Per accedere a ulteriori informazioni si propongono questi articoli :

Descriveremo ora i metodi e le funzioni della classe :

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

	char *Name();

	void Set_id(cl_kernel  id);
	cl_kernel Get_id();
	gpu_program *Program();
	bool SetIndexSpace(size_t *index_spize_size, size_t *work_group_size = 0);
	bool Set_index_space_2d(size_t dx, size_t dy);
	bool FlushMemObjects();
	bool PushArg(gpu_mem_object *memobj);
	bool PushArg(cl_sampler sampler);
	bool PushArg(cl_int value);
	bool PushArg(cl_uint value);
	bool PushArg(cl_float value);
	bool PushArg(void *ptr, size_t size);
	bool PopArg(gpu_mem_object *buf);
	bool Exec();
	size_t Get_preferred_multiple_workgroup_size();
	cl_ulong Get_local_mem_size();
	size_t Get_workgroup_size();
	size_t *Get_compile_workgroup_size(size_t compile_work_group_size[3]);

	friend class gpu_program;
	friend class gpu_buffer;
	friend class GPU;

private:
	bool SetName(char *name);
	bool SetProgram(gpu_program *prg);
	bool SetId(cl_kernel kid);

	__use_private_struct

};

Ottenere un’istanza gpu_kernel

Le istanze della classe la classe gpu_kernel sono create in due diversi modi;

un modo, completamente automatico, è già stato presentato in questo articolo di descrizione della classe gpu_context; Il comando gpu_kernel *kernel = OPCL::GPU::OpenKernel(prog_name, kernel_name) rimanda un kernel dati i nomi del programma e della funzione __kernel contenuta nel codice C OpenCl;

un secondo modo è quello di richiamare la funzione OpenKernel  di un’istanza gpu_program  (questo metodo è comunque usato internamente dalla GPU::OpenKernel).

Il primo metodo è semplice da usare, come descritto nell’articolo citato; Il secondo metodo richiede un numero maggiore di passaggi ed è utile solo in casi particolari dei quali scriveremo in seguito;

Pages: 1 2 3 4 5
Skip to toolbar