如何在計算機體系結構中解決可擴充套件計算機的問題?
在任何可擴充套件的計算機系統中,需要解決兩個基本問題:
容忍並隱藏遠端載入的延遲。
容忍並隱藏由於並行處理器之間的同步而導致的空閒。
在使用某種形式的分散式記憶體的可擴充套件並行系統中,遠端載入是不可避免的。訪問本地記憶體通常只需要一個時鐘週期,而訪問遠端記憶體單元可能需要長得多,時間上可能相差兩個數量級。如果發出遠端載入操作的處理器不得不等待操作完成,在此期間不做任何其他工作,則遠端載入會顯著降低計算速度。
由於大多數程式中的載入指令速率很高,延遲問題會消除並行活動的所有潛在好處。一個典型的例子如圖所示,其中P0必須從兩個遠端記憶體塊M1和Mn載入兩個值A和B來計算表示式A + B。

A和B的指標分別為rA和rB,儲存在P0的本地記憶體中。透過rload rA和rload rB指令訪問A和B,這些指令必須透過互連網路來獲取A和B。
如果rA和rB的值當前在M1和Mn中不可用,因為它們要由稍後執行的其他程序產生,情況會更糟。在這種情況下,由於並行程序之間的同步而導致空閒,原始程序P0必須等待不可預測的時間,從而導致不可預測的延遲。
為了解決這些問題,已經提出並應用於各種平行計算機中幾種可能的硬體/軟體解決方案:
應用快取記憶體
預取
引入執行緒和執行緒之間快速的上下文切換機制。
如果大多數遠端載入操作都可以在本地快取上執行,則使用快取記憶體可以大大減少遠端載入操作所花費的時間。假設A與表示式中包含A的後續表示式中的物件C和D位於同一個快取塊中:
- Result:= A + B;
- Result2:= C – D;
在這種情況下,快取A也會將C和D帶入P0的快取記憶體中,因此C和D的遠端載入被本地快取操作替換,從而導致程式執行速度顯著加快。
預取技術依賴於類似的原理。其主要思想是在需要資料之前將其載入到本地記憶體或快取中。預取操作是在發出實際記憶體操作之前,直接發出非阻塞請求來獲取資訊。
資料結構
網路
關係型資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP