經過認真的開發,CPU 獲得了許多內核,在多個小芯片、numa 系統等上獲得了分布式內核塊,但仍然有一段資料不僅要通過 L1 快取(如果在同一個內核 SMT 上),還要通過一些原子/互斥同步未經硬體加速的原始程序。
我想知道為什么 Intel 或 Ibm 沒有提出類似的東西:
movcor 1 MX 5 <---- sends 5 to Messaging register of core 1
pipe 1 1 1 <---- pushes data=1 to pipe=1 of core=1 and core1 needs to pop it
bcast 1 <--- broadcasts 1 to all cores' pipe-0
讓它比其他一些方法快得多?GPU 支持逐塊快速同步點,例如 barrier() 或 __syncthreads()。GPU 還支持本地陣列的并行原子更新加速。
當 CPU 獲得 256 個內核時,此功能是否會為在內核到內核帶寬(和/或延遲)上遇到瓶頸的各種演算法提供嚴重的擴展?
uj5u.com熱心網友回復:
CPU 演變為與 GPU非常不同的編程模型,以運行多個單獨的執行緒,可能來自不同的行程,因此您還需要軟體和作業系統基礎架構來讓執行緒知道其他執行緒正在運行的其他內核(如果有的話)。或者他們必須將每個執行緒固定到特定的核心。但即便如此,它也需要某種方式來虛擬化架構訊息傳遞暫存器,就像背景關系切換虛擬化標準暫存器以在每個內核上進行多任務處理一樣。
因此,在這樣的任何東西在正常作業系統下完全可用之前,還有一個額外的障礙,其中單個行程不會完全擁有物理內核。作業系統仍然可能將其他行程的其他執行緒調度到內核上,并運行中斷處理程式,這與 GPU 不同,GPU 的內核沒有其他事情可做,并且全部構建為在大規模并行問題上協同作業。
無論如何,想要這樣的任務通常最好在 GPU 上完成,而不是幾個獨立的深度流水線 OoO exec CPU 內核,它們試圖進行推測執行。與簡單的有序流水線的 GPU 不同。
您實際上無法將結果推送到另一個核心,直到它在執行它的核心上退休。因為如果您在執行路徑的早期發現錯誤推測(例如分支錯誤預測),您也不想回滾另一個核心。可以想象,與在共享記憶體的內核之間彈跳快取線相比,這仍然可以實作更低的延遲,但它是一個非常狹窄的應用程式類別,可以使用它。
然而,高性能計算是現代 CPU 的一個已知用例,因此,如果它真的能改變游戲規則,那么它或許值得考慮作為設計選擇。
順便說一句,對于作業系統使用,當然有一個 IPI(處理器間中斷)。但這會觸發中斷,因此它的性能非常低,除非避免另一方輪詢。并且為了能夠從節能睡眠狀態喚醒一個核心,如果現在有更多執行緒準備好運行,那么它應該喚醒可以呼叫schedule()以確定運行哪個執行緒。
如果它在內核模式下運行,任何內核都可以向任何其他內核發送 IPI。
擴展核對核帶寬(和/或延遲)瓶頸的各種演算法?
網狀互連(如自 Skylake Xeon 以來的英特爾)允許內核之間相當大的聚合帶寬。沒有他們都必須競爭的單一共享公共汽車。即使是英特爾在 Skylake-Xeon 之前使用并且仍在客戶端芯片中使用的環形總線,也是流水線的,并且具有相當不錯的聚合帶寬。
資料可以同時在每對核心之間移動。(我的意思是,128 對內核中的每一個都可以在兩個方向上傳輸資料。通過一些記憶體級別的并行性,流水線互連可以有多個高速快取行,每個內核請求都在傳輸中。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/472510.html
