MPI是分布式計算的基礎接口架構,他有很多實現,比如intelMPI openMPI等等,而這些具體實現了這些接口里面的內容,比如一些通信協議。
MPI有幾個很重要的概念rank, group, communicator, type, pack, spawn, window, 理解了這些概念MPI就算入門了。
**group**是MPI一個很重要的概念,一臺電腦可以屬于多個group,group的正真強大體現在可以隨時隨地的組合任意group,然后利用gourp內,和group間的communicator,可以很容易實現復雜科學計算的中間過程,比如奇數rank一個group,偶數另一個group,或者拓撲結構的group,這樣可以解決很多復雜問題,另外MPI還有一個默認的全局的group,他就是comm world,一般簡單的應用有了這一個group已經足夠了。
**rank**就是任意group內的一個計算單元,利用rank我們可以很輕松的實現client server的架構,比如rank=0是server其他就是client。
**communicator**就是各種通信,比如一對一,一對多,多對一,其中多往往代表著一個group, 在傳輸過程中tag還是很有用的可以用來區別不同的任務類型,一般都是先解析tag,然后再解析具體的數據內容, 這里要有一個信封和信內容的差別的概念,理解了這樣的差別,可以很好的擴展程序。
**type**是MPI的自定義類型,由于通常編程的時候常用struct 數組 和離散的變量,這些東西不能直接進行通信, 然后MPI同樣有一套這樣的定義,我們可以轉化成MPI的格式,這樣就可以很自由的通信了。
**Pack**,就是把離散的數據打包起來,方便傳送,其實這個作用和type很類似,如果你不想很麻煩的定義type直接打包發送。
**spawn**是區分MPI一代和二代的一個重要的標志,有了spawn,就可以在運行過程中自動的改變process的數量,可能復雜的軟件才有這樣的需求。
**window**遠程的控制同一個文件,只有在網絡條件很好的時候用這個才有意義,否則會讓軟件效率變得很糟糕。、
最后要有一個思想就是同一份代碼可能會被很多電腦同時執行到,注意區分個個部分代碼的角色。