假設不考慮金錢、時間或商業限制,并且只有物理學是唯一的限制,您將如何設計最終的計算機處理器?它會大規模并行,以極高的頻率運行,并使用奇異的光學或量子互連嗎?它會運行熟悉的軟件,如 x86 或 PowerPC,還是有新的優化指令集?它會很大還是很???它是否需要智能編譯器或獨特的軟件結構?
多年來,為了讓處理器運行得更快,設計人員必須做的就是提高時鐘速度。在功耗和相關的散熱趕上速度增加之前,這一直很好。超越這一點,走得更快意味著除了走得更快之外還要做一些事情。
多核速度更快,但是……
從此開始了多核時代。如果兩個頭比一個好,那么四個肯定是兩倍好。在某種程度上,這個公理是正確的。但是今天的雙核和四核處理器的運行速度并不比上一代快兩到四倍。
這有兩個原因:硬件和軟件。當今絕大多數多核芯片的擴展性都不是很好,因此四核并不能真正提供四倍于單核實現的性能。片上總線跟不上,緩存一致性開銷會消耗性能,管道過于頻繁地停止等等。由于各種原因,當核心數量翻倍時,傳統的微處理器架構不會接近雙倍的性能。
在軟件方面,許多程序員不習慣或不熟悉多核編程。當所討論的多核芯片包含不同類型的處理器內核(通常稱為異構架構)時,尤其如此。對一個處理器進行編程已經夠難了;使用單獨的工具鏈對四個不同的工具進行編程要復雜得多。
異構的,同質的,還是只是龐大的?
可以提出一個論點,即不同的計算問題需要不同的資源,因此微處理器應該包括一系列不同的處理資源。例如,一些任務可能需要信號處理能力,另一些可能需要單指令多數據矢量處理,而還有一些可能涉及復雜的決策樹和大量數據移動。
一種觀點認為,沒有一種處理器架構可以有效地處理所有這些不同的任務。因此,需要不同架構的馬賽克。在極端情況下,可以設想一個處理器由截然不同的計算引擎組成,除了它們共享的包之外沒有任何共同之處。這些處理器實際上是共存的,而不是合作的。
相反的方法是選擇一個指令集并堅持下去。這無疑簡化了編程,但存在部署過于通用的處理器的風險,這些處理器沒有針對特定任務進行微調。另一方面,處理器是可編程的,改變軟件比改變硬件更容易、更便宜。
易于編程也不是一個小問題。延遲通常是由軟件錯誤引起的,而不是硬件問題。更復雜的是,程序員被多核處理器嚇得要死。讓一個高端處理器可靠地工作已經夠難的了。你如何編程和調試其中的 10 個?使用一個內核架構進行編程、調試和設計比處理具有不同指令集、架構、總線、工具和調試方法的不同內核的混合體更容易。
對比方法
英特爾和 AMD 已將大部分建議牢記在心,并生產了其傳統 x86 架構的雙核和四核版本。在某種程度上,這只是將資產從負債中提取出來。x86 是他們知道如何做的,向后兼容性對他們的市場至關重要。現有的 x86 代碼在這些升級后的設計上運行良好,盡管它很少運行得比以前快得多,也很少使用額外的內核。
相比之下,許多 RISC CPU 和網絡處理器 (NPU) 供應商采取了截然不同的方法,將各種不同的處理器內核和架構混合到各種瑞士軍刀設計中。例如,IBM 著名的 Cell 處理器(圖 1)有一個通用處理器內核和八個專用內核,需要不同的工具和編程技術。幾條寬總線——一些環,一些更傳統的——以各種方式連接核心。Cell 的性能令人印象深刻,但 PlayStation 程序員抱怨 Cell 是一頭難以馴服的野獸,部分原因是管理帶寬、延遲、總線事務和一致性都是游戲的一部分。
圖 1: IBM 的 Cell Broadband Engine 芯片包括九個處理器,其中一個基于 PowerPC。處理器通過元素互連總線連接,共有 12 個主控器。它被實現為四個反向旋轉的單向環。
將所有正確的硬件資源集中到單個芯片上是一回事。使組合可用是另一回事。具有混合架構的大規模并行芯片結合了兩全其美:大規模多核復雜性與完全不同的工具和架構。這就像在您的芯片中舉行聯合國會議一樣。
嚙合在一起
更好的方法是保留大規模并行部分,這是高性能的必要條件,但拋棄差異并將許多相同的處理器內核連接到二維網格中。從概念上講,它與通過網絡連接單個計算機沒有太大區別,只是在微觀尺度上。
Meshing也有“grok-ability”的一面。程序員不難想到十個、100 或 1000 個相同的處理器內核以相同的方式工作并以一種簡單但大部分透明的方式相互通信。1000 個元素中的每一個是否都針對給定的工作進行了完美調整幾乎無關緊要。重要的是有 1,000 個處理器可以解決一個問題。
這種均勻的布置也有助于可擴展性。雖然類似 Cell 的組合非常適合它們的特定任務,但構建更大或更小的 Cell 版本需要芯片制造商進行大量的重新設計工作,接收端的程序員甚至需要更多的工作。現有的 Cell 代碼不會神奇地放大或縮小到具有不同資源組合的芯片。它可能根本不會運行。相比之下,在相同處理器的網格中增加 25% 的處理器可增加 25% 的計算能力,而不會破壞現有代碼。
這并不意味著設計這種類型的芯片是微不足道的。核心之間的帶寬是第一個挑戰。如果核心不能有效地相互通信,那么連接它們就沒有多大意義了。這種方法的一個例子是 Tilera 的 TILE-Gx100 處理器(圖 2),包含 100 個相同的內核。在此處理器中,相鄰內核之間的帶寬為 1,100 Gbps。每個核心在北/南/東/西方向有四個連接,100 核處理器的總帶寬為 200 TBps。大多數應用程序很難使用其中的一小部分。即使是 Tilera 相對適中的具有 4x4 內核陣列的 Gx16 芯片也擁有 20 TBps 的片上帶寬。
圖 2:其中一個 Tilera TILE-Gx 處理器內核(其中 n 為 16 到 100)有效地處理內核之間的帶寬。每個核心塊都有自己的 64 位處理器、L1 和 L2 緩存,以及與北/南/東/西方向的四個鄰居的網絡連接。
這種基于圖塊的設計的另一個挑戰是內存延遲。如果內存不夠接近或無法訪問,所有這些處理器都可能會停止運行。同樣,Tilera 將其設備分解為易于復制的切片,每個切片都有自己的本地 L1 和 L2 緩存。有趣的是,即使內存是每個圖塊的本地內存,它也可以是更大的共享分布式緩存的一部分,該緩存在所有共享者之間保持一致性。在某些情況下,程序員可能想要定義任意數量的緩存一致性島,必要時與相鄰的切片合作或忽略。
整個芯片架構就像一個計算結構。相同的邏輯塊、內存塊和互連塊在行和列中復制,以制造更大或更小的芯片。就像 FPGA 或分形 Mandelbrot 圖像一樣,平鋪處理器在任何規模上看起來都是一樣的。大或小,它的編程方式相同??蓴U展性平方。
與四核 x86 類似,但與 Cell 或 NVIDIA 芯片不同,TILE-Gx 網狀互連在引擎蓋下透明地工作。Mesh 流量不需要手動調整,事務也不需要手動調整以避免沖突或仲裁。盡管它位于中心,但網格基本上是不可見的,這正是程序員喜歡它的方式。
可擴展性最終獲勝
與大多數生態系統一樣,許多不同類型的處理器將繼續存在。有些人會茁壯成長,而另一些人將勉強在某個特定的利基市場謀生。外部力量將淘汰牛群,就像圖形和網絡處理器一樣,篩選出那些不適合當前環境的人。
在過去的幾十年里,可擴展性和可編程性一直是關鍵。開發人員需要一種他們可以理解并能持續使用的芯片。他們想要一個增長路線圖,包括價格/性能規模的上下。讓它變得非常非??煲矝]有什么壞處。
審核編輯:郭婷
-
處理器
+關注
關注
68文章
19349瀏覽量
230299 -
芯片
+關注
關注
456文章
50965瀏覽量
424862 -
NVIDIA
+關注
關注
14文章
5025瀏覽量
103268
發布評論請先 登錄
相關推薦
評論