Roofline 模型:增加算术强度如何为性能改进留出空间?
Roofline model: How does increasing Arithmetic Intensity allow room for improvements to performance?
Intel Tip: If you can’t break a memory roof, try to rework your algorithm for
higher arithmetic intensity. This will move you to the right and give
you more room to increase performance before hitting the memory
bandwidth roof.
对于屋顶线图的内存限制区域中的算法,Intel 建议增加算术强度,以便它们向右移动(计算限制区域),从而提供提高性能的空间,因为性能屋顶会更高。
我无法理解增加算术强度(例如,增加算法中的操作数)如何可能改善性能指标,例如算法花费的挂钟时间 运行.你不需要做更多吗?计算甚至更高的性能(以 FLOPS 计)?有人可以解释这是怎么可能的吗?
仅增加算术运算不足以使算法更快。这个想法是,如果您可以在多种算法之间进行选择,并且其中一种算法受内存限制,那么最好选择另一种算法,假设它在实践中不会慢很多,因为您几乎无法优化 memory-bound 算法,而这compute-bound 一个通常更容易。在过去十年中,内存延迟几乎没有太大改善,带宽只是缓慢增加(远低于处理器的 FLOPS 数量)。这就是所谓的记忆墙(几十年前就有的说法)。现在移动数据变得如此昂贵,以至于有时重新计算操作比存储以前的结果更好。对于非常大的数据尤其如此,因为数据结构越大,速度就越慢。预计这种情况在未来几十年会变得更糟。因此,在不久的将来,较慢的 compute-bound 算法可能会变得比 memory-bound 算法更快(特别是如果它 can-be/is 并行化)。
Intel Tip: If you can’t break a memory roof, try to rework your algorithm for higher arithmetic intensity. This will move you to the right and give you more room to increase performance before hitting the memory bandwidth roof.
对于屋顶线图的内存限制区域中的算法,Intel 建议增加算术强度,以便它们向右移动(计算限制区域),从而提供提高性能的空间,因为性能屋顶会更高。
我无法理解增加算术强度(例如,增加算法中的操作数)如何可能改善性能指标,例如算法花费的挂钟时间 运行.你不需要做更多吗?计算甚至更高的性能(以 FLOPS 计)?有人可以解释这是怎么可能的吗?
仅增加算术运算不足以使算法更快。这个想法是,如果您可以在多种算法之间进行选择,并且其中一种算法受内存限制,那么最好选择另一种算法,假设它在实践中不会慢很多,因为您几乎无法优化 memory-bound 算法,而这compute-bound 一个通常更容易。在过去十年中,内存延迟几乎没有太大改善,带宽只是缓慢增加(远低于处理器的 FLOPS 数量)。这就是所谓的记忆墙(几十年前就有的说法)。现在移动数据变得如此昂贵,以至于有时重新计算操作比存储以前的结果更好。对于非常大的数据尤其如此,因为数据结构越大,速度就越慢。预计这种情况在未来几十年会变得更糟。因此,在不久的将来,较慢的 compute-bound 算法可能会变得比 memory-bound 算法更快(特别是如果它 can-be/is 并行化)。