超线程/SMT 是一个有缺陷的概念吗?

2024-02-24

HT/SMT 背后的主要思想是,当一个线程停止时,同一核心上的另一个线程可以选择该核心的其余空闲时间并透明地与之一起运行。

2013 年,英特尔放弃了 SMT,转而采用乱序执行 Silvermont 处理器核心,因为他们发现这可以提供更好的性能 表现。

ARM 不再支持 SMT(出于能源原因)。 AMD从来不支持它。在野外,我们仍然有各种支持它的处理器。

从我的角度来看,如果数据和算法的构建是为了不惜一切代价避免缓存未命中和后续处理停顿,那么超线程肯定是多核系统中的冗余因素吗?虽然我意识到所涉及的上下文切换的开销较低,因为两个超线程的离散硬件存在于同一物理内核中,但我看不出这比根本没有上下文切换更好。

我建议任何need超线程指出了软件设计的缺陷。我在这里缺少什么吗?


超线程是否有帮助以及有多大帮助取决于线程正在做什么。它不仅仅是在一个线程中完成工作,而另一个线程等待 I/O 或缓存未命中 - 尽管这是基本原理的重要组成部分。它涉及有效利用 CPU 资源来提高系统总吞吐量。假设你有两个线程

  1. 一个有很多数据缓存未命中(空间局部性差)并且不使用浮点,空间局部性差不一定是因为程序员做得不好,某些工作负载本质上就是如此。
  2. 另一个线程正在从内存中传输数据并进行浮点计算

通过超线程,这两个线程可以共享同一个 CPU,一个正在执行整数运算并导致缓存未命中和停止,另一个正在使用浮点单元,并且数据预取器远远领先于内存中的顺序数据。系统吞吐量比操作系统在同一 CPU 核心上交替调度两个线程要好。

英特尔选择不在 Silvermont 中包含超线程,但这并不意味着它将在高端 Xeon 服务器处理器甚至针对笔记本电脑的处理器中取消它。选择处理器的微架构需要权衡,有很多考虑因素:

  1. 目标市场是什么(将运行什么样的应用程序)?
  2. 目标晶体管技术是什么?
  3. 绩效目标是什么?
  4. 功率预算是多少?
  5. 目标芯片尺寸是多少(影响良率)?
  6. 它在公司未来产品的性价比范围内处于什么位置?
  7. 目标推出日期是哪一天?
  8. 有多少资源可用于实施和验证设计?添加微架构功能会增加非线性的复杂性,与其他功能存在微妙的相互作用,目标是在第一次“流片”之前识别尽可能多的错误,以最大程度地减少在完成之前必须完成的“步骤”一个工作芯片。

Silvermont 的每核心芯片尺寸预算和功耗预算排除了乱序执行和超线程的可能性,而乱序执行提供了更好的单线程性能。这是 Anandtech 的评估 http://www.anandtech.com/show/6936/intels-silvermont-architecture-revealed-getting-serious-about-mobile/3:

如果我必须用 Silvermont 来描述英特尔的设计理念,那就是合理的扩展。我们从 Apple 的 Swift 以及高通的 Krait 200 到 Krait 300 的过渡中看到了这一点。请记住最初 Atom 的设计规则:性能每提高 2%,Atom 架构师最多可以将功率提高 1%。换句话说,性能可以上升,但每瓦性能不能下降。 Silvermont 坚持这种设计理念,我想我知道如何做到这一点。

Atom 的早期版本使用超线程技术来充分利用执行资源。超线程会带来一定的功耗损失,但性能的提升足以证明它的合理性。在 22 纳米工艺中,英特尔拥有足够的芯片面积(得益于晶体管缩放),只需添加更多内核即可,而不是依靠 HT 来获得更好的线程性能,因此超线程被淘汰。英特尔通过摆脱超线程技术节省的电量随后被分配到使 Silvermont 成为无序设计,这反过来又有助于在没有超线程的情况下提高执行资源的有效利用。事实证明,在 22 纳米工艺下,英特尔用于启用 HT 的芯片面积与 Silvermont 的重排序缓冲区和 OoO 逻辑大致相同,因此此举甚至没有面积损失。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

