estrarre i dati modificati dal kernel

Alcuni degli argomenti passati al kernel saranno elaborati durante l’esecuzione dello stesso; Queste informazioni potranno essere estratte dal programma host utilizzando il metodo gpu_kernel::PopArg. Il frammento di codice che segue mostra il codice per l’esecuzione del kernel e quello di estrazione dei risultati:

if (kernel->Set_index_space_2d(ret_area->dx, ret_area->dy))
			{
				if (kernel->Exec())
				{
					bool res = kernel->PopArg(dest);
					MSGS name;
					SPRINTF(name, L"%s_dth", img_src->GetName());
					img_dest->InitDocInfo(name);
					img_dest->SetHtmlToolTip();
				}
				else
				{
					OPCL::GPU::Display_error_info();
					__delete (img_dest);
				}

Del metodo Set_index_space_2d(..) contenuto nella prima riga scriveremo fra poco; per ora ricordiamo che definisce l’intervallo di indici usato dalla gpu per eseguire i singoli work_item;

Il metodo gpu_kernel::Exec() lancia in esecuzione il kernel e rimanda un valore true se il codice è stato eseguito correttamente; il passaggio successivo è l’estrazione delle informazioni calcolata attraverso la gpu_kernel::PopArg():

bool res = kernel->PopArg(dest);

PopArg()

La funzione riceve un puntatore ad una istanza di tipo gpu_mem_object e rimanda true se le informazioni sono state estratte correttamente; in questo esempio l’argomento dest passato è lo stesso che in precedenza era stato trasferito come argomento al kernel:

gpu_matrix_2d *dest = gpu_matrix_2d::New(kernel, img_dest, CL_MEM_WRITE_ONLY);
			dest->Push_kernel();

Da quanto scritto si può dedurre che le informazioni elaborate ed estratte dal kernel usando la PopArg sono necessariamente del tipo gpu_mem_object; inoltre va ricordato che queste istanze devono essere state create con  il flag CL_MEM_WRITE_ONLY o CL_MEM_READ_WRITE  definiti mediante le funzioni gpu_mem_object::Set_mem_flags()

Pages: 1 2 3 4 5
Skip to toolbar