【问题标题】:How to count TBB processing instructions?如何计算 TBB 处理指令?
【发布时间】:2018-05-09 16:14:08
【问题描述】:

英特尔 TBB 建议用户将粒度大小调整为大约 10,000 到 100,000 条处理指令,以实现最高效的并行性。但是,没有关于什么算作处理指令的指南。我是否计算求和、均衡、乘法、比较等;如果我这样做,这些操作的权重是多少?是否有任何分析工具可以按照 TBB 的方式计算处理指令?

【问题讨论】:

  • 在 linux 上,perf stat 计算 CPU 指令。它的 ocperf.py 包装器可以轻松计算 uops 和硬件性能计数器可以告诉您的其他内容。

标签: profiling intel tbb instructions


【解决方案1】:

凯文。正如亚历克斯所说,该指南是近似的,还涉及其他问题。例如,如果部分计算在锁定下访问数据,那可能会占据您的时间。如果每个任务的计算工作不平衡,那么调整单元大小就变得不那么重要了。

我没有找到关于确定分区大小的 TBB 文档,但有一个幻灯片集 here 讨论了“浴缸图”(幻灯片 7。)它演示了获得精确工作负载的要点不需要每个任务;会有一个可以很好地工作的范围。

如果可以的话,TBB 调度程序还将尝试通过从其他 CPU 窃取任务分区来平衡所有处理器之间的工作,因此一个不平衡的工作负载不会完全让您失去能力。

【讨论】:

    【解决方案2】:

    给出一个计算工作的合理执行时间是一个非常粗略的建议。这个想法是计算任务不应该太小,太大的任务没有好处。通常,如果您使用带有默认分区器 (auto_partitioner) 的并行算法,则无需担心这些规则。

    在某些情况下(例如,当您需要使用 simple_partitioner 时)您可以测量算法的串行时间并将其乘以 CPU 的频率。这个值可以让你了解整个问题的“指令”/“时钟滴答”的数量。因此,您可以将问题分成推荐大小的部分。

    至于工具,我想有很多分析工具可以计算您的应用程序在特定平台上的执行时间(或 CPU 指令)。 (见List of performance analysis tools)。此外,您可以尝试英特尔 VTune Amplifier,它可以估计英特尔 TBB 引入的开销(该工具对基于 TBB 的应用程序有特殊支持),以了解应用程序是否有效地使用了 TBB。

    【讨论】:

    • 我尝试了 Valgrind Cachegrind 和 VTune Amplifier 来获得处理指令的数量,但这些结果都没有与我的简单实验产生共鸣,例如 100 万求和、乘法等。我相信你在这个意义上是对的处理指令不完全映射到经过的挂钟时间。而且,TBB 的这些建议只是给出一个粗略的想法。尽管如此,我还是试图用一些理论工作来支持我的实验结果,但这似乎不是一项简单的任务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 2011-06-16
    • 2011-07-02
    相关资源
    最近更新 更多