【问题标题】:What's the meaning of "each CPU instruction can manipulate 32 bits of data"?“每条 CPU 指令可以操作 32 位数据”是什么意思?
【发布时间】:2018-05-30 06:12:40
【问题描述】:

发件人:https://www.webopedia.com/TERM/R/register.html

CPU 拥有的寄存器数量和每个寄存器的大小(位数)有助于确定 CPU 的功率和速度。例如,32 位 CPU 是其中每个寄存器都是 32 位宽的 CPU。因此,每条 CPU 指令可以操作 32 位数据。

“每个 CPU 指令可以操作 32 位数据”对于我们编写的 C/C++ 程序、我们在记事本中写的文本是什么意思?

【问题讨论】:

  • “我们在记事本中写的文本”不一定需要 32 位处理。真正的好处是能够直接寻址大量内存并用更少的指令进行整数计算。 (在 CPU 较少的情况下,两者都可以实现;对于诸如在类似记事本的应用程序中进行纯文本编辑等琐碎的任务,两者都不是必需的。)

标签: c++ c cpu-registers


【解决方案1】:

能够一次传输 32 位数据的计算机、操作系统或软件程序。对于计算机处理器(例如 80386、80486 和 Pentium),它们是 32 位处理器,这意味着处理器能够处理 32 位二进制数(十进制数高达 4,294,967,295)。任何更大的数字,计算机都需要将数字分解成更小的部分

【讨论】:

    【解决方案2】:

    一个“字”是大小变化的基本单位。

    此 CPU 除了是 32 位 CPU 外,还有一个 32 位大小的字。如果它正在更改一个项目,除非使用额外的 CPU 周期,否则它可以更改的最大“单个”项目是一个 32 位值。

    这并不意味着任何 32 位都可以通过一条指令进行更改。但是如果 32 位都是同一个字的一部分,那么它们可能可以在一条指令中改变。

    【讨论】:

      【解决方案3】:

      首先; “每个 CPU 指令可以操作 32 位数据”是一个(技术上不正确的)概括。例如(32 位 80x86)有指令(例如 cmpxchg8bpushadshrd)和整个扩展(MMX、SSE、AVX),其中一条指令可以操作超过 32 位的数据。

      为了表现;最好将其视为“可以在固定时间内完成的工作量”或“完成固定量工作的时间量”。这可以分为 2 个值 - 您需要多少条指令来完成大量工作,以及在固定的时间内可以执行多少条指令(每秒指令数)。

      现在考虑添加一对 128 位整数。对于 32 位 CPU,这必须分解为四个 32 位加法,可能看起来像这样:

          ;Do a = a + b
      
          mov eax,[b]
          mov ebx,[b+4]
          mov ecx,[b+8]
          mov edx,[b+12]
          add [a],eax
          adc [a+4],ebx
          adc [a+8],ecx
          adc [a+12],edx
      

      在这种情况下,“完成一项工作需要多少条指令”是 8 条指令。

      对于 16 位 CPU,您需要更多指令。例如,它可能更像这样:

          mov ax,[b]
          mov bx,[b+2]
          mov cx,[b+4]
          mov dx,[b+6]
          add [a],ax
          mov ax,[b+8]
          adc [a+2],bx
          mov bx,[b+10]
          adc [a+4],cx
          mov cx,[b+12]
          adc [a+6],dx
          mov dx,[b+14]
          add [a+8],ax
          adc [a+10],bx
          adc [a+12],cx
          adc [a+14],dx
      

      在这种情况下,“完成一项工作需要多少条指令”是 16 条指令。在相同的“每秒指令数”下,16 位 CPU 的速度将是 32 位 CPU 的一半。

      使用 64 位 CPU,这项工作只需要 4 条指令,可能是这样的:

          mov eax,[b]
          mov ebx,[b+8]
          add [a],eax
          adc [a+8],ebx
      

      在这种情况下,在“每秒指令数”相同的情况下,64 位 CPU 的速度将是 32 位 CPU 的两倍(并且是 16 位 CPU 的 4 倍)。

      当然,高级源代码在所有情况下都是相同的 - 不同之处在于编译器生成的内容。

      请注意,我在这里展示的内容(128 位整数加法)是一个“快乐的案例”——我之所以选择这个是因为它很容易展示更大的寄存器如何减少/改善“你需要多少指令来执行一个工作量”,从而提高性能(以相同的“每秒指令数”)。对于不同的工作,您可能不会得到相同的改进。例如,对于使用 8 位整数的函数(例如 char),“大于 8 位寄存器”可能根本没有帮助(在某些情况下可能会使事情变得更糟)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-29
        • 2014-03-10
        • 2011-06-21
        • 1970-01-01
        • 2012-10-31
        • 1970-01-01
        • 2010-11-04
        • 1970-01-01
        相关资源
        最近更新 更多