系統的性能瓶頸是內存?在“內存墻”的困擾中尋找出路
難以置信?那就讓我們揭開內存及其相關技術的面紗,好好看清內存發展的本質吧。
由于處理器廠商與內存廠商相互分離的產業格局,導致了內存技術與處理器技術發展的不同步。在過去的20多年中,處理器的性能以每年大約55%速度快速提升,而內存性能的提升速度則只有每年10%左右。長期累積下來,不均衡的發展速度造成了當前內存的存取速度嚴重滯后于處理器的計算速度,內存瓶頸導致高性能處理器難以發揮出應有的功效,這對日益增長的高性能計算
(High Performance Computing,HPC)形成了極大的制約。事實上,早在1994年就有科學家分析和預測了這一問題,并將這種嚴重阻礙處理器性能發揮的內存瓶頸命名為"內存墻"(Memory Wall)。
多核處理器的“內存墻”問題日趨嚴重
當處理器廠商意識到單純依靠提高處理器頻率并不能持續提升計算性能時,便把目光轉向了利用多核心并行計算技術來提升計算性能,同時也希望該技術能緩解內存瓶頸。
但處理器核心越多,性能就越高嗎?實際情況并沒有那么簡單,除了如何有效地給多核心分配任務這一難題之外(核心越多,任務分配的難度越大),多核心并行計算還遭遇到了更為嚴重的“內存墻”問題。這是因為在高度并行的處理方式下,多核心共享有限的內存帶寬將會造成更大的延遲,就好像一條高速公路只有4條道,卻有4輛以上的車要并列行駛,當然會造成道路擁堵、行駛緩慢了。
SNL的多核處理器性能仿真測試結果
美國桑迪亞國家實驗室(Sandia National Laboratories,SNL)所進行的一項多核處理器性能仿真測試也正好驗證了上述問題,SNL研究人員在一篇題為《多核對超級計算機是一個壞消息》的文章中指出:在信息科學領域,更多核心的處理器并不一定會帶來更高的處理性能。SNL的仿真測試結果表明:由于“內存墻”的制約,超過8核心之后,處理器性能幾乎沒有提升,而16核處理器的性能甚至不升反降。由此可見,隨著處理器核心的不斷增多、處理性能的不斷提升,“內存墻”產生的瓶頸效應對基于多核處理器的高性能計算的制約將日趨嚴重。
好在認識到“內存墻”問題的嚴重性之后,處理器和內存廠商就一直在嘗試解決“內存墻”的問題,并且已經找到了不少行之有效的方法。
降低“內存墻”影響的兩條基本途徑
內存的性能指標主要有“帶寬”(Bandwidth)和“等待時間”(Latency),從這兩項指標的基本概念出發,更便于我們理解與“內存墻”問題相關的技術發展。
1.內存帶寬及其提升技術
內存帶寬(Bandwidth)指內存在單位時間內通過總線傳輸的數據量,可以用公式“內存帶寬=(傳輸倍率×總線位寬×工作頻率)÷8”進行計算,單位為“字節/秒”(Byte/s)。總線位寬指內存數據總線的位數,工作頻率也就是內存的時鐘頻率,傳輸倍率是指每條內存數據線在一個時鐘脈沖周期內傳輸數據的次數。顯然,提高內存帶寬的基本方法當就是公式中決定內存帶寬的三個因素,即總線位寬、工作頻率和傳輸倍率。
提高內存總線位寬:在現有采用獨立內存芯片的架構下,進一步增加內存位寬受到了內存芯片數據線引腳數量的限制,所以通過增加位寬來提升內存帶寬的方式,需要采用能有效消除這種引腳限制的新型內存架構。例如受到廣泛關注的“內存與處理器集成”技術,就具有通過增加內存位寬來明顯提升內存帶寬的特點。
提高內存工作頻率:單純依靠提高工作頻率來提升內存帶寬的方法,會受到內存芯片發熱量和工藝難度增加等方面的制約,所以采用這種方法進一步提高內存帶寬的空間非常有限。
提高內存傳輸倍率:通過增加傳輸倍率來提升內存帶寬的方法對大家來說更為熟悉。例如DDR內存是雙倍數據率(Double Data Rate),其每條數據線都能夠從存儲單元預取2位數據,并分別在時鐘脈沖的上升沿和下降沿各傳輸1位數據,即在一個時鐘周期的傳輸倍率為2,在相同頻率下DDR內存的數據傳輸量是SDRAM內存的2倍。同理,DDR2內存、DDR3內存的傳輸倍率分別為4、8,而Rambus的“百萬兆字節帶寬”技術則可將傳輸倍率提高到32,從而大幅度提升內存的帶寬。