OpenCl中的吞吐量计算

OpenCl中的吞吐量计算,opencl,open-closed-principle,opencl-c,Opencl,Open Closed Principle,Opencl C,我试图计算我的内核的吞吐量,这是在我的openCL中编写的。但我不知道如何做到这一点,我试图找到一些编译后生成的文件,显示吞吐量为0.435(“在.attrb文件中找到”),但不确定这意味着什么。有没有其他方法可以找到吞吐量 OpenCL中内核的吞吐量计算为: (NumReadBytes + NumWriteBytes)/ElapsedTime 使用cl_事件测量时间 double getDuration(cl_event event)

我试图计算我的内核的吞吐量,这是在我的openCL中编写的。但我不知道如何做到这一点,我试图找到一些编译后生成的文件,显示吞吐量为0.435(“在.attrb文件中找到”),但不确定这意味着什么。有没有其他方法可以找到吞吐量

OpenCL中内核的吞吐量计算为:

(NumReadBytes + NumWriteBytes)/ElapsedTime
使用cl_事件测量时间

double getDuration(cl_event event)                                                                                                                                                                                                                                                        
{                                                                                                                                                                                                                                                                                         
  cl_ulong start_time, end_time;                                                                                                                                                                                                                                                        
  clGetEventProfilingInfo (event,CL_PROFILING_COMMAND_START, 
                                 sizeof(cl_ulong), &start_time,NULL);                                                                                                                                                                                           
  clGetEventProfilingInfo (event,CL_PROFILING_COMMAND_END, 
                                     sizeof(cl_ulong), &end_time,NULL);                                                                                                                                                                                                                                                                              
  double total_time = (end_time - start_time) * 1e-6;                                                                                                                                                                                                                                     
  return total_time;                                                                                                                                                                                                                                                                      
}          

cl_event timer;

int ret = clEnqueueNDRangeKernel(cq, kernel, 1, p_global_work_offset, &global_work_size, 
                                          &local_work_size, 0, NULL, &timer); 

printf("T:%zu L:%zu T:%fms",global_work_size, local_work_size, getDuration(timer)); 

这是一个非常模糊的问题

你是说只加载内核而不加载数据吗

内核将做什么,在什么样的硬件上运行,数据是如何组织的,缓冲区是如何管理的

一切都在全局内存中吗?您是否也定义了延迟?您需要最大限度地提高吞吐量吗?您打算针对特定硬件进行优化吗

对我来说,有很多问题