OpenCl中的吞吐量计算



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

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

(NumReadBytes + NumWriteBytes)/ElapsedTime

对于测量时间,请使用cl_event。

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)); 

这是一个非常模糊的问题。

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

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

一切都在全球记忆中吗?你也在定义延迟吗?您需要最大化吞吐量吗?你打算针对特定的硬件进行优化吗?

对我来说,很多问题都出现了。

最新更新