Warning: Declaration of ElementorPro\Modules\Payments\Classes\Payment_Button::render_button($tag = 'a') should be compatible with Elementor\Widget_Button::render_button(?Elementor\Widget_Base $instance = NULL) in /web/htdocs/www.colorwave.it/home/blog/wp-content/plugins/elementor-pro/modules/payments/classes/payment-button.php on line 534
gpu_buffer – Un esempio d’uso di Push_kernel.. – Colowave

Un esempio d'uso di Push_kernel..

Analizziamo il seguente segmento di codice:

Il codice chiama la funzione statica OPCL::GPU::OpenKernel la quale, individuata una piattaforma ed un device, crea un context, richiama un programma contenente un kernel e genera l’oggetto gpu_kernel, pronto per essere usato. Come si può notare, con una sola riga di programma sino state svolte tutte le funzioni di inizializzazione che richiedono normalmente molto più codice!

Quindi vengono allocati due gpu_buffer, il primo dei quali è inizializzato ai suoi indici, esi trasferiscono i buffer alla coda parametri del kernel (funzione Push_kernel); il kernel è stato scritto in modo da ricevere questi parametri

nel modo atteso:

Il kernel banalmente inserisce nel vettore dest i quadrati degli elementi di src ( chiamato dalla funzione kernel->Exec()) .

Il vettore aggiornato può quindi essere richiamato dalla GPU mediante la kernel->PopArg(dest) per gli usi successivi. L’esempio è volutamente banale, e serve ad evidenziare che, per ciascuna chiamata  a gpu_buffer::Push_kernel(), vengono trasferiti sequenzialmente un buffer di memoria e le delle sue dimensioni in byte: _global float *src, int n_src,    __global float *dest, int n_dest;

L’ultima istruzione del segmento di codice riportato è kernel->FlushMemObjects(); questa funzione distrugge tutti gli oggetti di memoria associati al kernel (gpu_buf *dest e gpu_buf *src): le istanze dest e buf risulteranno automaticamente distrutti dopo questa chiamata di funzione.

 

 

 

Pages: 1 2
%d bloggers like this:
Skip to toolbar