在opencl中使用自定义结构

sem*_*teu 3 opencl data-structures

我正在尝试使用OpenCL内核的自定义数据结构.我在宿主程序中定义了一个简单的结构,如:

struct myStruct{
   cl_ulong n_occ;
   cl_ulong start_time;
   cl_ulong end_time;
   cl_ulong exec_time;
   cl_ulong total_time;
   cl_float avg_time;
} myStruct_t;
Run Code Online (Sandbox Code Playgroud)

等效的自定义数据结构定义也在我的OpenCL内核中完成.

struct myStruct{
   unsigned long n_occ;
   unsigned long start_time;
   unsigned long end_time;
   unsigned long exec_time;
   unsigned long total_time;
   float avg_time;
} myStruct_t;
Run Code Online (Sandbox Code Playgroud)

内核函数如下:

__kernel void process_data( __global myStruct_t* input, __global myStruct_t* output){
    output->start_time = input->start_time;
    output->end_time = input->end_time;
    output->exec_time = input->end_time - input->start_time;
    output->total_time = input->total_time + output->exec_time;
    output->n_occ = input->n_occ + 1;
    output->avg_time = output->total_time / output->n_occ;
}
Run Code Online (Sandbox Code Playgroud)

我使用Nvidia卡作为GPU设备.执行内核代码后,我得到了错误的结果.我不明白原因.有什么东西不见了吗?

预先感谢您的帮助.

Ani*_*Ani 5

您是否检查过主机结构(C)是否正确打包(还要确保OpenCL端正确打包并且两者报告的大小相同)?在两个结构中使用相同的cl_*类型也是一个好主意.

  • 确保大小正确的一种简单方法是将名为size的字段声明为第一个字段并填充CL设备上的值.然后检查缓冲区结构中返回的值,并在主机上返回"sizeof"返回的值. (4认同)