2015-05-06 2 views
0

Моей программы, я поставилOpenCL ошибка о get_global_id

size_t global_item_size = 12000; 
size_t local_item_size = 600; 
cl_mem arr_M_obj = clCreateBuffer(context, CL_MEM_READ_WRITE, 12000 * sizeof(int), NULL, &ret);  
ret = clEnqueueNDRangeKernel(command_queue, kernel, 1, NULL, &global_item_size, &local_item_size, 0, NULL, NULL); 

и мое ядро:

__kernel void mykernel(__global int* arrM) 
{ 
    int n = get_global_id(0); 
    arrM[n] = n; 
} 

Но мой результат имеет ошибку, я использую цикл и печать arrM после копирования с устройства хозяин и мой результат

arrM[0] = 0 
arrM[1] = 0 
arrM[2] = 1 
arrM[3] = 0 
arrM[4] = 2 
arrM[5] = 0 
arrM[6] = 3 
... 
arrM[11998] = 5999 
arrM[11999] = 0 

Помогите мне решить эту проблему?

+0

В коде не указано ни одного вопроса. Пожалуйста, напишите короткий, но полный пример, который воспроизводит проблему. –

+0

Я установил 20 рабочих_групп, но когда я получу get_group_id (0), максимум равен 9, но get_num_groups (0) = 20. Я не понимаю, какая проблема происходит. – AnNguyen

+0

'local_item_size' (установленный на 600), возможно, больше, чем ваше устройство может ручка. Попробуйте передать NULL вместо этого, и пусть среда выполнения определит размер рабочей группы. – Dithermaster

ответ

0

Да, проблема довольно проста, если вы ничего не пропустили в своей публикации - вы забыли установить аргумент ядру - буфер arr_M_obj.

Take a look here for the function used to set the argument.

cl_mem arr_M_obj = clCreateBuffer(context, CL_MEM_READ_WRITE, nmax * NMAX * sizeof(cl_ulong), NULL, &ret); 
__kernel void PatternBranching(__global int4* arrlmer, __global int* arrMscore, __global int4* arrM, int k, int l, int n1, int sqelenght, int a1) 
PatternBranching(arr_lmer_obj, arr_Mscore_obj, arr_M_obj, k, l, n1, sqelength, a1) 

Извещать ничего плохого об объявлении arr_Mscore_obj и подписи? Измените cl_ulong на cl_int

+0

Большое вам спасибо, извините, что моего сообщения недостаточно для моего кода, я установил аргумент в своем коде. clSetKernelArg (kernel, 0, sizeof (cl_mem), (void *) & arr_M_obj); – AnNguyen

+0

@AnNguyen использует типы cl в главном коде - ie cl_int –

+0

Я отремонтировал cl_int, но у него все еще есть ошибка. Я попытался создать новый проект OpenCL Code Builder, генерируя и изменяя некоторые переменные, и это нормально. – AnNguyen