clFinish(-36) because of data type?

Hallo Everybody,

I try to get work an old kernel code which once was working. Now, it errors with clFinish(-36).

The remaining code is a random number generator routine. I found out which line causes the error. The function float run_mrg32k3a_generate_uniform_float_ is called at first.

float run_mrg32k3a_generate_uniform_float_(private uint* state){
  uint p1, p2;
  p1 = run_mrg32k3a_ModM1(mrg32k3a_a12,state[1] , mrg32k3a_a13,state[0],0,0);
  state[0] = state[1]; state[1] = state[2]; state[2] = p1;
  p2 = run_mrg32k3a_ModM2(mrg32k3a_a21,state[5] , mrg32k3a_a23,state[3],0,0);
  run_mrg32k3a_ModM2(mrg32k3a_a21,state[5] , mrg32k3a_a23,state[3],0,0);
  state[3] = state[4]; state[4] = state[5]; state[5] = p2;
  if (p1 <= p2) return ((float)( 4294967087 - (p2 - p1) )) * 2.3283064365386963e-10;
           else return ((float)(p1 - p2)) * 2.3283064365386963e-10;
}
uint run_mrg32k3a_ModM1(uint a1,uint b1,uint a2,uint b2,uint a3,uint b3){
  ulong a,b,x;
  x=(ulong)a1*b1;  a=(x>>32);  b=(a*209)+(x-(a<<32));
  x=(ulong)a2*b2;  a=(x>>32);  b+=(a*209)+(x-(a<<32));
  x=(ulong)a3*b3;  a=(x>>32);  b+=(a*209)+(x-(a<<32));
                                x=(b>>32);  b= (x*209)+(b-(x<<32));
  return (b<4294967087) ? (b) : (b - 4294967087);
}
uint run_mrg32k3a_ModM2(uint a1,uint b1,uint a2,uint b2,uint a3,uint b3){
  ulong a,b,x;
  x=(ulong)a1*b1;  a=(x>>32);  b=(a*22853)+(x-(a<<32));
  x=(ulong)a2*b2;  a=(x>>32);  b+=(a*22853)+(x-(a<<32));
  x=(ulong)a3*b3;  a=(x>>32);  b+=(a*22853)+(x-(a<<32));
                                x=(b>>32);  b= (x*22853)+(b-(x<<32));
  return (b<4294944443) ? b : (b - 4294944443);
}

If I comment out this line

*p2 = run_mrg32k3a_ModM2(mrg32k3a_a21,state[5] , mrg32k3a_a23,state[3],0,0);*

or do this instead:

*run_mrg32k3a_ModM2(mrg32k3a_a21,state[5] , mrg32k3a_a23,state[3],0,0);*

the kernel is executed for many times.

It didn’t help to do uint fct in return statement:

*return (b<4294944443) ? (uint)b : uint(b - 4294944443);*

Does anyone have an idea? The uint array state is initialized as ever before.

Kind regards,
Tobias

This topic was automatically closed 183 days after the last reply. New replies are no longer allowed.