Передача структуры в ядро ​​openCL

Я хочу передать структуру в ядро ​​​​opencl, структура

struct test
{
    int *x;
    float *y;
    char *z;
};

и выделение памяти и инициализация подобны

    struct test t;
t.x = (int*)malloc(sizeof(int)*100);
t.y = (float*) malloc (sizeof(float)*50);
t.z = (char*) malloc (sizeof(char) *25);
  for(i = 0;i<100;i++)
  {
      t.x[i] = i;
      if(i<50)
          {
              t.y[i] = i;
          if(i<25)
              t.z[i] = 'a';
          }
  }

могу ли я передать такую ​​структуру в ядро ​​​​opencl


person Meluha    schedule 01.02.2013    source источник
comment
Не делай этого. Во-первых, это не имеет никакого смысла, во-вторых, ваша структура содержит указатели и будет бессмысленна. Не говоря уже о различной ширине выравнивания и типов данных. Если вы хотите передать структуры, вы определенно делаете что-то не так, и пришло время переосмыслить вашу архитектуру.   -  person SK-logic    schedule 01.02.2013


Ответы (2)


Вы можете передать такую ​​структуру, но это будет бессмысленно, поскольку x, y и z указывают на разные области памяти. Каждый из этих буферов памяти должен передаваться отдельно.

person matthias    schedule 01.02.2013
comment
да вы правы; не только бессмысленно, но и невозможно передать эту структуру как единое целое, поскольку они указывают на другое место в памяти. Но что, если у меня очень большая структура (имеется в виду структура с более чем 10-15 параметрами), мне все равно нужно передавать их один за другим или есть какое-то решение. - person Meluha; 19.02.2013
comment
К сожалению, каждый буфер памяти, который используется ядром, должен быть установлен явно через clSetKernelArg. Но, может быть, вы могли бы разбить свою проблему немного больше? - person matthias; 19.02.2013

Вместо структуры лучше выделить память на стороне хоста и отправить их ядру в качестве параметров ядра.

person Megharaj    schedule 05.02.2013