Halide 的性能计数器?

Performance counter for Halide?

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

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

我很确定他们只是使用了 trace_xxx 输出和 运行 一些 scripts/programs。

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

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

编辑:对于 Linux,有 perf

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

如果跟踪是 运行 文件(例如使用 HL_TRACE_FILE),则使用二进制格式,这样效率更高一些。有关使用二进制格式的工具,请参阅 utils/HalideTraceViz。这通常是团队内部进行分析的方式。

对 OProfile 进行了少量调查,看起来很有希望,但我认为我们的代码无法正常工作。