cancel
Showing results for 
Search instead for 
Did you mean: 

Archives Discussions

shailu1995
Journeyman III

invalid_command_queue when using barrier

Hi,

I am getting an error of CL_INVALID_COMMAND_QUEUE while using barrier(CLK_LOCAL_MEM_FENCE ) in my code. When I don't use this the code runs successfully. But since this is not redundant I need to fix this.

Since its a large project I am confining the error to a small scale. My OpenCL kernel has been reduced to just a few lines of code. In that, if I use barrier I get this error.

So any clues  on what is causing this error.

Thanks in advance

Shailesh  Tripathi

0 Likes
4 Replies
dipak
Big Boss

Hi Shailesh,

Could you please share a test program (host and kernel) that manifests the issue?

Regards,

0 Likes

Hi dipak,

Since its a large project and sharing the complete code makes no sense. Still I can share a few parts (steps followed for one of the variables):

Create buffer:

d_glbSpkCntInput=clCreateBuffer(context,  CL_MEM_READ_WRITE | CL_MEM_ALLOC_HOST_PTR ,7 * sizeof(unsigned int), NULL, &ret);

Mapping buffer memory:

glbSpkCntInput= (unsigned int *) clEnqueueMapBuffer(command_queue, d_glbSpkCntInput, CL_TRUE, CL_MAP_READ | CL_MAP_WRITE, 0, 7* sizeof(unsigned int), 0, NULL, NULL, &ret);

Initializing memory:

for (int i = 0; i < 7; i++) {

        glbSpkCntInput = 0;

    }

Unmap memory:

clEnqueueUnmapMemObject(command_queue, d_glbSpkCntInput,glbSpkCntInput, 0, NULL, NULL);

Launch kernel :

size_t sGlobalSize = 1536;

    size_t sLocalSize = 32;

CHECK_OPENCL_ERRORS(clEnqueueNDRangeKernel(command_queue,calcSynapses,1, NULL, &sGlobalSize , &sLocalSize, 0, NULL,NULL/* &synapseevent*/));

  CHECK_OPENCL_ERRORS(clFinish(command_queue));

opencl kernel:

__kernel void calcSynapses(__global float *t ,  __global unsigned int* dd_glbSpkCntInput,  __global unsigned int* dd_glbSpkInput, __global unsigned int * dd_spkQuePtrInput,  __global unsigned int* dd_glbSpkCntInter,  __global unsigned int* dd_glbSpkInter,  __global unsigned int* dd_glbSpkCntOutput,  __global unsigned int* dd_glbSpkOutput, __global float* dd_inSynInputInter, __global float* dd_inSynInputOutput, __global float* dd_inSynInterOutput, __global unsigned int *d_done , __global int *dd_test)

{

    unsigned int id = get_global_id(0);

    unsigned int lmax, j, r;

    float addtoinSyn;

    volatile __local float shLg[BLOCKSZ_SYN];

    float linSyn;

    unsigned int ipost;

    __local unsigned int shSpk[BLOCKSZ_SYN];

    unsigned int lscnt, numSpikeSubsets;

  

  if (id==0)

  dd_test[0]=65;

    // synapse group InputInter

    if (id < 512) {

        unsigned int delaySlot = (*dd_spkQuePtrInput + 4) % 7;

        // only do this for existing neurons

        if (id < 500) {

            linSyn = dd_inSynInputInter[id];

            }

   lscnt = dd_glbSpkCntInput[delaySlot];

        numSpikeSubsets = (lscnt+BLOCKSZ_SYN-1) / BLOCKSZ_SYN;

        // process presynaptic events: True Spikes

  

  for (r = 0; r < numSpikeSubsets; r++) {

            if (r == numSpikeSubsets - 1) lmax = ((lscnt-1) % BLOCKSZ_SYN) +1;

            else lmax = BLOCKSZ_SYN;

          barrier(CLK_LOCAL_MEM_FENCE | CLK_GLOBAL_MEM_FENCE);

            if (get_local_id(0) < lmax) {

                shSpk[get_local_id(0)] = dd_glbSpkInput[(delaySlot * 500) + (r * BLOCKSZ_SYN) + get_local_id(0)];

                }

                }

}

clFinish() produces the error CL_INVALID_COMMAND_QUEUE

When I remove the barrier function the code runs fine but not with it.

So please tell me what could be the possible source of this error.

Thanks in advance

Shailesh

0 Likes

Hi Shailesh,

In above code, I don't  see any reason for the CL_INVALID_COMMAND_QUEUE error. As I've never experienced such a error due to a barrier call,  so, it's hard to suggest anything particular. If you can provide a test program (having only relevant code), we can investigate it here.

Regards,

0 Likes

Hi dipak,

My bad

Actually the buffer dd_spkQuePtrInput was not initialized in the host code. But I don't understand why the code executed correctly after removing the barrier call or what effect does the un-initialization had on the barrier call?

Thanks dipak for your help

Shailesh

0 Likes