52个知识点(一):不同类型的处理器
52个知识点(一):不同类型的处理器
原文链接:http://bristolcrypto.blogspot.com/2014/10/52-things-number-1-different-types-of.html
这是“密码学博士必须掌握的52个知识点”系列博文中的第一篇。这些问题整理出来给准博士们,让他们能够意识到自己在第一学年结束后应该掌握哪些知识,同时也作为一个早期预警系统,建议博士生们趁还有机会离开这个领域的时候及时离开。总之,在接下来的一年中我们将给出每一个问题的答案,为了获得给第一个知识点写博文的(可能的)荣誉,我成为了志愿者。第一个主题与计算机体系结构有关,并提出了以下问题:
What is the difference between the following?
(以下各项有何区别?)
A general-purpose processor.(一个通用处理器)
A general-purpose processor with instruction-set extensions.(一个具有指令集扩展的通用处理器)
A special-purpose processor (or co-processor).(一个专用处理器/协处理器)
An FPGA.(一个现场可编程门阵列)
对于通用处理器并没有一个严格的定义,但是,只要处理器是图灵完备的即被公认为是通用处理器。任何可以计算实际可计算问题的处理器都包含在其中(也就是说,可以解决图灵机能解的任何问题)。我将不再展开讨论图灵机的定义,如果我前面讲的内容让你感到迷惑了,那我建议你重温下计算理论[1]。请注意,此定义没有性能或指令集功能的概念,实际上,一些研究人员在证明只需一条指令即可实现图灵完备时遇到了麻烦[2]。在现代处理器的背景下,大多数可编程CPU被视为通用的。
实现通用性的代价往往是需要降低性能。具体来说,一个通用处理器也许可以计算任何可计算的问题,但它永远都不擅长处理复杂重复的任务。在诸多应用程序中,如果让通用处理器处理一个规律重复的任务,处理器设计者需要将指令集拓展到基础微型架构中,以此来适应任务需求。这与微型架构在功能上并没有什么区别,但实际上却为终端用户带来了性能上的巨大提升。
因为我们都是密码学研究者,所以我将使用一个用于指令集扩展的加密示例。这里以带有AES加密磁盘的桌面计算机为例,任何从辅助存储器进行的读操作在数据进入缓存之前都需要CPU中断先解密数据块。由缓存未命中导致的磁盘访问被认为事件可怕的事,如果在顶部添加解密流程,那就要重新考虑磁盘加密的瓶颈。众所周知,AES是一个复杂重复的任务,并给出了带有简单指令集的通用CPU,我们别无选择的要进行线性流操作去实现解密。英特尔和AMD都意识到了磁盘加密的需求,并且AES增加了辅助存储访问权,并且(自2010年以来)已经生产了AES-NI x86指令集扩展,以加速其台式机CPU系列的磁盘加密。
如果要彻底的加速任何一种计算,最佳的选择都是使用专用的处理器或者专用集成电路(ASIC)。专用的处理器牺牲了通用处理器的很大一部分灵活性,以此换来性能的提升。这种类型的处理器通常与通用处理器耦合在一起,因此术语被称为协处理器。注意,协处理器可能会跟通用处理器封装到一起,但是并不一定要集成到通用处理器的架构中。如果我们再一次转向现代处理器架构,英特尔和AMD已经在过去的一段时间里将声卡,图像处理器和DSP引擎集成到他们的CPU中了。附加功能通过专用寄存器公开,并且协处理器被视为必须由通用处理器管理的单独组件。
最后,我们转向现场可编程门阵列(FPGA),处于 ASIC与通用处理器之间。如果应用程序既需要高性能的吞吐量,又需要(很少)修改,那么FPGA可能就是答案。要了理解FPGA的工作原理,可以想象一个非常大的电子电路板,上面布满了成千上万的逻辑门和查找表(连接到存储器的多路复用器)。如果将一个应用描述为一组门控和时序约束,则可以将其连接在电子电路板上,并生成一个电路来评估该应用。FPGA提供了可重新编程的灵活性,同时产生了用于评估目标应用程序的专用逻辑。 与通用程序的主要区别在于设计和构建应用程序的方式。 为了充分利用硬件,你必须使用硬件描述语言(Verilog或VHDL)将应用程序描述为一组硬件组件和事件。在生产之前,此过程通常用于在FPGA上对通用处理器和专用处理器进行原型设计。 但是,它并非没有缺点。 对于大型应用程序,使用底层构建块设计程序变得非常繁琐。另外,与通用嵌入式IC相比,能量消耗和硬件成本通常更高。 最近,FPGA制造商Xilinx已开始交付一种FPGA[3],这种FPGA带有集成在单个封装中的ARM通用内核。现在,这使得FPGA作为灵活的协处理器可用于ARM内核。 结果是你可以构建专用逻辑来评估自己的加密原语,从而加速加密应用程序。
总之,通用处理器能够计算任何可计算的问题。类似地,对于具有指令集扩展的通用处理器,它可能在特定应用中表现更好。 专用处理器(或协处理器)在完成特定任务时非常快,但无法计算超出该范围的任何内容。 FPGA可以用于构建上述所有硬件,但是牺牲了速度,无法提供比ASIC解决方案更高的灵活性。
参考文献
[1] http://www.amazon.co.uk/Introduction-Theory-Computation-Michael-Sipser/dp/0619217642 [2] http://www.cl.cam.ac.uk/~sd601/papers/mov.pdf [3] http://www.xilinx.com/products/zynq-7000/extensible-virtual-platform.htm