Domanda

sto usando atom_inc in uno dei miei kernel. Più o meno in questo modo:

kernel exampleKernel(
  global volatile int * x, 
  global const int   maxX,
  global const int * buf1, 
  global const int * buf2
  )
{
  if(x < maxX)
  {
    int y = atom_inc(x);
    buf2[y] = buf1[get_global_id(0)];
  }
}

Ma mi dà un errore CL_OUT_OF_RESOURCES quando lo chiamo io. Sostituzione atom_inc (x) con 0 per risolvere questo problema ... ma rende il kernel inutile.

Tutte le idee che possono causare tale errore?

Edit: ho inserito queste estensioni nel programma:

#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable
#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable

Edit2: in realtà ho inizializza x con:

kernel.setArgs(0,0);

Devo utilizzare un oggetto di memoria in questo luogo?

Cordiali saluti, Florian

È stato utile?

Soluzione

Ah ... ok ... sembra che si deve oggetti di memoria uso in questo caso.

La soluzione qui era quello di creare uno elemento OpenCL buffer e impostarla come primo argomento.

Lascio questa domanda e risposta qui in modo che gli altri potrebbero non commettere lo stesso errore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top