2010-10-27 21 views
1

J'utilise atom_inc dans l'un de mes noyaux. Plus ou moins comme ceci:erreur cl_out_of_resources dans atom_inc/atomic_inc

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

Mais il me donne une erreur CL_OUT_OF_RESOURCES quand je l'appelle. Remplacer atom_inc (x) avec 0 résout ce problème ... mais rend le noyau inutile.

Des idées sur ce qui peut causer cette erreur?

Edit: J'ai inclus ces extensions dans le programme:

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

Edit2: en fait j'initialiser x avec:

kernel.setArgs(0,0); 

Dois-je utiliser un objet de mémoire dans ce lieu?

Cordialement, Florian

Répondre

0

Ah ... ok ... il semble que vous devez utiliser des objets de mémoire dans ce cas.

La solution consistait ici à créer un tampon OpenCL à un élément et à le définir comme premier argument.

Je vais laisser cette question et répondre ici afin que d'autres ne puissent pas faire la même faute.

+0

Oui, votre noyau s'est brisé (déréférencement NULL) et cette erreur est signalée comme CL_OUT_OF_RESOURCES (Un peu trompeur). –