如果一台计算机可以通过一条指令实现图灵完备,那么拥有多条指令的目的是什么?
If a computer can be Turing complete with one instruction what is the purpose of having many instructions?
我理解计算机是图灵完备的概念(具有 MOV 或命令或 SUBNEG 命令,因此能够 "synthesize" 其他指令,例如 )。如果这是真的,那么像 x86 这样的 100 条指令的目的是什么?是为了提高效率?
请记住,图灵机通常被理解为一个抽象概念,而不是 physical thing。这是计算机可以采用的理论上的最小形式,它仍然可以计算任何东西。理论上。偏重理论。
一个真正的图灵机可以完成像解码 MP3 这样简单的事情,但它会非常复杂。编程这将是一场彻头彻尾的噩梦,因为机器非常有限,即使将两个 64 位数字加在一起并将结果记录在第三个位置也需要大量的 "tape" 和一整堆 "instructions".
当我们说某物是 "Turing Complete" 时,我们的意思是它可以执行通用计算。老实说,这是一个很低的门槛,像 the Game of Life and even CSS 这样疯狂的事情已经被证明是图灵完备的。这并不意味着为它们编程或将它们视为计算平台是个好主意。
在计算的早期,人们必须手动输入机器代码。将两个数相加并存储结果,往往顶多是一两次操作。在图灵机上完成它需要数千。复杂性使其在最基本的层面上完全不切实际。
作为挑战尝试编写一个简单的 4 位加法器。然后,如果您成功解决了这个问题,请编写一个 4 位乘法器。一旦您转向 32 位或 64 位值之类的东西,复杂性就会呈指数级上升,而当您尝试处理除法或浮点值时,您很快就会淹没在这一切的离谱中。
当您输入机器代码时,您不会告诉 CPU 哪些晶体管要翻转,指令充当宏来为您做这件事,但是当您编写图灵机代码时,它是由你来命令它如何翻转每一位。
如果您想了解有关 CPU 历史和设计的更多信息,那里有大量信息,您甚至可以使用 transistor logic or an FPGA kit where you can write it out using a higher level design language like Verilog.
实现自己的信息
Intel 4004 芯片是为计算器设计的,因此操作代码主要针对计算器。随后的 8008 以此为基础,到 8086 出现时,指令集已经采用了熟悉的 x86 风格,尽管是相同的 16 位版本。
在定义单个位的行为(图灵机)和某种假设 CPU 之间存在一个抽象范围,其中包含针对每种情况的指令。 1980 年代和 1990 年代的 RISC 和 CISC 设计在哲学上有所不同,其中 RISC 通常指令较少,CISC 指令较多,但随着 RISC 获得更多功能并且 CISC 为了简单起见变得更像 RISC,这些差异在很大程度上被消除了.
图灵机在 CPU 设计方面是 "absolute zero"。如果你能想出更简单或更简约的东西,你可能会获奖。
是的。
同样,任何逻辑电路都可以仅使用 NAND 来制作。但这并不会使其他组件变得多余。从与非门制作一个 CPU 将是非常低效的,即使 CPU 只执行一条指令。
OS 或应用程序的复杂程度与 CPU 相似。
你可以编译它,让它只使用一条指令。但你最终会得到世界上最臃肿的 OS。
因此,在设计 CPU 的指令集时,选择是减少 CPU size/expense 之间的权衡,因为它们更简单,每秒允许更多的指令,和更小的尺寸意味着更容易冷却(RISC);并增加 CPU 的功能,包括需要多个时钟周期才能完成的指令,但使其变得更大,冷却起来也更麻烦 (CISC)。
这种权衡就是为什么数学协处理器在 486 年前就已经流行起来的原因。无需指令即可模拟浮点数学。但如果它有一个协处理器来处理那些浮点数的繁重工作,它就会快得多。
我理解计算机是图灵完备的概念(具有 MOV 或命令或 SUBNEG 命令,因此能够 "synthesize" 其他指令,例如 )。如果这是真的,那么像 x86 这样的 100 条指令的目的是什么?是为了提高效率?
请记住,图灵机通常被理解为一个抽象概念,而不是 physical thing。这是计算机可以采用的理论上的最小形式,它仍然可以计算任何东西。理论上。偏重理论。
一个真正的图灵机可以完成像解码 MP3 这样简单的事情,但它会非常复杂。编程这将是一场彻头彻尾的噩梦,因为机器非常有限,即使将两个 64 位数字加在一起并将结果记录在第三个位置也需要大量的 "tape" 和一整堆 "instructions".
当我们说某物是 "Turing Complete" 时,我们的意思是它可以执行通用计算。老实说,这是一个很低的门槛,像 the Game of Life and even CSS 这样疯狂的事情已经被证明是图灵完备的。这并不意味着为它们编程或将它们视为计算平台是个好主意。
在计算的早期,人们必须手动输入机器代码。将两个数相加并存储结果,往往顶多是一两次操作。在图灵机上完成它需要数千。复杂性使其在最基本的层面上完全不切实际。
作为挑战尝试编写一个简单的 4 位加法器。然后,如果您成功解决了这个问题,请编写一个 4 位乘法器。一旦您转向 32 位或 64 位值之类的东西,复杂性就会呈指数级上升,而当您尝试处理除法或浮点值时,您很快就会淹没在这一切的离谱中。
当您输入机器代码时,您不会告诉 CPU 哪些晶体管要翻转,指令充当宏来为您做这件事,但是当您编写图灵机代码时,它是由你来命令它如何翻转每一位。
如果您想了解有关 CPU 历史和设计的更多信息,那里有大量信息,您甚至可以使用 transistor logic or an FPGA kit where you can write it out using a higher level design language like Verilog.
实现自己的信息Intel 4004 芯片是为计算器设计的,因此操作代码主要针对计算器。随后的 8008 以此为基础,到 8086 出现时,指令集已经采用了熟悉的 x86 风格,尽管是相同的 16 位版本。
在定义单个位的行为(图灵机)和某种假设 CPU 之间存在一个抽象范围,其中包含针对每种情况的指令。 1980 年代和 1990 年代的 RISC 和 CISC 设计在哲学上有所不同,其中 RISC 通常指令较少,CISC 指令较多,但随着 RISC 获得更多功能并且 CISC 为了简单起见变得更像 RISC,这些差异在很大程度上被消除了.
图灵机在 CPU 设计方面是 "absolute zero"。如果你能想出更简单或更简约的东西,你可能会获奖。
是的。
同样,任何逻辑电路都可以仅使用 NAND 来制作。但这并不会使其他组件变得多余。从与非门制作一个 CPU 将是非常低效的,即使 CPU 只执行一条指令。
OS 或应用程序的复杂程度与 CPU 相似。
你可以编译它,让它只使用一条指令。但你最终会得到世界上最臃肿的 OS。
因此,在设计 CPU 的指令集时,选择是减少 CPU size/expense 之间的权衡,因为它们更简单,每秒允许更多的指令,和更小的尺寸意味着更容易冷却(RISC);并增加 CPU 的功能,包括需要多个时钟周期才能完成的指令,但使其变得更大,冷却起来也更麻烦 (CISC)。
这种权衡就是为什么数学协处理器在 486 年前就已经流行起来的原因。无需指令即可模拟浮点数学。但如果它有一个协处理器来处理那些浮点数的繁重工作,它就会快得多。