2015-02-05 112 views
3

MPI標準是否提供了一個預處理器宏,因此如果它是由MPI啓用的編譯器編譯的,我的C/C++代碼可以分支嗎?類似於OpenMP的_OPENMP宏。MPI是否提供預處理器宏?

+0

我想'#包括 「mpi.h」'只如果'#if defined(_MPI)' – user2052436 2015-02-05 21:10:43

+0

不幸的是,這個功能不存在,因爲MPI是一個庫,並且不承擔任何編譯器支持。你甚至不需要使用例如CC = mpicc編譯MPI代碼。不過,您可以在應用程序/庫構建系統中定義此功能。 – Jeff 2015-09-05 20:57:57

回答

3

按照MPI standard(頁335),您可以檢查MPI_VERSION宏:

爲了應對變化的MPI標準,有編譯時和運行時的方式,以確定哪些該標準的版本正在使用的環境中使用。

「版本」 將由兩個獨立的整數表示,對於版本和顛覆:

在C,

#define MPI_VERSION 3 
#define MPI_SUBVERSION 0 
+0

我嘗試過使用OpenMPI 1.6.5,而未定義MPI_VERSION。所以,顯然,並非所有的MPI實現都支持它:(。 – user2052436 2015-02-06 17:38:24

+1

我不知道man,OpenMPI在OpenMPI項目誕生之後就已經在mpi.h中定義了這些定義:請參閱commit https://github.com/open- mpi/ompi/commit/566a050c2 - 雖然它是最初的骨架中的一大塊「土地大塊」,但github不會顯示ompi/include/mpi.h.in的第120行,但它在那麼 – 2015-02-07 03:19:03

+0

@Rob:問題似乎是在頭文件中定義了這個宏,這種類型的打敗了OP檢測他是否可以包含頭文件的目的:-) – Cameron 2015-02-07 16:21:45