【问题标题】:can't find mpif.h compiling error?找不到 mpif.h 编译错误?
【发布时间】:2015-01-01 02:38:47
【问题描述】:

我下载了一个大型生态系统模型(Ecosystem Demography),它必须在 linux 中编译,它使用 MPI 和 hdf5。我已经安装了 mpich(在 centOS 7 上)用 Gfortran 编译器编译 ED 模型。但它给了我著名的错误

Can't find file: mpif.h

我已经通过“which mpif.h”查找了文件,但它什么也没返回,所以我将 PATH 设置如下:

PATH=/home/hamid/edpacks/mpich-install/bin:$PATH
export PATH

现在 which mpif.h 返回文件的路径,但是当我再次尝试 ./install 模型时,它给了我同样的错误。 问题是我不知道如何设置此路径以及从模型内部到 mpich 的路径。我必须从包含文件或生成文件中设置路径吗?

【问题讨论】:

  • 你是如何编译你的应用程序的?您是否使用 MPI 编译器包装器 (mpifortran)?
  • 正如@WesleyBland 所问,您是否使用 MPI 编译器包装器(mpiccmpif90 等)。 which 也只搜索你的 $PATH。 mpif.h 文件是一个标头,将位于包含目录中(在您的情况下为 /home/hamid/edpacks/mpich-install/include)。
  • 谢谢;是的,我正在使用 mpicc 和 mipf90,我认为问题所在的包含文件中的设置如下:(CMACH=PC_GFORTRAN F_COMP=mpif90 F_OPTS=-g -O2 -ffree-line-length-none -fno-whole-文件 C_COMP=mpicc C_OPTS=-g -O2 LOADER=mpif90 LOADER_OPTS=${F_OPTS} C_LOADER=mpicc LIBS=) 之后( MPI_PATH=/home/hamid/edpacks/mpich-install PAR_INCS=-I$(MPI_PATH)/包括 PAR_LIBS=-L$(MPI_PATH)/lib PAR_DEFS=-DRAMS_MPI)
  • @HamidDashti 我不熟悉 ED,它可能是 Makefile 变量,如果设置 FFLAGS=$(PAR_INCS) 会发生什么?作为旁注,您能否构建一个简单的hello_world MPI 测试?
  • 其实我是并行计算的新手,所以我决定从使用 Mpich2 编译的 hello world 开始。这是代码(mpicc helloworld.c -o myhello \ mpirun -nc 2 ./myhello. )它可以工作。但是我注意到通过增加 CPU 的数量,挂钟时间增加了,我希望它会减少?!

标签: compilation compiler-errors parallel-processing mpi mpich


【解决方案1】:

如果出于某种奇怪的原因,mpif.h 文件确实位于

/home/hamid/edpacks/mpich-install/bin

那么你需要把它移到

/home/hamid/edpacks/mpich-install/include

从此

PAR_INCS=-I$(MPI_PATH)/include 

指向该目录,因此编译器将在该目录中查找头文件(例如 mpif.h)。

(顺便说一句,增加处理器数量并不会自动降低程序的速度;这取决于程序的编写方式。此外,如果您在笔记本电脑上运行此程序,很可能没有更多超过 4 个内核,那么增加处理器数量肯定会减慢即使是 hello-world MPI 程序。)

【讨论】:

    【解决方案2】:

    您无法使用which 搜索.h 文件,只能查找可执行文件(“其中 - 显示(shell)命令的完整路径”)。您必须使用其他命令,例如 findlocate 或仅使用桌面搜索。

    该文件应该在某个include 目录中的某个地方。当通过正确的 MPI 编译器包装器(mpif90mpifort 或类似)编译 Fortran 程序时,应自动包含该库。如果不是,您可以使用-Idirectory_name 编译器标志手动包含它。

    如果您的 Makefile 在某个环境变量中包含目录,如 George 所示,您只需将目录名称添加到该环境变量即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      相关资源
      最近更新 更多