代码变形在哪里?

时间:2009-06-30 00:10:16

标签: processor

Linus Torvalds曾经在一家名为Transmeta的处理器公司工作。他们制作的处理器是核心中基于RISC的对象。如果我没记错的话,那就是核心运行了一个任意且可升级的“处理器仿真层”(可能是x86,powerpc等),它将高级操作码转换为RISC核心指令集。

这个想法发生了什么,你认为这种方法在编程方面可能具有优势的优点,缺点和情况是什么?

6 个答案:

答案 0 :(得分:7)

该公司表现不如预期,并最终被Novafora收购,因为它的节能技术。 (http://www.novafora.com/pr01-28-09.html

从我所知道的所有账户中,该技术根本没有与现有系统竞争。他们远远落后于他们的表现数字。此外,虽然可能在其VLIW设计之上放置另一个翻译器,但我不知道他们生产的任何产品。我不记得Crusoe芯片是否能够接受替代的“翻译”微代码下载。

我个人拥有一台使用Crusoe处理器的设备,虽然它确实提供了电池寿命,但该设备的性能却令人沮丧。可能会对其使用的特殊版本的Windows进行一些指责,但它仍然很慢。

充其量,这对便携式远程桌面很有用。

恕我直言,该技术与.Net和JVM等软件VM具有相同的优势:

  • 好处是你很可能 使用a更快地加速代码 硬件解决方案(就像IBM一样) 它是Java加速器处理器) 比纯软件JIT。
  • 缺点是你永远不会得到原始的 处理器执行的性能 本地代码得到。

从某些角度来看,您可以将现代x86芯片视为代码变形,尽管它们是非常专业的。他们将x86架构转换为更高效的RISC类子指令集,然后执行它们。

这种技术的另一个例子是FPGA,它可以被编程为在电路级模拟各种处理器或原始电路。我相信一些Cray系统可以带有这种“加速器节点”。

答案 1 :(得分:4)

一方面,大多数CISC处理器在内部将其操作码转换为类似于RISC操作的微操作微操作。流水线技术和多核处理器已经缩小了RISC处理器的差距,使它们之间的差距非常小(如果有的话)。如果需要来自C源或其他程序集前端的交叉兼容性,则可以使用LLVM。 http://llvm.org/

答案 2 :(得分:3)

明显的专业人士:

  • 能够运行任何操作系统(只需将处理器仿真切换到所需的操作系统)
  • 在没有软件支持的情况下,在同一处理器/操作系统上运行不同体系结构的二进制文件的可能性(当然有内核支持)。

明显的骗局:

  • 额外仿真层==更多开销==需要更快的处理器才能获得一致的性能。

答案 3 :(得分:3)

我认为成本降低伴随着数量的增加,所以像Transmeta芯片这样的产品在与现有的大容量x86芯片价格竞争之前必须卖出大量产品。

如果我记得的话,Transmeta芯片的重点是低功耗。每个时钟周期具有较少的硅门来回翻转可以节省能量。代码变形使您可以在低功耗RISC芯片上运行复杂的指令集(CISC)。

Transmeta的第一款处理器Crusoe由于甚至运行基准测试软件的问题而表现不佳。他们的第二个处理器Efficeon确实设法使用的功率低于Intel Atom(在相同的性能类别中),并且在相同的功率范围内比Centrino表现更好。

现在,从软件和灵活性的角度来看,Code Morphing只是一种即时编译形式,具有该技术的所有好处和不利因素。您的x86代码基本上在虚拟机上运行,​​并由另一个处理器模拟。现在虚拟化的最大好处是能够在许多虚拟机之间共享单个处理器,从而减少空闲CPU周期,从而提高效率(硬件成本和能源成本)。

所以在我看来,代码变形就像任何形式的虚拟化一样,都是为了提高资源效率。

答案 4 :(得分:3)

对于硬件辅助x86 ISA虚拟化的另一种方法,您可能希望了解Loongson 3 CPU。

答案 5 :(得分:2)

大多数现代处理器实际上使用microcode实现其指令集。 这有很多原因,包括兼容性问题,但还有其他原因 的原因。

什么是“硬件”和什么是“软件”之间的区别实际上很难。 现代虚拟机(如JVM或CIL(.NET))也可以在硬件中实现,但这可能只是使用微码完成。

在系统中进行多层抽象的原因之一就是 程序员/工程师在工作时不必考虑不相关的细节 更高的水平。

操作系统和系统库还提供了额外的抽象层。但是,如果不需要它们提供的功能(即,由OS完成的线程调度),则使这些层仅使系统“更慢”。让你自己的程序特定的调度程序胜过Linux内核中的调度程序并非易事。