程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> GPGPU OpenCL中如何使用結構體數據?

GPGPU OpenCL中如何使用結構體數據?

編輯:更多關於編程

       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不能確定字符串中有多少個有效字符,必須給定字符數量。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved