英特尔TBB建议用户将粒度调整为大约10,000到100,000个处理指令,以实现最高效的并行性。但是,关于什么算作处理指令,没有指导方针。我是否计算总结,均衡,乘法,比较等;如果我这样做,这些操作的权重是多少?是否有任何分析工具按照TBB的含义计算处理指令?
答案 0 :(得分:3)
凯文。正如亚历克斯所说,该指南是近似的,并且还涉及其他问题。例如,如果计算的一部分在锁定下访问数据,那么这可能会占据您的时间。如果每个任务的计算工作存在不平衡,那么调整单位大小就不那么重要了。
我没有找到关于确定分区大小的TBB文档,但是有一个幻灯片集here可以讨论"浴缸图" (幻灯片7.)它表明了不必为每个任务获得精确的工作量;将有一个适用范围。
TBB调度程序还将尝试通过从其他CPU窃取任务分区来平衡所有处理器的工作,如果可能的话,那么一个不平衡的工作负载并不会完全使您失去能力。
答案 1 :(得分:2)
这是一个非常粗略的建议,可以了解一项计算工作的合理执行时间。这个想法是计算任务不应该太小,任务太大也没有好处。通常,如果将并行算法与默认分区程序(auto_partitioner
)一起使用,则无需担心这些规则。
在某些情况下(例如,当您需要使用simple_partitioner
时),您可以测量算法的连续时间,并将其倍增到CPU的频率。该值可以让您了解整个问题的“指令”/“时钟滴答”数。因此,您可以将问题分成推荐大小的片段。
至于工具,我想有很多分析工具可以计算特定平台上应用程序的执行时间(或CPU指令)。 (见List of performance analysis tools)。此外,您可以尝试英特尔VTune Amplifier,它可以估算英特尔TBB引入的开销(该工具对基于TBB的应用程序有特殊支持),以了解应用程序是否有效地使用TBB。