2012-02-16 69 views
1

這個問題聽起來有點奇怪......Howto在「串行」模式下編譯MPI應用程序(不使用MPI編譯器)?

想象一下,我有一個MPI應用程序,但我沒有安裝MPI的系統。 所以我想在沒有修改源代碼的情況下編譯沒有MPI支持的應用程序(1進程,1線程)。 這可能嗎?

我在某處發現了一個「mimic_mpi.h」包裝,它應該完成我想要的。但是那裏缺少一些MPI功能(例如,MPI_Cart_create,MPI_Cart_get等),所以我沒有成功。

mimic_mpi.h http://openmx.sourcearchive.com/documentation/3.2.4.dfsg-3/mimic__mpi_8h-source.html

mimic_mpi.c http://openmx.sourcearchive.com/documentation/3.2.4.dfsg-3/mimic__mpi_8c-source.html

你知道任何其他的方法,我可以用它來編譯MPI沒有MPI支持的應用程序?

在此先感謝!

+0

爲什麼不爲缺失的函數添加虛擬綁定並開放源代碼的結果? – Jeff 2015-08-24 01:30:24

回答

2

您可以使用單個進程輕鬆運行「真實」MPI應用程序。實際上,這甚至可以在不使用mpiexec/mpirun的情況下運行,儘管我不確定它是否得到官方支持。這說明一個完整的,確認的單進程MPI「串行」實現可能會變得相當複雜,並且它自己的庫 - 所以在那種情況下,爲什麼不使用真正的完整MPI實現?

我希望你能看到我想要繪製的圓圈: 如果你想要完整的MPI行爲,只需使用MPI實現 - 無論它是否僅限於單個進程。

實際上,希望能夠使用或不使用MPI的應用程序似乎都使用自己的MPI抽象,使用特定於域的通信包裝,#ifdef HAVE_MPI或更復雜的宏。

+0

感謝您的快速回答!我想跟蹤不同編譯器爲一組給定的應用程序發出的指令,包括一些MPI應用程序。這就是爲什麼我不需要MPI支持,因爲「串行」運行會給我所需的數據。對我來說,這應該是一個簡單的問題(只是一個「void」mpi.h抽象層),但你說得很對,因爲我可能錯過了一些東西,因爲提供串行版本的MPI應用程序通常使用#ifdef宏。 – Manel 2012-02-18 11:05:19