我试图在OpenCL内核中使用自定义数据结构。我在我的主机程序中定义了一个简单的结构,如:在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为设备。在执行内核代码之后,我得到了不正确的结果。我不明白原因。有什么缺失?
非常感谢您的帮助。
“结果不正确”是什么意思?什么是输入,输出是什么? – 2012-08-13 16:43:57
你只在一个输入和一个输出上工作吗?如果是这样,在内核上运行它的原因是什么?如果你在多个输入/输出上执行它,你的代码不应该像'output [id] .start_time = input [id] .start_time;'在你的内核中吗? – dkg 2012-08-16 08:16:50
这只是在OpenCL中使用自定义结构的简单启动。下一步将向OpenCL内核提供一个大型的自定义结构向量。 – semteu 2012-08-23 01:51:50