3

我正在尝试将自定义数据结构与 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;

等效的自定义数据结构定义也在我的 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;

核函数如下:

__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;
}

我使用 Nvidia 卡作为 GPU 设备。执行内核代码后,我得到了不正确的结果。我不明白原因。有什么遗漏吗?

预先感谢您的帮助。

4

1 回答 1

5

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

于 2012-08-13T15:32:33.073 回答