超线程/SMT 是一个有缺陷的概念吗? 的相关文章

  • C# 系统 CPU 使用情况并与 Windows 任务管理器同步

    这是一个由两部分组成的问题 我想将我的代码发布到堆栈上以帮助其他人完成相同的任务 问题一 我有一个代码子集 我相信它可以根据测量间隔正确测量 CPU 使用情况 根据检索的时间跨系统中的尽可能多的核心 我在线程调用中使用 1 秒 我必须从网上
  • 单线程公寓问题

    从我的主窗体中 我调用以下命令来打开一个新窗体 MyForm sth new MyForm sth show 一切都很好 但是这个表单有一个组合框 当我将其 AutoCompleteMode 切换为建议和追加时 我在显示表单时遇到了这个异常
  • 没有公平性的DelayQueue有问题吗?

    在 Java 7 中 DelayQueue 的实现使用没有公平策略的 ReentrantLock 从长远来看 这是一个问题吗 线程会因此而饿死吗 Thanks 如果您考虑ScheduledThreadPoolExecutor 或任何其他生产
  • 我可以在 R 中并行读取 1 个大 CSV 文件吗? [复制]

    这个问题在这里已经有答案了 我有一个很大的 csv 文件 需要很长时间才能阅读 我可以使用 parallel 或相关的包在 R 中并行读取此内容吗 我尝试过使用 mclapply 但它不起作用 根据OP的评论 fread来自data tab
  • 硬件线程与软线程?

    我读过 在多核处理器中 每个核心包含 2 个硬件线程 例如在双核处理器中 有 4 个硬件线程正在运行 现在 如果我在 Java 中创建 2 个线程 这些线程是否会映射到 2 个硬件线程 或者这 2 个 Java 线程由特定核心的单个硬件线程
  • 当应用程序终止时,我可以安全地依赖 Threads 中的 IsBackground 吗?

    我正在 GUI 中运行一些后台线程 目前 我正在实现个人线程取消代码 但线程中有 IsBackground 属性 根据 MSDN 它们会自行取消 我知道它将进入 Thread Abort 这很令人讨厌 但是在这个后台线程中没有任何事情需要我
  • 等待 .NET 线程启动的正确方法是什么?

    我在微软网站上的线程教程中阅读了以下内容 http msdn microsoft com en us library aa645740 v vs 71 aspx http msdn microsoft com en us library a
  • Java Executor 根据 CPU 和 RAM 使用情况调整线程池

    我的应用程序使用 Executor 为大量任务提供线程池 通过分析和基准测试 我确定当每个核心有多个线程时 我的应用程序运行速度最快 一个好的启发式方法是从每个核心 4 个线程开始 不断变化 直到达到 gt 90 CPU 或 gt 90 R
  • Unity3d 中的多线程脚本调用

    我试图在Unity3d中实现多线程脚本执行 但是Unity库似乎没有提供方法 我们必须使用Mono提供的System Threading 但他们提到 Unity Scripting 不是线程安全的 我可以使用 System threadin
  • C# 的空条件委托调用线程安全吗? [复制]

    这个问题在这里已经有答案了 这就是我一直以来编写事件引发者的方式 例如属性更改 public event PropertyChangedEventHandler PropertyChanged private void RaisePrope
  • 不支持 STA 线程上多个句柄的 WaitAll

    为什么我会收到此错误消息 不支持 STA 线程上多个句柄的 WaitAll 我应该使用 STAThreadAttribute 属性吗 Update 不适用于 WPF 应用程序 笔记 错误位于 WaitHandle WaitAll doneE
  • 插入并发问题-多线程环境

    我有一个问题 即使用完全相同的参数在完全相同的时间调用相同的存储过程 存储过程的目的是获取记录 如果存在 或创建并获取记录 如果不存在 问题是两个线程都在检查记录是否存在并报告错误 然后都插入新记录 在数据库中创建重复记录 我尝试将操作保留
  • 使用 Boost:Asio 的游戏服务器如何异步工作?

    我正在尝试创建一个游戏服务器 目前我正在使用线程来制作它 每个对象 玩家 怪物 都有自己的带有 while 1 循环的线程 在其中执行特定的功能 服务器基本上是这样工作的 main some initialization while 1 r
  • Android:如何暂停和恢复可运行线程?

    我正在使用 postDelayed 可运行线程 当我按下按钮时 我需要暂停并恢复该线程 请任何人帮助我 这是我的主题 protected void animation music6 music4 postDelayed new Runnab
  • 为什么在谈论线程和进程时,“不要同时格式化软盘”的评论很有趣?

    我正在阅读之间的区别线程和进程 https stackoverflow com questions 200469 what is the difference between a process and a thread并在第二个答案中发现
  • 通过推送通知唤醒

    Suppose 有一些对象 例如 一个数组a 和依赖于对象的条件 例如 a empty 当前线程以外的某些线程可以操作该对象 a 因此条件评估值的真实性会随着时间的推移而变化 如何让当前线程在代码中的某个时刻休眠 并在条件满足时通过推送通知
  • 如何使用 runOnUiThread 而不出现“无法对非静态方法进行静态引用”编译器错误

    我有一个主课 ClientPlayer extends Activity 和一项服务 LotteryServer extends Service implements Runnable 当尝试在此服务的 run 方法中使用 RunOnUiT
  • 张量流和线程

    下面是来自 Tensorflow 网站的简单 mnist 教程 即单层 softmax 我尝试通过多线程训练步骤对其进行扩展 from tensorflow examples tutorials mnist import input dat
  • fprintf() 线程安全吗?

    我正在为野人就餐问题的某些变量编写一个 C 解决方案 现在 我创建线程 每个线程都将 FILE 获取到同一个调试文件 在线程内我正在使用 fprintf 进行一些打印 打印的语句不受任何类型的互斥锁等保护 我没有在调试文件中观察到任何交错行
  • 终结器线程的范围是什么 - 每个应用程序域或每个进程?

    根据我的所有阅读 应该有一个 GC 线程来调用所有终结器 现在的问题是这个 一个 线程的范围是什么 每个进程或每个应用程序域 因为域的整体目的是在一个进程空间中分离并创建 独立 的不同应用程序 I read here http dn cod

