多部分基准的权重是多少?

时间:2019-10-03 03:50:48

标签: c++ c benchmarking

我正在为学校项目编写基准。这很简单,但我想知道在现实生活中,各种基准测试所使用的典型权重是多少?例如,如果我要组合一个整数测试,一个缓存测试,一个浮点测试,是否应该在最终的“得分”中对它们进行均等的加权?我的直觉是,对于很多事情而言,缓存测试比原始算术更重要,而对于很多事情而言,RAM速度是一个很大的因素。有共识吗?

1 个答案:

答案 0 :(得分:3)

没有通用的权重集。

不同的实际工作负载具有不同的瓶颈或权重。

没有一个数字可以告诉您计算机的运行速度。(在现实生活中)程序X可能在计算机A上运行速度更快,然后在计算机B上运行,但是程序Y的运行速度更快在计算机B上。

为微基准选择一组权重完全取决于您您想要表示什么,以及您希望它作为什么样的工作量的粗略指标。


例如密集的对象通常可以使FMA执行单元的吞吐量达到饱和,因为它可以对N ^ 2数据进行O(N ^ 3)处理。通过仔细的缓存阻止,您可以获得大部分L1d缓存命中率,并且每个FMA避免进行超过1次SIMD矢量加载。 DRAM /缓存的带宽必须足够高才能跟上,但是大多数存储/重载都命中了L1d缓存(当然也必须能够跟上)。

但是其他工作负载可能会瓶颈在内存带宽或延迟上,根本不关心FPU吞吐量。例如AMD Ryzen 1可以每个时钟执行1个128位FMA,而Intel Haswell及更高版本可以每个时钟执行2个256位FMA。但是对于其他一些工作负载,Ryzen的速度更快甚至几乎相等。

在多核系统上,某些程序是单线程的,只关心单核吞吐量,而其他程序则可以很好地扩展并在具有许多慢速内核的计算机上获得很大的加速。或者他们可能关心内核间延迟与总内存带宽之间的关系。

相关问题