多核心、一致性與執行緒層級平行
訊息傳遞(message passing)
想像工人們在各自獨立的辦公室,沒有共用白板。每人有一本只有自己能讀的私人筆記本,要協調就得寄信:「請把這些數字相加,喏在這裡」,回信寫著「總和是 42」。不能偷看同事的筆記本——每一筆共享資訊都當成明確的訊息傳遞。訊息傳遞(message passing)就是這樣組織的運算:每個處理器有自己的私有記憶體,它們只靠送出與接收訊息來合作。
這個模型靠兩個操作:送出(send)與接收(receive)。要分享一個值,一個處理器以資料和目的地呼叫 send;另一個呼叫 receive 來取得它。沒有共同的位址空間——一個節點上的位址 0x4000 與另一個節點上的 0x4000 毫不相干。這讓溝通在程式碼裡明確可見,雖然較費工夫寫,卻完全消除了隱藏的快取一致性問題:若一個節點從不持有別節點資料的副本,就沒有副本會過時。代價是程式設計師必須一手安排每一次交換。
訊息傳遞是叢集與超級電腦擴展到數千乃至數百萬個核心的方式,那裡單一共享記憶體根本搆不著——你用網路把許多獨立電腦連起來、傳訊息(MPI 函式庫是標準)。它也是倉儲規模資料處理的底層。取捨很清楚:共享記憶體對少數核心和小資料較容易;訊息傳遞能擴展得更遠,但把所有的溝通及其延遲都攤到明面上,由程式設計師管理。
在一千台連網機器上加總一個巨大陣列:把陣列切成一千塊,送一塊給每台機器,各自算出區域和,再各自把部分和送回給協調者相加。沒有任何一台機器讀另一台的記憶體——只有明確的訊息越過電纜。
分散式記憶體的訊息傳遞能擴展到共享記憶體搆不著之處,代價是親手寫下每一次溝通。
訊息傳遞避開了快取一致性問題,卻避不開協調:網路延遲、負載不均、以及打包資料的成本仍會限制加速,而一個過於多話的設計可能比共享記憶體還慢。
又称
另见