RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1287668
Accepted
n 1 k z z z
n 1 k z z z
Asked:2022-05-30 02:16:28 +0000 UTC2022-05-30 02:16:28 +0000 UTC 2022-05-30 02:16:28 +0000 UTC

处理器架构和微架构的区别?

  • 772

处理器的“架构”和“微架构”这两个术语有区别吗?

железо
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    eanmos
    2022-05-30T03:14:05Z2022-05-30T03:14:05Z

    通常,“架构”是指指令集架构 (ISA) 级别的架构。

    让我们记住,CPU 的主要任务是执行程序。同意 CPU 内部的工作方式对我们来说并不重要,重要的是它执行我们传递给它的程序。不仅执行,而且完全按照我们的预期执行!问题是某个处理器可以执行哪些程序以及这些程序的语义是什么。这正是ISA所定义的——CPU 可以执行哪些程序以及这些程序可以做什么,但微架构决定了 CPU 从内部如何排列。

    现在多一点。


    ISA 是 CPU 和在该 CPU 上运行的程序之间的接口。ISA 定义了程序员可见的寄存器数量、可用指令、对齐规则等。如果你想为特定的 CPU 编写程序,你可以拿着它的 ISA 手册,一一写下指令。此类参考的一个示例是Intel® 64 和 IA-32 架构软件开发人员手册- 它描述了 Intel 64 和 IA-32 架构(这些是大多数现代台式计算机中使用的 x86 系列架构)的编程模型。

    反过来,微架构决定了 CPU 在内部的排列方式。它由哪些功能节点组成,缓存的层次结构,指令如何解码,流水线中有多少阶段,等等。

    微架构不影响程序执行的语义和结果,但会影响它们的执行速度。我们可以在旧的 Pentim IV 和新的 Threadripper 上运行 Doom 3 - 它可以在那里和那里工作,只有在最新 CPU 上的工作速度会更高。

    除了性能之外,微架构还会影响处理器的功耗。例如,有一次,英特尔推出了一系列针对移动设备的 Atom 处理器。这些 CPU 实现了相同的 x86 架构,但它们的内部设计允许它们节省功耗,这使得它们适用于便携式设备。

    程序员看不到微架构†,程序员在 ISA 级别工作。如果两个不同的处理器实现相同的 ISA,那么它们可以执行相同的程序。例如,AMD 和 Intel 生产 x86 系列架构的处理器,这就是我们可以在 Intel 和 AMD 处理器上运行相同程序的原因。

    重要的是要理解 ISA 并不反映 CPU 中的实际进程,而只是程序员/编译器的抽象。例如,ISA x86 向程序员承诺,他编写的所有指令都将按顺序执行,一个接一个‡。但实际上,现代处理器并行执行大多数指令,而不是按照程序员编写它们的顺序(参见指令级并行性)。那么,如果指令以随机顺序执行,程序如何工作呢?事实是,通过随意执行指令,处理器确保在程序员看来指令是按顺序执行的*。

    原则上,这个我们可以聊很久,但总的来说,ISA 和微架构是不同层次的抽象。如果我们把 CPU 看成一个黑盒子,那么 ISA 就是它的接口,而微架构就是它的内部设备。


    † 当然,这并不完全正确。程序员和编译器可以利用他们对特定处理器微架构的了解来应用某些低级优化:知道缓存的大小可以放置代码和数据,以便它们适合缓存行,知道特定处理器支持延迟槽,编译器可以使用此信息来例如调整分支延迟等。

    ‡ 一个强有力且不完全正确的简化。虽然,当然,有时你不得不担心内存障碍,但总的来说,程序确实为程序员按顺序执行。

    * 如果有人熟悉 C++,就好像规则一样。

    • 3

相关问题

  • 是否可以采用现代处理器并基于它制造自己的计算机?

  • 拆板时电源上的电容有危险吗

  • 电缆和仪表的电压、电流和功率

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5