Stream的简单学习

stream,简单,学习 · 浏览次数 : 213

小编点评

Function Best Rate MB/s Avg time Min time Max timeCopy: 56055.8 0.038005 0.037962 0.038032Scale: 52517.3 0.040593 0.040520 0.040656Add: 52852.9 0.060418 0.060394 0.060440Triad: 52811.0 0.060483 0.060442 0.060538

正文

Stream的简单学习


前言

https://github.com/jeffhammond/STREAM

unzip STREAM-master.zip 
cd /STREAM-master/
make
就可以编译完成

含义

STREAM 是业界广为流行的综合性内存带宽实际性能 测量 工具之一。
随着处理器处理核心数量的增多,内存带宽对于提升整个系统性能越发重要,
如果某个系统不能够足够迅速地将内存中的数据传输到处理器当中,
若干处理核心就会处于等待数据的闲置状态,
而这其中所产生的闲置时间不仅会降低系统的效率还会抵消多核心和高主频所带来的性能提升因素。
STREAM 具有良好的空间局部性,是对 TLB 友好、Cache友好的一款测试。
STREAM支持Copy 、Scale 、 Add、 Triad四种操作,下面分别介绍四种操作的含义:

1. Copy操作最为简单,它先访问一个内存单元读出其中的值,再将值写入到另一个内存单元。
2. Scale操作先从内存单元读出其中的值,作一个乘法运算,再将结果写入到另一个内存单元。
3. Add操作先从内存单元读出两个值,做加法运算, 再将结果写入到另一个内存单元。
4. Triad的中文含义是将三个组合起来

测试说明

编译处理
gcc -O3 -fopenmp -DSTREAM_ARRAY_SIZE=102400000 -DNTIMES=10 stream.c -o stream

注意需要说明一下
-O3 是最高优化级别。
-fopenmp 打开多线程,默认是CPU进程棵树个进行测试。
-DNTIMES 是测试次数
-DSTREAM_ARRAY_SIZE 是数据大小, 一般越大了测出来的带宽值越高, 但是太高了无法编译通过。

numa节点验证

CPU的内存宽带于延时于numa节点是比较关联的。
此时可以使用taskset的方式进行测试与验证。 
自己进行了下简单验证(没有看源码的情况)
最大的编译参数为:
gcc -O3 -fopenmp -DSTREAM_ARRAY_SIZE=133000000 -DNTIMES=10 stream.c -o stream07

可以利用stream07 进行带宽和延迟的确认
比如我有一个四路18核心,超线程一共144核心的机器。
lscpu的信息为:

Model name:            Intel(R) Xeon(R) Gold 6150 CPU @ 2.70GHz
NUMA node0 CPU(s):     0-17,72-89
NUMA node1 CPU(s):     18-35,90-107
NUMA node2 CPU(s):     36-53,108-125
NUMA node3 CPU(s):     54-71,126-143

所以可以基于此进行一下内存带宽测试
taskset -c 0-17 ./stream07 
Function    Best Rate MB/s  Avg time     Min time     Max time
Copy:           80698.3     0.038024     0.026370     0.050407
Scale:          71702.7     0.045104     0.029678     0.063957
Add:            82799.7     0.049889     0.038551     0.061930
Triad:          79870.1     0.050717     0.039965     0.061486

taskset -c 0-17,72-89 ./stream07 
Function    Best Rate MB/s  Avg time     Min time     Max time
Copy:           80909.8     0.041473     0.026301     0.050996
Scale:          66545.5     0.044492     0.031978     0.054915
Add:            74106.9     0.057651     0.043073     0.080074
Triad:          74125.3     0.052560     0.043062     0.067384

taskset -c 8-25 ./stream07 
Function    Best Rate MB/s  Avg time     Min time     Max time
Copy:           77104.0     0.032293     0.027599     0.041383
Scale:          73651.1     0.039079     0.028893     0.044384
Add:            94898.7     0.044708     0.033636     0.051819
Triad:          74424.5     0.051721     0.042889     0.053071

云海物理机和虚拟机的情况

8核心虚拟机:
-------------------------------------------------------------
Function    Best Rate MB/s  Avg time     Min time     Max time
Copy:           55348.7     0.039446     0.038447     0.040298
Scale:          51103.5     0.042791     0.041641     0.044352
Add:            56728.5     0.058115     0.056268     0.061302
Triad:          55520.8     0.058673     0.057492     0.062518

