密碼學博士必須掌握的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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章