Ошибка компилятора AMD APP SDK v2.9

Я пытаюсь построить простую программу в OpenCL для вычисления значения числа пи с помощью метода Монте-Карло, я использую APP SDK от AMD на процессорах Intel и AMD GPU,
это источник ядра:

#define RAND_MAX 4294967295float rand(uint *seed)
{
*seed = *seed * 1103515245 + 12345;
float res= *seed % ( RAND_MAX + 1);
res/=RAND_MAX;
return res;
}

__kernel
void pi(__global uint *seed, __global uint *res)
{
int idx = get_global_id(0);
uint loc_seed= seed[0] + idx;

res[idx]=0;
float x,y;
uint i;
for(i=0; i<100000; i++)
{
x=rand(&loc_seed);
y=rand(&loc_seed);
if( (x*x+y*y)>1 )
{
res[idx] += 1;
}
}

}

который не компилируется, выдавая следующий вывод сразу при вызове clBuildProgram, что приводит к сбою всего процесса:

LLVM ERROR: Cannot select: 0x15b01a0: i64 = setcc 0x15aed90, 0x15b02a0, 0x15b2b80 [ORD=16] [ID=34]
0x15aed90: i32 = add 0x15afda0, 0x15af6a0 [ORD=14] [ID=31]
0x15afda0: i32 = mul 0x15af4a0, 0x15afba0 [ORD=13] [ID=28]
0x15af4a0: i32 = add 0x15afaa0, 0x15af6a0 [ORD=9] [ID=26]
0x15afaa0: i32 = mul 0x15aeb90, 0x15afba0 [ORD=8] [ID=25]
0x15aeb90: i32,ch = CopyFromReg 0x1660540, 0x15ae890 [ORD=8] [ID=24]
0x15ae890: i32 = Register %vreg2 [ORD=8] [ID=1]
0x15afba0: i32 = Constant<1103515245> [ORD=8] [ID=2]
0x15af6a0: i32 = Constant<12345> [ORD=9] [ID=3]
0x15afba0: i32 = Constant<1103515245> [ORD=8] [ID=2]
0x15af6a0: i32 = Constant<12345> [ORD=9] [ID=3]
0x15b02a0: i32 = Constant<0> [ORD=16] [ID=10]

Что это такое? Я уверен, что проблема где-то в исходном коде ядра, потому что переключение на другой файл ядра всегда работает нормально ..

заранее спасибо

РЕДАКТИРОВАТЬ: кажется, что проблема заключается в числе 4294967295, который является крупнейшим беззнаковым int с 32 битами, но компилятору, по некоторым причинам, кажется, не нравится ..

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]