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;
