2012-03-08 49 views
3

我的情況就相當簡單:我想運行一個多處理器/ Core計算機上啓用MPI軟件,比方說8MPI多核機器

我MPI的實現是MPICH2。

根據我的理解,我有幾個選擇:

$ mpiexec的-n 8 my_software

$ mpiexec的-n 8 -hosts {本地主機:8} my_software

或者我也可以指定水潤到「fork」而不是「ssh」;

$ mpiexec的-n 8 -launcher叉my_software

你能告訴我是否會有任何的不同或行爲會是一樣的嗎?

當然,因爲我所有的節點都在同一臺機器上,我不想通過網絡(甚至是本地環路)完成「消息傳遞」,而是通過共享內存完成。據我瞭解,MPI會自行解決這個問題,所有這三種選擇都是如此。

回答

3

簡單的回答:

所有的方法應該導致相同的性能。您將在覈心上運行8個進程並使用共享內存。

技術答案:

「叉」具有兼容的優點,在系統中RSH/SSH產卵的過程將是一個問題。但我猜可以,只能在本地啓動進程。

最後(除非MPI被奇怪地配置),同一CPU上的所有進程最終將使用「共享內存」,並且啓動程序或主機指定方法對此無關緊要。通信方法由另一個參數(-channel?)處理。

主機指定方法的特定語法可以允許將進程綁定到特定的CPU內核,然後根據您的應用程序,您可能會有稍好/差的性能。

1

如果你已經正確設置了一切,那麼我沒有看到你的程序的行爲將取決於你如何啓動它,除非它是無法在其中一個或其他選項下啓動。 (這意味着你沒有正確設置所有東西。)

如果內存爲我提供良好的消息傳遞方式,則取決於您使用的MPI設備。它曾經是你會使用mpi ch_shmem設備。這管理着進程之間的消息傳遞,但它確實使用了緩衝區空間,並且消息被髮送到這個空間和從這個空間發送。所以消息傳遞完成了,但是在內存總線速度。

我寫的是過去式,因爲我已經有一段時間了,因爲我接近我知道(或者坦率地說,關心)關於低級實現細節的硬件,而現代MPI安裝可能稍微有些,或者很多,更復雜。實際上,任何現代MPI安裝都會在多核/多處理器機器上用共享內存讀/寫代替消息傳遞,這讓我感到驚訝和高興。我會感到驚訝,因爲它需要將消息傳遞轉換爲共享內存訪問,並且我不確定整個MPI都很容易(或者很容易實現)。我認爲目前的實現仍然依賴通過內存總線通過某個緩衝區的消息傳遞的可能性更大。但是,正如我所說,這只是我最好的猜測,而且在這些問題上我常常是錯誤的。

+0

請參閱:http://runtime.bordeaux.inria.fr/knem/ – haraldkl 2012-03-08 18:52:31