Использование переменных в функции ядра с использованием OpenCL

#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 раз.