Linus Torvalds曾经为一家名为Transmeta的处理器公司工作。他们制造的处理器是核心中基于RISC的对象。如果我没有记错的话,这个想法是核心运行了一个任意的,可升级的“处理器仿真层”(可以是x86,powerpc等),它将高级操作码转换为RISC内核指令集。代码变形去了哪里?
这个想法发生了什么?您认为这种方法在编程方面有优势的优点,缺点和情况如何?
Linus Torvalds曾经为一家名为Transmeta的处理器公司工作。他们制造的处理器是核心中基于RISC的对象。如果我没有记错的话,这个想法是核心运行了一个任意的,可升级的“处理器仿真层”(可以是x86,powerpc等),它将高级操作码转换为RISC内核指令集。代码变形去了哪里?
这个想法发生了什么?您认为这种方法在编程方面有优势的优点,缺点和情况如何?
该公司的表现并不像他们预期的那样好,最终被Novafora收购为节能技术。 (http://www.novafora.com/pr01-28-09.html)
从我知道的所有帐户中,该技术根本没有与现有系统竞争。他们远远低于他们的表现数字。另外,尽管可能在VLIW设计之上加入另一位译员,但我不知道他们制作的任何产品。我不记得Crusoe芯片能够接受另一种“翻译”微码下载。
我个人拥有使用Crusoe处理器的设备,虽然它确实提供了电池续航时间,但设备的性能令人沮丧。有些责任可能会在它使用的特殊版本的Windows上发布,但仍然很慢。
充其量,它对于便携式远程桌面很好。
恕我直言,该技术具有同样的好处软件虚拟机像.NET和JVM:
从某些角度来看,您可以将现代x86芯片视为代码变形,尽管它们非常专业。他们将x86架构转换为更高效的类RISC子指令集,然后执行这些指令。
这种技术的另一个例子可以是FPGA,它可以被编程为在电路级仿真各种处理器或原始电路。我相信一些Cray系统可以带有这种“加速器节点”。
明显的优点:
明显CON:
一方面,大多数CISC处理器在内部将它们的操作码转换为类似于RISC操作的uops微操作。流水线和多核心已经缩小了RISC处理器之间的差距,以至于它们之间的差异非常小(如果有的话)。如果您需要来自C源代码或其他程序集前端的交叉兼容性,则可以使用LLVM。 http://llvm.org/
大多数现代处理器实际上使用microcode来实现他们的指令集。 有很多原因,包括兼容性问题,但也有其他原因。
什么是“硬件”和什么是“软件”之间的区别实际上很难做出。 现代虚拟机如JVM或CIL(.NET)也可以用硬件实现,但这可能只是使用微代码完成。
系统中有几层抽象的原因之一是编程人员/工程师在工作在 更高级别时不必考虑不相关的细节。
操作系统和系统库也提供了额外的抽象层。但如果不需要它们提供的功能(即OS完成的线程调度),那么只有这些层才会使系统“更慢”。让您自己的特定于程序的调度程序在Linux内核中打败一个并非易事。
我想说成本的降低与数量有关,所以像Transmeta芯片之类的产品必须在销售大量数量之前,才能与现有的大容量x86芯片进行价格竞争。
如果我记得,Transmeta芯片的一点是它的功耗很低。使每个时钟周期来回翻转的硅栅节省能源。代码变体就是让你可以在低功耗的RISC芯片上运行一个复杂的指令集(CISC)。
全美达的第一款处理器Crusoe在运行基准测试软件时甚至出现问题,但效果并不理想。他们的第二款处理器Efficeon确实使用了比Intel Atom更低的功耗(相同的性能类别),并且在相同的功耗范围内比Centrino表现更好。
现在,从您的软件和灵活性的角度来看,Code Morphing只是一种即时编译形式,具有该技术的所有优点和不足。您的x86代码基本上在虚拟机上运行,并由另一个处理器模拟。现在虚拟化的最大好处是能够在多台虚拟机之间共享单个处理器,因此可以减少闲置的CPU周期,从而提高效率(硬件成本和能源成本)。
因此,在我看来,代码变体就像任何形式的虚拟化一样,都是关于如何更有效地利用资源。
有关硬件辅助的x86 ISA虚拟化的另一种方法,您可能需要了解有关Loongson 3 CPU的信息。
+1非常有趣的问题。我在等待有人将x86 Flash播放器转换为ARM。 :-) – Zifre 2009-06-30 00:12:33