如何在 Xcode 中使用 mpi.h?
How do I use the mpi.h in Xcode?
我已经按照给定网站上的说明安装了MPICH3.2
http://mpitutorial.com/tutorials/installing-mpich2/
我下载了 tar 文件并在 Downloads/ 目录中并使用 terminal.I 安装,想在我提交到远程机器之前测试我的程序是否在我的本地机器上运行。
问题是当我写 header #include "mpi.h" Xcode 时无法识别它。如何将 MPICH 库添加到 Xcode ?或者我如何做到 Xcode 使用 mpi 进行编译?
构建 MPI
应用程序的 "natural" 方法是使用 MPI
包装器(例如 mpicc
和朋友)而不是本机编译器(例如 gcc
/ clang
和朋友)。通过这样做,mpi.h
将位于包含路径中,并且您不需要手动 link 各种 MPI
库(顺便说一句,这是 MPI 实现特定的)
我个人会这样做(请注意,我从不在 XCode 中编译 MPI 代码 - 我通过 Makefile、CMake 编译)。
我会在特定位置安装 MPI(来自来源)- 看看这里如何操作:Running Open MPI on macOS
然后,我会创建超级简单的 MPI 代码(例如像这样)
#include <stdio.h>
#include "mpi.h"
int main(int argc, char * argv[]){
int my_rank, p, n;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &p);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
printf("size: %d rank: %d\n", p, my_rank);
MPI_Finalize();
}
然后,我会使用 mpicc 对其进行编译(如@Gilles 所述)。
> mpicc -v -o mpi ./mpi.c
> mpirun -np 4 ./mpi
size: 4 rank: 1
size: 4 rank: 2
size: 4 rank: 0
size: 4 rank: 3
选项 -v
将为您提供所需的所有位置。然后,我会将所有这些选项都纳入 XCode。
您还可以使用 mpicc -show
获取构建基于 MPI 的代码所需的标志。
事实上,它应该开箱即用。看这里:
您需要设置包含(如图)
和 MPI 库(如图所示)
而且,你应该也能运行它
要使用 mpirun
获取它 运行,请务必设置:Product->Scheme->Edit Scheme
。并且,确保将 Arguments
更改为
和 Executable
到 mpirun
- 它应该在安装 MPI 的 bin
目录中。
更新
看起来 XCode 11.0
也需要传递图书馆位置。过去是从文件中推断出来的。现在,您必须在构建设置中显式传递它
更新此位置后。它会按预期工作。
我已经按照给定网站上的说明安装了MPICH3.2
http://mpitutorial.com/tutorials/installing-mpich2/
我下载了 tar 文件并在 Downloads/ 目录中并使用 terminal.I 安装,想在我提交到远程机器之前测试我的程序是否在我的本地机器上运行。
问题是当我写 header #include "mpi.h" Xcode 时无法识别它。如何将 MPICH 库添加到 Xcode ?或者我如何做到 Xcode 使用 mpi 进行编译?
构建 MPI
应用程序的 "natural" 方法是使用 MPI
包装器(例如 mpicc
和朋友)而不是本机编译器(例如 gcc
/ clang
和朋友)。通过这样做,mpi.h
将位于包含路径中,并且您不需要手动 link 各种 MPI
库(顺便说一句,这是 MPI 实现特定的)
我个人会这样做(请注意,我从不在 XCode 中编译 MPI 代码 - 我通过 Makefile、CMake 编译)。
我会在特定位置安装 MPI(来自来源)- 看看这里如何操作:Running Open MPI on macOS
然后,我会创建超级简单的 MPI 代码(例如像这样)
#include <stdio.h>
#include "mpi.h"
int main(int argc, char * argv[]){
int my_rank, p, n;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &p);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
printf("size: %d rank: %d\n", p, my_rank);
MPI_Finalize();
}
然后,我会使用 mpicc 对其进行编译(如@Gilles 所述)。
> mpicc -v -o mpi ./mpi.c
> mpirun -np 4 ./mpi
size: 4 rank: 1
size: 4 rank: 2
size: 4 rank: 0
size: 4 rank: 3
选项 -v
将为您提供所需的所有位置。然后,我会将所有这些选项都纳入 XCode。
您还可以使用 mpicc -show
获取构建基于 MPI 的代码所需的标志。
事实上,它应该开箱即用。看这里:
您需要设置包含(如图)
和 MPI 库(如图所示)
而且,你应该也能运行它
要使用 mpirun
获取它 运行,请务必设置:Product->Scheme->Edit Scheme
。并且,确保将 Arguments
更改为
和 Executable
到 mpirun
- 它应该在安装 MPI 的 bin
目录中。
更新
看起来 XCode 11.0
也需要传递图书馆位置。过去是从文件中推断出来的。现在,您必须在构建设置中显式传递它
更新此位置后。它会按预期工作。