仅使用物理机器上面8个核心的服务器的情况
Function    Best Rate MB/s  Avg time     Min time     Max time
Copy:           48413.5     0.091299     0.044153     0.244530
Scale:          41152.8     0.078635     0.051943     0.114169
Add:            37340.2     0.122306     0.085870     0.175331
Triad:          47968.4     0.119108     0.066844     0.235003

发现云海OS的宿主机可能内核较早性能不是特别好。不建议用虚拟机作为生产
Model name:            Intel(R) Xeon(R) Gold 5118 CPU @ 2.30GHz
NUMA node0 CPU(s):     0-11,24-35
NUMA node1 CPU(s):     12-23,36-47

机器信息为:
Linux node-653-137 3.10.0-957.1.1.el7.x86_64 #1 SMP Wed Jul 28 14:46:37 EDT 2021 x86_64 x86_64 x86_64 GNU/Linux

看看国产化设备的数据-飞腾

飞腾S2500
NUMA 节点0 CPU:                 0-7
NUMA 节点1 CPU:                 8-15
NUMA 节点2 CPU:                 16-23
NUMA 节点3 CPU:                 24-31
NUMA 节点4 CPU:                 32-39
NUMA 节点5 CPU:                 40-47
NUMA 节点6 CPU:                 48-55
NUMA 节点7 CPU:                 56-63
NUMA 节点8 CPU:                 64-71
NUMA 节点9 CPU:                 72-79
NUMA 节点10 CPU:                80-87
NUMA 节点11 CPU:                88-95
NUMA 节点12 CPU:                96-103
NUMA 节点13 CPU:                104-111
NUMA 节点14 CPU:                112-119
NUMA 节点15 CPU:                120-127

测试情况:
taskset -c 0-7 ./stream07
Function    Best Rate MB/s  Avg time     Min time     Max time
Copy:            3758.6     0.567231     0.566170     0.569430
Scale:           3845.8     0.553693     0.553331     0.554323
Add:             3765.9     0.850122     0.847612     0.853893
Triad:           3725.3     0.858621     0.856852     0.861436

taskset -c 0-15 ./stream07
Function    Best Rate MB/s  Avg time     Min time     Max time
Copy:            5259.5     0.407384     0.404602     0.410021
Scale:           5268.6     0.417937     0.403900     0.423356
Add:             5797.0     0.565010     0.550634     0.577339
Triad:           5650.2     0.576209     0.564937     0.586471

全核心的带宽为:
Function    Best Rate MB/s  Avg time     Min time     Max time
Copy:           49553.0     0.078493     0.042944     0.110835
Scale:          52869.5     0.072087     0.040250     0.102296
Add:            49359.7     0.107320     0.064668     0.147577
Triad:          49677.1     0.104581     0.064255     0.147939

说明: 
飞腾128核心的内存带看不如Intel 6150
速度也比较差一些。 访存性能差距较大。

国产设备内存性能-海光

NUMA 节点0 CPU:                 0-7,64-71
NUMA 节点1 CPU:                 8-15,72-79
NUMA 节点2 CPU:                 16-23,80-87
NUMA 节点3 CPU:                 24-31,88-95
NUMA 节点4 CPU:                 32-39,96-103
NUMA 节点5 CPU:                 40-47,104-111
NUMA 节点6 CPU:                 48-55,112-119
NUMA 节点7 CPU:                 56-63,120-127

taskset -c 0-7 ./stream07
Function    Best Rate MB/s  Avg time     Min time     Max time
Copy:           31427.2     0.067976     0.067712     0.069821
Scale:          20904.3     0.102741     0.101797     0.109792
Add:            23203.4     0.139136     0.137566     0.144384
Triad:          23167.7     0.138510     0.137778     0.142723

全核心性能为:
Function    Best Rate MB/s  Avg time     Min time     Max time
Copy:          113820.7     0.022691     0.018696     0.045123
Scale:         101512.4     0.022498     0.020963     0.023655
Add:           101659.3     0.033122     0.031399     0.033853
Triad:         105336.1     0.031282     0.030303     0.033287

海光机器的性能还是非常可观的。

AMD9T34 虚拟机

16核心的虚拟机,内存带宽56GB左右。 不管是1-8核心还是全部核心结果比较相近。

