2016-08-29 22 views
3

是否有性能计数器可用于使用Halide语言编写的代码?我想知道我的代码执行了多少加载,存储和ALU操作。卤化物性能计数器?

用于调度多级流水线的Halide教程通过比较分配内存,加载,存储和调用halide Funcs的数量来比较不同的调度,但我没看到如何收集这些信息。我想,在每次发生这些操作时,可以使用trace_stores,trace_loads和trace_realizations打印到控制台。这不是一个好的选择,因为它会大大减慢程序的执行速度,并且需要某种计数脚本来将控制台输出的长列表编译为所需的加载,存储和ALU操作计数。

回答

2

我很确定他们只是使用了trace_xxx输出并在其上运行了一些脚本/程序。

如果您正在寻找X86平台上的真实性能数字,我会使用Intel VTune Amplifier。这非常昂贵,但如果你在学术界(学生,教师,研究人员)或开源项目,则可能是免费的。

除此之外,通过在环境中设置HL_DEBUG_CODEGEN=1来查看降低的语句代码,您可以更好地了解循环结构和数据使用情况。请注意,此输出转到stderr,而不是stdout。

编辑:对于Linux,有perf

2

目前我们没有任何基于perf计数器的支持。使其变得便携是相当困难的。 (在移动设备上,操作系统通常不允许访问硬件。)Profiling.cpp和src/profiling.cpp中的支持很可能用于驱动perf计数器操作。分析降低传递添加代码以调用运行时中的例程,以更新有关Func和管道执行的信息。这些信息由另一个线程收集和汇总。

如果对文件运行跟踪(例如,使用HL_TRACE_FILE),则会使用二进制格式并且效率更高。有关使用二进制格式的工具,请参见utils/HalideTraceViz。这通常是如何在团队内完成分析的。

OProfile的调查很少,看起来很有希望,但我认为我们没有代码工作。