随机推荐

  • JVisualVM 内存采样:不支持远程应用程序

    我正在尝试在 Red Hat Linux 中使用 JVisualVM 监视远程 tomcat 进程 CPU 采样工作正常 但内存采样选项卡被禁用 它说 内存采样 不可用 不支持远程应用程序 进程的命令行参数 Djavac source 1
  • 如何在 aspx 页面中包含 adovbs.inc 文件?

    我正在将 ASP 经典页面转换为 ASP NET 将扩展名为 inc 的文件包含到 aspx 页面的正确方法是什么 我注意到 每次我将包含指向 inc 文件的 include 指令的页面之一更改为 aspx 时 我都会从这些 inc 文件中
  • 如何在 C++ 中跟踪 BFS 深度

    我想对二维数组进行BFS 每个单元格可以表示为pair
  • PHP bcompiler 编码的代码有多安全?

    我很感兴趣是否有人确切知道 PHP 的有效性 安全性 受保护程度b编译器 http www php net manual en intro bcompiler php反对逆向工程 简介页面做出了大胆的声明 在代码保护方面 可以肯定地说 如果
  • 如何在受 AWS Linux AMI 限制的情况下,将 SoX 二进制文件打包为 NodeJS AWS Lambda 函数的 MP3 支持?

    过去三个月我一直在研究这个问题 但完全陷入困境 我正在尝试打包我的 NodeJS AWS Lambda 函数 该函数将使用SoX http sox sourceforge net以及将音频文件转换为 MP3 的依赖项 我可以按照引用的说明让
  • Grails 2.3.7 删除 itext 2.0.8 jar

    我尝试将应用程序从 grails 2 2 4 更新到 2 3 7 但 iText 依赖项存在问题 执行 grails 资源依赖项显示我有 2 个用于 iText 的 jar org grails grails docs 2 3 7 org
  • 如何读取haskell类型签名?

    所以我把这个声明放在我的ghci上 jkl x f y f map y x 我把这个放回去了 jkl Num b gt b gt b gt t gt b gt t 但当我读到它时我很困惑 根据我的理解 jkl 是 num 类型 它采用 b
  • 如何用 gulp-rev 的输出替换 index.html 中列出的文件名?

    我在用着gulp rev https www npmjs org package gulp rev 构建我可以设置的静态文件永不过期 http developer yahoo com performance rules html expir
  • 使用服务帐户访问 Google Analytics API

    我可以使用客户端应用程序中的服务帐户访问 Google Analytics 数据吗 如果没有 是否有其他方法可以达到相同的结果 必须完全是客户端的 并且不能要求用户进行身份验证 因此需要使用服务帐户 是的 你可以在https code go
  • 用于 DOM 的 Gecko API

    Gecko 是否公开了直接使用其 DOM 的 API 我正在寻找像 HtmlElement 这样的类 可用于构建 遍历 HTML 内容树 我正在尝试将 Gecko 作为桌面应用程序中的 Web 浏览器控件托管 并且更喜欢直接 API 而不是
  • NuGet Pack:忽略默认包含

    这与我通常读到的问题相反 即人们试图获取 NuGet 包中包含的文件 我试图stop文件被自动包含 我正在创建一个预编译的 MVC 视图模板库 使用 RazorGenerator Mvc less文件和 JavaScript 来根据需要支持
  • 如何为 Flutter 中禁用的文本表单字段标签设置颜色主题?

    我想在我的 Flutter 应用程序中禁用文本字段的标签上应用一个主题 因为我现在的灰色很难阅读 我想将其应用到我的整个应用程序 所以我想使用主题 但是 我没有找到任何解决方案可以让我自定义标签的文本样式仅当文本表单字段被禁用时 如何在 F
  • Thunderbird 议程本机系统通知? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 几周来我一直在寻找这个问题的答案 我想我可能会直接问这个问题 我在 Windows 10 上使用 Thunderbird 102 6
  • 使用 PHP 5.5 在 Amazon EC2 上安装 pdo_mysql

    我创建了一个 Amazon Linux AMI 2013 09 02 服务器并安装了以下内容 yum install php55 php55 mbstring php55 soap php55 gd php55 mcrypt php55 p
  • 在 Procfile 中启动多个工作进程(开发环境与 Heroku)

    我有一个简单的 Procfile 内容如下 web bundle exec rails server thin p PORT worker bundle exec rake jobs work 在 Heroku 上 这将启动 N 个工作任务
  • Java HashMap 数组大小

    我正在阅读Java 8 HashMap的实现细节 谁能告诉我为什么Java HashMap初始数组大小具体是16 16岁有什么特别之处 为什么总是两个人的力量 谢谢 2 的幂之所以到处出现 是因为当用二进制表示数字时 就像在电路中一样 2
  • 我们如何为 pom.xml 创建一个 build.gradle 等效文件来构建和部署 AEM 代码?

    我正在尝试创建一个构建 gradle文件 例如完整的 pom xmlAEM Maven 原型 https github com Adobe Marketing Cloud aem project archetype or 懒骨头模板 htt
  • 将 id 分开并存储在两个不同的数组中

    NSString string vlaue Highlight 1234 1235 1236 1237 Issuer 100 101 102 103 我需要将 1234 1235 1236 1237 存储在一个数组中 100 101 102
  • 自动激活Maven中的父插件

    是否可以在父 POM 中定义一个已停用的插件 并且当子项目继承此插件时 它会自动激活 我猜您想在父 pom 中配置该插件 但仅在继承的项目中使用它 Maven 有一个专门的部分 在pluginManagement 中配置你的插件 但在你需要
  • 超线程/SMT 是一个有缺陷的概念吗?

    HT SMT 背后的主要思想是 当一个线程停止时 同一核心上的另一个线程可以选择该核心的其余空闲时间并透明地与之一起运行 2013 年 英特尔放弃了 SMT 转而采用乱序执行 Silvermont 处理器核心 因为他们发现这可以提供更好的性