definire gli argomenti del kernel

L’inserimento degli argomenti nel kernel è fatta usando il gruppo di metodi gpu_kernel::PushArg(), ciascuno dei quali trasferisce nella coda degli argomenti tipologie di informazioni differenti : uno dei metodi usa le istanze derivate dalle classi gpu_mem_object; un altro trasferisce una istanza di una struttura OpenCL, sampler t , usata per definire le modalità di accesso ad una mappa immagine. Altri metodi PushArg permettodo di passare al kernel  valori int, float,  o buffer di byte;

I metodi PushArg()

Una volta ottenuta l’istanza gpu_kernel, per lanciarla occorrerà  definire gli argomenti della funzione; allo scopo si usano i metodi PushArg() fornite dalla classe; Questo gruppo di funzioni inseriscono gli argomenti passati nella coda di comando assegnata al kernel, per l’esecuzione successiva; I metodi PushArg incorporano un gruppo di chiamate alle API OpenCL piuttosto complesso: il loro uso semplifica notevolmente la  vita del programmatore..

Questi metodi in genere non sono usati direttamente, ma  gestiti internamente dalle classi derivate da gpu_mem_object, per costruire i metodi virtuali PushKernel(): leggere questo articolo per ulteriori chiarimenti ;  Un esempio di questa modalità è fornito nel frammento di codice che segue, e che è stato usato anche in questo articolo di presentazione dei gpu_context

// immagine sorgente
			gpu_image *src = new gpu_image(kernel, img_src, CL_MEM_READ_ONLY);
			src->Push_kernel();
 
			// immagine trasferita in forma di matrice..
			gpu_matrix_2d *dest = gpu_matrix_2d::New(kernel, img_dest, CL_MEM_WRITE_ONLY);
			dest->Push_kernel();
 
			gpu_screener *screener = gpu_screener::New(kernel, DTH);
			screener->Push_kernel();
 
			// lut dei colori assegnati per dtv
			OPCL::gpu_rgb_lut *lut = OPCL::gpu_rgb_lut::New(kernel, MAXDTV + 1, CL_MEM_READ_ONLY, _$str->rgb);
			lut->Push_kernel();

Le classi gpu_image, gpu_matrix_2d, gpu_screener e gpu_rgb_lut  sono derivate da gpu_mem_object e come tali contengono la riscrittura della funzione virtuale gpu_mem_object::PushKernel. Questa funzione permette di scrivere sulla lista degli argomenti del kernel senza dovere indicarlo, poichè il costrutture delle classi aveva già richiesto questa informazione.  In seguito mostreremo come costruire classe derivata da gpu_mem_object, chiarendo le modalità di riscrittura del metodo gpu_mem_object::PushKernel().

Pages: 1 2 3 4 5
Skip to toolbar