当前位置: 首页 > 知识库问答 >
问题:

超线程与超标量执行

羊丰茂
2023-03-14

想象一个超标量(多个执行单元)并且还支持超线程(SMT)的CPU(或内核)。

为什么CPU可以真正并行执行的软件线程数通常由它拥有的逻辑内核(即所谓的硬件线程)的数量给出,而不是它拥有的执行单元总数?
如果我的理解是正确的,SMT实际上并没有实现真正的并行执行,它只是通过复制CPU的某些部分(存储架构状态的部分,但不是主要执行资源)来使上下文切换更快/更有效。另一方面,超标量架构允许每个时钟周期真正同时执行多个指令,因为CPU具有多个执行单元,即多个并行流水线,每个流水线都可以以真正的并行方式处理单独的线程。

例如,如果一个CPU有2个内核,每个内核有2个执行单元,那么它的硬件并发性(它真正可以并行执行的线程数)不应该是4吗?当SMT实际上不能实现真正的并行执行时,为什么它的硬件并发性是由逻辑核的数量给出的?

共有1个答案

米树
2023-03-14

你不能只是把指令塞进执行单元。
如果你想要两个双向SMT,你需要保持两个架构状态并获取两个指令流。

如果一个公司有100个开发人员,但是只有两个项目经理,它只能并行开发两个项目(但是如果它每天都进行PMs切换项目,它可以html" target="_blank">并发开发更多)。

如果一个CPU只能从两个指令流中取指令(只保存两个线程上下文),你可以只给它分配两个线程来并行执行。< br >但是,您可以进行时间分割,并发执行更多线程。

软件无法访问执行单元,这将导致循环论证(软件需要执行单元来执行,但是执行单元需要软件来执行)。< br > CPU将尝试尽可能多地使用eu,利用无序状态并推测任何可能的情况。< br >实际上,超线程只是让所有资源保持忙碌的一种方式(就像当他们无事可做时与另一个PM共享一个开发人员)。

但是,如果一切都失败了,欧盟没有被利用,那么这个可能的工作单元就完全浪费了。

 类似资料:
  • 这种方法的Java博士说 如果需要,最多等待给定的时间完成计算,然后检索其结果(如果可用)。 参数: 超时等待的最长时间 unit超时参数的时间单位 根据我的理解,我们对强加了一个超时,我们提交给,这样,我的将在指定的时间(超时)过去后中断 但是根据下面的代码,似乎超过了超时时间(2秒),我真的很难理解这一点。谁能给我指一下正确的路吗?

  • 本文向大家介绍C#线程执行超时处理与并发线程数控制实例,包括了C#线程执行超时处理与并发线程数控制实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#线程执行超时处理与并发线程数控制的方法。分享给大家供大家参考。具体实现方法如下: 特别说明: 1、为了测试方便,这里对存储过程的执行是模拟的 2、这里限制了并发执行存储过程的最大个数,但并没有对并发线程数进行控制,与文章标题略有不符,但程

  • 问题内容: 当使用and 对象时(提交任务时),如果我为将来的get函数指定一个超时值,则抛出a时基础线程会被杀死吗? 问题答案: 它不是。为什么会这样?除非你告诉。 例如,在有Callable的情况下,存在一个非常有效的担忧。如果您等待结果说20秒钟却没有得到结果,那么您对结果不再感兴趣。那时您应该完全取消任务。 像这样:

  • 我有一个应用程序,允许用户批量向图像添加水印。该应用程序将只使用一个线程,并且一次只能添加一个水印。 我希望用户能够更改一次运行的水印任务[线程]的数量:可能在设置中为[1-5],并且我不能使用固定的ThreadPool,因为它具有固定的池大小。 我研究了如何使用线程池执行器(ThreadPoolExecutor)私有静态线程池执行器(ThreadPoolExecutor)=(ThreadPool

  • 这个在线下有没有办法用? 我复制了该链接并保存为font-awesome.min.css,但它仍然不能像此链接一样脱机运行href=“css/font-awesome.min.css”rel=“stylesheet”type=“text/css”

  • 问题内容: 想在一个固定的时间内运行一个线程。如果未在该时间内完成,我想杀死它,抛出一些异常或以某种方式处理它。怎么做到呢? 我从该线程 了解到的一种方法是在该线程的run()方法内使用TimerTask。 有没有更好的解决方案呢? 编辑:添加赏金,因为我需要一个更明确的答案。下面给出的ExecutorService代码无法解决我的问题。为什么在执行完某些代码后就进入sleep()-我无法处理这段