#opencl
#opencl
Вопрос:
Мой код выглядит следующим образом. * код хоста******
//some declarations
cl_mem Curr_domain = NULL;
cl_mem dMobj = NULL;
//created check, AvgBlk of type structure domainBlock
// now creating buffers for above datatypes
dMobj = clCreateBuffer(context, CL_MEM_READ_ONLY|CL_MEM_USE_HOST_PTR,
dCount*sizeof(struct domainBlock), AvgBlk, amp;ret);
Curr_domain = clCreateBuffer(context, CL_MEM_READ_WRITE, dCount *
sizeof(struct domainBlock), check, amp;ret);
//passed these 2 objects to the kernel
******* kernel code******
__kernel void calculateRms( __global struct domainBlock* dMobj,
__global struct domainBlock* Curr_domain )
{
int l = get_global_id(0);
int i=0;
int iType=0;
for(iType =0; iType<8;iType )
{
if(iType==0)
{
Curr_domain = dMobj;
}
}
}
Это дает мне ошибку сбоя сборки!
Но если я инициализирую Curr_domain = dMobj; перед циклом, этого не произойдет. Но я хочу сделать это еще 6 раз.Итак, как я могу исправить эту проблему?
Я использую Intel (R) HD Graphics 4000 для выполнения этой программы.
Комментарии:
1. Что такое сообщение об ошибке сборки и значение ret, возвращаемое clCreateBuffer API?
2. Ну, я сомневаюсь, что до или после цикла будет иметь какой-либо смысл. Вы перезаписываете указатель аргумента другим указателем. Это явно не то, что вы хотите.
3. Извините, Сагар! Я изменил код как Curr_domain = clCreateBuffer(context, CL_MEM_READ_WRITE, DCount * sizeof(struct domainBlock), NULL, amp;ret); тогда API clCreateBuffer возвращает 0. и сообщение об ошибке: ОШИБКА: невозможно создать программу! igdfcl32.dll успешно завершенная сборка. igdfcl32.dll успешно завершенная сборка. Ошибка, строка 1085: сбой компиляции. Но в моем коде едва ли 600 строк в коде хоста и 200 строк в коде устройства.
4. DarkZeros, я хочу написать цикл, в котором меняется только одно значение в зависимости от значения IType . Итак, я создал одну переменную и передал на устройство, и в этом цикле я перезаписываю указатель аргумента другим указателем, так что мне не нужно записывать его 8 раз.