Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >超线程SMT究竟可以快多少?(AMD Ryzen版 )

超线程SMT究竟可以快多少?(AMD Ryzen版 )

作者头像
Linux阅码场
发布于 2021-10-26 08:51:05
发布于 2021-10-26 08:51:05
3.3K10
代码可运行
举报
文章被收录于专栏:LINUX阅码场LINUX阅码场
运行总次数:0
代码可运行

昨天我们用Intel I9的10核,每个核2个threads的机器跑了内核的编译:

超线程SMT究竟可以快多少?

今天,我换一台机器,采用AMD Ryzen。

默认情况16核,每个核2个threads,共32个CPUs:

下面编译内核:

大约需要53秒。记得昨天用Intel I9 10核20线程需要2分钟30秒左右。

再来一遍:

这说明make clean, drop_caches后时间也差不多。51秒,53秒左右的正常抖动范围。

现在我们关闭smt,只保留16个CPU:

具体的关闭方法就是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo sh -c 'echo off > /sys/devices/system/cpu/smt/control'

这样只剩下16个CPU,下面来编译:

时间57秒,相对于51、53秒,速度下降不到10%。

这说明超线程SMT对编译内核这个workload的性能的提升绝对没有达到100%,甚至都没有达到10%。

我们现在重新开启超线程:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 sudo sh -c 'echo on > /sys/devices/system/cpu/smt/control

看一下哪个CPU和哪个CPU是thread sibling:

看起来CPU0和CPU16是一对,CPU1和CPU17是一对,依次类推。

刚才我们关闭SMT是把CPU16-CPU31全关了,只留下每对里面的1个CPU,也就是留下了CPU0-CPU15。

在开启SMT的时候(假设蓝色和红色是一个CORE里面的两个CPU):

在关闭SMT的时候,等于每对里面只留1个CPU:

现在我们换一种关法,一对对关,只留下8对,也就是8个core:

指令如下:

实现效果如下:

再重新编译内核:

现在耗时是1分21秒,相对于所有CPU全开,下降了很多,时间增大了59%,当然没有达到2倍

再想想昨天的Intel I9,关闭5个完整核耗时是3分10秒,全开10核是2分30秒,Intel一半核工作和所有核同时工作的差距远不如AMD那么明显

所以可以看出,就内核编译这个workload而言,AMD的16core相对于8core,性能的scale会更加成正比。当然AMD开关SMT,对内核编译这个workload而言,影响小于10%,而Intel I9的影响有14%。

很多童鞋昨天留言,说编译内核有一定的IO bound,另外提到link阶段是单线程,还有的童鞋说是Intel Turbo的影响,这些我们都认为是有一定道理的。但是,我始终坚信,profiling是检验猜想的唯一标准,后面有空再写一篇文章来profiling一些究竟是为什么。

