yee*_*eha 4 benchmarking cpu-architecture microbenchmark memory-bandwidth
我对STREAM(http://www.cs.virginia.edu/stream/ref.html#runrules)基准测试有一些疑问。
* (a) Each array must be at least 4 times the size of the
* available cache memory. I don't worry about the difference
* between 10^6 and 2^20, so in practice the minimum array size
* is about 3.8 times the cache size.
Run Code Online (Sandbox Code Playgroud)
例如,我添加了两个额外的数组,并确保将它们与原始a / b / c数组一起访问。我相应地修改了字节记帐。使用这两个额外的阵列,我的带宽数量增加了约11.5%。
> diff stream.c modified_stream.c
181c181,183
< c[STREAM_ARRAY_SIZE+OFFSET];
---
> c[STREAM_ARRAY_SIZE+OFFSET],
> e[STREAM_ARRAY_SIZE+OFFSET],
> d[STREAM_ARRAY_SIZE+OFFSET];
192,193c194,195
< 3 * sizeof(STREAM_TYPE) * STREAM_ARRAY_SIZE,
< 3 * sizeof(STREAM_TYPE) * STREAM_ARRAY_SIZE
---
> 5 * sizeof(STREAM_TYPE) * STREAM_ARRAY_SIZE,
> 5 * sizeof(STREAM_TYPE) * STREAM_ARRAY_SIZE
270a273,274
> d[j] = 3.0;
> e[j] = 3.0;
335c339
< c[j] = a[j]+b[j];
---
> c[j] = a[j]+b[j]+d[j]+e[j];
345c349
< a[j] = b[j]+scalar*c[j];
---
> a[j] = b[j]+scalar*c[j] + d[j]+e[j];
Run Code Online (Sandbox Code Playgroud)
CFLAGS = -O2 -fopenmp -D_OPENMP -DSTREAM_ARRAY_SIZE = 50000000
我的上一级缓存约为35MB。
有通讯网吗?
谢谢!
这是用于Skylake Linux服务器的。
现代计算机中的内存访问比人们预期的要复杂得多,并且由于某些您以前不知道的“低级”细节,很难说出“高级”模型何时崩溃。 ..
STREAM基准代码仅测量执行时间-其他所有内容都派生出来。得出的数字基于有关我认为“合理”的决定以及有关大多数计算机的工作原理的假设。运行规则是反复试验的产物-试图在可移植性和通用性之间取得平衡。
STREAM基准报告每个内核的“带宽”值。这些简单的计算基于以下假设:必须从内存中读取每个循环右侧的每个数组元素,并且必须将每个循环左侧的每个数组元素写入内存。那么“带宽”就是移动的数据总量除以执行时间。
这种简单的计算涉及许多令人惊讶的假设。
有关避免“写分配”流量的其他说明:
STREAM 基准测试的目的不是测量峰值内存带宽(即系统上可以达到的最大内存带宽),而是测量多个内核(COPY、SCALE、SUM、和 TRIAD),这对 HPC 社区很重要。因此,当 STREAM 报告的带宽较高时,意味着 HPC 应用程序可能会在系统上运行得更快。
了解 STREAM 基准测试中术语“内存带宽”的含义也很重要,文档的最后一部分对此进行了解释。正如该部分中提到的,至少有三种方法可以计算基准的字节数。STREAM 基准测试使用 STREAM 方法,该方法在源代码级别对读取和写入的字节数进行计数。例如,在 SUM 内核 (a(i) = b(i) + c(i)) 中,读取两个元素并写入一个元素。因此,假设所有访问都是针对内存的,则每次迭代从内存访问的字节数等于数组的数量乘以元素的大小(即 8 字节)。STREAM 通过将访问的元素总数(使用 STREAM 方法进行计数)乘以元素大小,然后除以内核的执行时间来计算带宽。为了考虑运行之间的差异,每个内核都会运行多次,并报告算术平均值、最小和最大带宽。
正如您所看到的,STREAM 报告的带宽并不是真正的内存带宽(在硬件级别),因此说它是峰值带宽甚至没有意义。此外,它几乎总是远低于峰值带宽。例如,本文介绍了 ECC 和 2MB 页面如何影响 STREAM 报告的带宽。编写一个在现代英特尔处理器上实际实现最大可能内存带宽(在硬件级别)的基准测试是一项重大挑战,对于整个博士生来说可能是一个好问题。论文。但实际上,在 HPC 域中,峰值带宽不如 STREAM 带宽重要。(相关:有关在硬件级别测量内存带宽所涉及问题的信息,请参阅我的答案。)
关于您的第一个问题,请注意 STREAM 仅假设所有读取和写入均由主内存满足,而不是由任何缓存满足。分配一个比 LLC 大小大得多的数组有助于使这种情况更有可能发生。从本质上讲,有限责任公司复杂且未记录的方面,包括更换政策和安置政策,需要被克服。它不必比 LLC 大 4 倍。我的理解是,这就是带宽博士在实践中发现的有效方法。
| 归档时间: |
|
| 查看次数: |
429 次 |
| 最近记录: |