Function    Best Rate MB/s  Avg time     Min time     Max time
Copy:           56055.8     0.038005     0.037962     0.038032
Scale:          52517.3     0.040593     0.040520     0.040656
Add:            52852.9     0.060418     0.060394     0.060440
Triad:          52811.0     0.060483     0.060442     0.060538


倚天710 虚拟机

8核心的倚天虚拟机 内存带宽爆表 基本上是最高的档次,时间基本上也是最低的。
Function    Best Rate MB/s  Avg time     Min time     Max time
Copy:           98614.3     0.022174     0.021579     0.026098
Scale:          99152.2     0.022183     0.021462     0.026906
Add:            98223.9     0.033475     0.032497     0.040199
Triad:          98640.1     0.033317     0.032360     0.039705

与Stream的简单学习相似的内容:

Stream的简单学习

Stream的简单学习 前言 https://github.com/jeffhammond/STREAM unzip STREAM-master.zip cd /STREAM-master/ make 就可以编译完成 含义 STREAM 是业界广为流行的综合性内存带宽实际性能 测量 工具之一。 随着

开源相机管理库Aravis例程学习(四)——multiple-acquisition-signal

目录简介例程代码函数说明g_main_loop_newg_main_loop_rung_main_loop_quitg_signal_connectarv_stream_set_emit_signalsQ&A回调函数的同步调用与异步调用帧丢失问题 简介 本文针对官方例程中的:02-multiple-

函数式编程(Lambda、Stream流、Optional等)

# 声明 文档来源:Github@shuhongfan 源文档:B站UP主:三更草堂 # 函数式编程-Stream流 # 概述 # 为什么学? 基操,否则看不懂别人写的优雅代码 简化代码,不想看到有些恶心代码 大数据下处理集合效率高 // 【恶心级代码】查询未成年作家的评分在70以上的书籍 由于洋流

CentOS9上面使用rpm方式安装SQLServer2022的简单总结

CentOS9上面使用rpm方式安装SQLServer2022的简单总结 下载需要的资料 下载CentOS9 Stream的安装介质 https://mirrors.bfsu.edu.cn/centos-stream/9-stream/BaseOS/x86_64/iso/CentOS-Stream-

还在stream中使用peek?不要被这些陷阱绊住了

简介 自从JDK中引入了stream之后,仿佛一切都变得很简单,根据stream提供的各种方法,如map,peek,flatmap等等,让我们的编程变得更美好。 事实上,我也经常在项目中看到有些小伙伴会经常使用peek来进行一些业务逻辑处理。 那么既然JDK文档中说peek方法主要是在调试的情况下使

[转帖]内存性能 - STREAM

https://zhuanlan.zhihu.com/p/510954835 很多时候有测试有数据, 却没有分析, 这样的性能数据是有隐患的. STREAM测试足够简单, 4个测试用例, 每个用例3行核心代码, 毫无疑问是个"简单"的测试, 但要做好缺不容易. 本文以Intel平台为例, 虽然特性可

Java Stream 必须掌握的几种用法

Stream 是 Java8 推出的一套简化集合、数组操作的 API,掌握 Stream 的用法将极大的提升我们的编程能力。 流的获取 通过 Stream 自带的 API 获取: // 通过传入可变参数构造 static Stream of(T... values); // 指定一个常量

Centos Stream 10 测试版下载:未来的RHEL10&Rocky Linux 10

简介 最近发现Centos最放出了Stream 10 测试版本,应该是基于Fedora 40构建的。未来红帽会基于此版本构建RHEL 10。 内核版本:6.9.0 Python版本:3.12.2 RHEL系发行版对应关系 Fedora (根发行版-软件实时更新-只支持一年) >>某一版本作为基准版本

STM32F1和STM32F4系列DMA的不同之处——对STM32的DMA的工作机制和场景的一些理解[原创www.cnblogs.com/helesheng]

比较STM32F4和STM32F1系列的DMA控制器,区别主要有三:1)增加了DMA流(Stream)的概念;2)限制了两个DMA控制器的数据流向;3)为每个数据流添加了可配置的FIFO缓冲区。 本文逐一比较了以上三种硬件上的改变带来的功能方面的升级和不同。另外,还大胆猜测了STM32的芯片设计者对...

Eventsource

## 1、背景 当我使用chatGpt时,服务端可以实时像我推送答案。起初以为是用了websocket技术,但是后来发现是用了Eventsource ## 2、什么是Eventsource 不知道大家有没有见过 Content-Type:text/event-stream 的请求头,这是 HTML5