2012-08-30 24 views
7

我在調整並行Java程序的性能。我對建築效果感到好奇。不同套接字上的CPU如何通信?

鑑於有兩個CPU插槽的機器,每一個與四核英特爾至強CPU,則:

  • 如何將兩個CPU溝通,如何快速將他們溝通?
  • 同一芯片上兩個內核的通信速度有多快?
  • 同一芯片上的四個內核在通信或內存訪問方面是否相同?
+0

你傳遞了​​很多數據嗎?數據如何傳遞(例如,使用0MQ)? – osgx

回答

3

1)兩個CPU如何通信,它們的通信速度有多快?

他們大多數時間通過內存或最近的共享內存層次進行通信。 (系統存儲器兩者上SMP和NUMA被認爲是共享的水平;即使在NUMA它是經由另一芯片的存儲器控​​制器訪問這只是非均勻=較慢存取)

2)的速度有多快將2同一芯片上的內核通信?

同一芯片上的內核通常共享L2或L3緩存。不同芯片上的內核使用緩存一致性協議通過內存或與緩存到緩存的交互進行通信。

因此,在CPU之間傳遞的內存的1(不同芯片)速度(帶寬)將接近普通內存讀取/寫入。而在情況2(相同芯片)下,這個速度可以更大,達到緩存讀寫速度。

時延通信將是幾百CPU的蜱在殼體1和幾十在殼體2

3)同一芯片上等效於通信或訪問存儲器中的術語的四個核?

同一芯片的所有四個核心通常具有與RAM等效的距離。它取決於芯片架構和實現;對於一些較老的Intels例如多核芯片真的是兩個芯片打包成單個封裝。

+0

因此,當將兩個線程分配給兩個內核時,兩個芯片上的一個線程可能比一個芯片上的線程慢數十倍,對吧? – JackWM

+0

線程之間的交互是什麼?他們在互動之間會做多少工作?他們發送大量數據還是隻處理共享數據結構? – osgx

8

如何將線程調度到內核以接近最佳內存性能取決於對內存的訪問模式,通常不值得這樣做。如果您的程序使用Java,那麼您可能無法達到接近最佳性能所需的控制級別。

現代CPU具有集成內存控制器,而現代多插槽系統具有分佈式內存。這就是所謂的

Non-Uniform Memory Access (NUMA)

在插座之間的現代化多功能插座英特爾處理器通信與QPI

QuickPath Interconnect (QPI)

QPI是英特爾架構,指定是如何工作的完成。 AMD相當於HyperTransport。您可以詳細瞭解各種架構這裏:

System Architecture

內存的訪問,在1級數據緩存缺失可能是由二級數據緩存提供服務(在同一個插座),也可能是由英特爾稱之爲「Last Level Cache(LLC)」的服務,該端口位於具有該內存地址的內存控制器的套接字中。在另一個插槽中打入LLC可能會有幾十個處理器週期,但仍然比訪問DRAM(超過一百個處理器週期)快得多。

+1

非常好的總結。 「系統架構」看起來也是一個很好的資源。 –