这到底是为什么?牙膏厂的多核scalability究竟是不是骗纸?还是按摩店的部分核没有Intel部分核的威猛模式?「元芳,你怎么看?」

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Linux阅码场 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
为什么我的显示不支持呢,notsupport,有开启的方法吗?
为什么我的显示不支持呢,notsupport,有开启的方法吗?
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
【Python入门】Python 63个内置函数超级详解
Python内置了一些非常精巧且强大的函数,对初学者来说,一般不怎么用到,但是偶尔会碰到,我也是用了一段时间python之后才发现,卧槽,还有这么好的函数,每个函数都非常经典,而且经过严格测试,使用内置函数,不用自己闭门造车,并且代码简洁易读了很多,真是方便又实用,值得花时间进行体系化研究学习。
黄博的机器学习圈子
2020/05/26
8260
【Python入门】Python 63个内置函数超级详解
Python第一周 学习笔记(3)
python3的int就是长整型,且没有大小限制,受限于内存区域的大小 int(x) 返回一个整数
py3study
2020/01/07
7770
@陈同学的专属Python教程之常见数据结构
扫码_搜索联合传播样式-标准色版 - 副本.png 数字 转化为数字 int(x) 将x转换为一个整数。 float(x) 将x转换到一个浮点数。 complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0。 complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式。 # -*- coding: utf-8 -*- data = '123' print(int(data)+4) 四舍五入 #round() 方法返回浮点数 x
酒馆丁老师
2020/09/08
1.6K0
@陈同学的专属Python教程之常见数据结构
Python基础(03)
python的变量类型包括数字型:整数int 浮点型float 布尔型bool (真True假Flase)复数 complex 和非数字型 :字符串 列表 元组 字典 。今天介绍列表。
PM小王
2019/07/01
7590
Python3快速入门(三)——Pyth
Python3 中有六种标准数据类型: A、Number(数字) B、String(字符串) C、List(列表) D、Tuple(元组) E、Set(集合) F、Dictionary(字典) Python3 的六种标准数据类型中,Number(数字)、String(字符串)、Tuple(元组)是不可变的,List(列表)、Dictionary(字典)、Set(集合)是可变的。
py3study
2020/01/06
3.7K0
Python课程基础总结概括梳理【pyhton笔记】
Python3 手册学习:系统化全面化 视频学习:实用性高、学到了经验、用途 刷题平台:结合学习,事半功倍 1、Python可以同时为多个变量赋值,如a, b = 1, 2。 反斜杠()可以作为续行符 python库是可以其它语言编写,非常高效 python自身运行效率低于c 老师提供的学习网站http://sdlg.alphacoding.cn/course/292/chapters #格式化输出 a = 18 b = 12 print(f'今年{a}岁{b+1}')#这个更高效 #今年18岁13
来杯Sherry
2023/05/25
5200
教女朋友学 Python 第 3 天:语言元素
之前的文章中,我们已经对 Python 有所了解了,并且也学会了 Pycharm 的安装及使用。现在该开始正式进入主题了,接下来就要学习 Python 的相关语法,以及如何使用他们进行编程。
村雨遥
2021/03/15
8780
第一个Python程序(基础语法)
jupyter 工具的简单使用: jupyter 默认使用8888 的端口 通过web 访问即可 image.png Python 基础语法:(正题开始...) 注释—— # 标注的文本 数字 整数,不区分long和int 进制0xa、0o10、0b10 bool,2个值True、False 浮点数 1.2、3.1415、-0.12,1.46e9等价于1.46*109 复数,1+
江小白
2019/05/31
6820
python基础系列教程——python基础语法全解
Python是一种解释型(这意味着开发过程中没有了编译这个环节)、面向对象(支持面向对象的风格或代码封装在对象的编程技术)、动态数据类型的交互式(可在命令行中通过Python提示符及直接代码执行程序)高级程序设计语言。
全栈程序员站长
2022/09/15
1.2K0
Python程序与设计
概念:保留字是Python语言中已经被赋予特定意义的一些单词,开发程序时,不可以作为变量、函数、类、模块和其他对象的名称来使用。
青灯古酒
2023/10/16
2130
Python程序与设计
week02_python内置数据结构_
round() :四舍六入,五取偶 floor():向下取整 ceil():向上取整 int():取整数部分,和//整除一样
py3study
2020/01/14
2880
几个基础python防坑小常识
在 Python 中,所有东西都是对象,因此对于对象的任何实例检查都将返回True。
阿珍
2024/09/13
1360
几个基础python防坑小常识
PYTHON数据类型
Python3 中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Sets(集合) Dictionary(字典) Number(数字) Python3 支持int、float、bool、complex(复数)。 在Python 3里,只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。 像大多数语言一样,数值类型的赋值和计算都是很直观的。 内置的 type() 函数可以用来查询变量所指的对象类型。 >>> a, b, c,
企鹅号小编
2018/02/01
1.4K0
PYTHON数据类型
python3 内置函数详解
内置函数详解 abs(x) 返回数字的绝对值,参数可以是整数或浮点数,如果参数是复数,则返回其大小。 # 如果参数是复数,则返回其大小。 >>> abs(-25) 25 >>> abs(25) 25 all(iterable) all()会循环括号内的每一个元素,如果括号内的所有元素都是真的,或者如果iterable为空,则返回True,如果有一个为假的那么就返回False >>> all([]) True >>> all([1,2,3]) True >>> all([1,2,""]) Fa
程序员同行者
2018/06/22
9600
py基础语法1
数据类型包括整型(int),浮点型(float),字符串类型(str),布尔类型(bool)
code-child
2023/05/30
1450
py基础语法1
Python
概念:保留字是Python语言中已经被赋予特定意义的一些单词,开发程序时,不可以作为变量、函数、类、模块和其他对象的名称来使用。
青灯古酒
2023/10/16
1920
Python
Python之基础语法和六大数据类型
注释分为单行注释和多行注释两种,单行注释用#表示,多行注释用(三个双引号"“”“”")或‘(三个单引号’‘’‘’')表示。如下所示: ​​
用户10927761
2024/01/23
2972
Python之基础语法和六大数据类型
Python教程(三):基础数据类型
Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
山禾说
2019/01/21
6510
02 . Python之数据类型
变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。 因此,变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符.
iginkgo18
2020/09/27
1.8K0
02 . Python之数据类型
Python 基础一 (列表)
Python包含6中内建的序列,即列表、元组、字符串、Unicode字符串、buffer对象和 xrange 对象。最常见的是列表和元组。
数据STUDIO
2021/06/24
7550
相关推荐
【Python入门】Python 63个内置函数超级详解
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验