Pergunta

Estou usando o Atom_inc em um dos meus grãos. Mais ou menos assim:

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)];
  }
}

Mas isso me dá um erro cl_out_of_resources quando eu o chamo. Substituir atom_inc (x) por 0 resolve esse problema ... mas torna o kernel inútil.

Alguma idéia do que pode causar esse erro?

EDIT: Eu incluí estas extensões no programa:

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

EDIT2: Na verdade, eu inicializo x com:

kernel.setArgs(0,0);

Eu tenho que usar um objeto de memória neste lugar?

Atenciosamente, Florian

Foi útil?

Solução

Ah ... ok ... parece que você precisa usar objetos de memória neste caso.

A solução aqui foi criar um buffer OpenCL de um elemento e defini -lo como o primeiro argumento.

Vou deixar essa pergunta e responder aqui para que outros não façam a mesma falha.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top