欢迎来到山村网

GPGPU OpenCL中如何使用结构体数据?

2019-03-02 12:31:53浏览:197 来源:山村网   
核心摘要:  OpenCL编程中可以使用结构体,只需要在核函数kernel中提供同样的结构体申明就可以啦。  如果在主函数中定义了结构体:  

  OpenCL编程中可以使用结构体,只需要在核函数kernel中提供同样的结构体申明就可以啦。

  如果在主函数中定义了结构体:

  1 typedef struct studentNode{

  2 int age;

  3 float height;

  4 }student;

  主函数中定义数据,并传输给OpenCL kernel:

  student *stu_input=(student*)malloc(sizeof(studentNode));

  stu_input->age=25;

  stu_input->height=1.8l;

  student *stu_output=(student*)malloc(sizeof(studentNode));

  cl_mem inputBuffer = clCreateBuffer(context, CL_MEM_READ_onLY|CL_MEM_COPY_HOST_PTR, sizeof(studentNode),(void *)stu_input, NULL);

  cl_mem outputBuffer = clCreateBuffer(context, CL_MEM_WRITE_onLY ,sizeof(studentNode), NULL, NULL);

  cl_kernel kernel = clCreateKernel(program,"structTest", NULL);

  status = clSetKernelArg(kernel, 0, sizeof(cl_mem), (void *)&inputBuffer);

  status = clSetKernelArg(kernel, 1, sizeof(cl_mem), (void *)&outputBuffer);

  下面是具体的OpenCL kernel,可以对学生的年龄、身高进行修改:

  typedef struct studentNode{

  int age;

  float height;

  }student;

  int growUp(__global student *stu_input ,__global student *stu_output)

  {

  stu_output->age=stu_input->age+1;

  stu_output->height=stu_input->height + 0.1;

  return 0;

  }

  __kernel void structTest(__global student *stu_input ,__global student *stu_output)

  {

  growUp(stu_input,stu_output);

  }

  执行输出:

GPGPU OpenCL中如何使用结构体数据? 山村

  注意:

  OpenCL中不支持字符串,如char string[32]="Hello World"。OpenCL不能确定字符串中有多少个有效字符,必须给定字符数量。

(责任编辑:豆豆)
下一篇:

Python素数检测的方法

上一篇:

GPGPU OpenCL怎么实现精确字符串查找?

  • 信息二维码

    手机看新闻

  • 分享到
打赏
免责声明
• 
本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们 xfptx@outlook.com