我正在尝试计算用我的 openCL 编写的内核的吞吐量。但我不知道该怎么做,我试图找到一些编译后生成的文件,显示吞吐量为 0.435(“在 .attrb 文件中找到”),但不确定这是什么意思。有没有其他方法可以找到吞吐量?
问问题
107 次
2 回答
0
这是一个非常模糊的问题。
你的意思是只有内核而不加载数据?
内核要做什么,你在什么样的硬件上运行它,你的数据是如何组织的,你如何管理你的缓冲区?
一切都在全局内存中吗?你也在定义延迟吗?您需要最大化吞吐量吗?您要针对特定硬件进行优化吗?
对我来说,出现了许多问题。
于 2018-08-02T20:27:35.167 回答
0
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));
于 2018-08-02T11:00:57.743 回答