3

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

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

4

2 回答 2

2

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

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

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

于 2016-08-30T00:39:07.293 回答
2

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

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

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

编辑:对于 Linux,有perf

于 2016-08-30T00:08:59.130 回答