【问题标题】:Install fftw-2.1.5 with mpi in local在本地使用 mpi 安装 fftw-2.1.5
【发布时间】:2014-02-04 05:19:38
【问题描述】:

我正在尝试使用 --enable-mpi 标志在带有 linux 的 IBM 集群上安装 fftw-2.1.5 库,但此后我没有这样做。 我需要 fftw 版本 2.1.5,因为 GADGET2 代码需要该版本,并支持 mpi。

首先,我安装了 mpich-3.0.4:

cd ~/mpich-3.0.4
./configure --prefix=$HOME --enable-shared
make
make install

然后我编辑了我的 .bashrc 文件,添加:

export LD_LIBRARY_PATH="$HOME/lib"
PATH=$PATH:$HOME/bin

然后我尝试安装ffw:

./configure --prefix=$HOME/test --enable-mpi LDFLAGS=-L$HOME/lib CPPFLAGS=-I$HOME/include

但我收到一条错误消息:

checking for mpicc... mpicc
checking for MPI_Init... no
checking for MPI_Init in -lmpi... no
checking for MPI_Init in -lmpich... no
configure: error: couldn't find mpi library for --enable-mpi

我所有的 mpi 测试程序都可以正常工作,并且我能够在笔记本电脑上的 /usr/local 中安装所有东西。我试图搜索问题,但我发现我需要启用 LDFLAGS 和 CCPFLAGS,我已经这样做了。

有人知道如何解决这个问题吗?

编辑: 按照 francis 的建议,我使用了 CFLAGS 而不是 CPPFLAGS,并且通过了 ./compile 部分。但我在制作过程中收到另一个错误:

/opt/ibmcmp/vac/11.1/bin/.orig/xlc: 1501-208 (S) command option D is missing a subargument

这似乎是与 ibm 编译器 (xlc) 相关的问题。

编辑2: 通过将 mpicc 作为正确的编译器传递给带有 CC 标志的 ./configure 来解决。

对于记录,正确的命令是:

 ./configure --prefix=$HOME --enable-mpi --enable-type-prefix --enable-float LDFLAGS=-L$HOME/lib CFLAGS=-I$HOME/include CC=mpicc

(类型前缀和浮点数是 GADGET2 所需的额外选项)

【问题讨论】:

  • 为什么export LD_LIBRARY_PATH="$HOME/lib" 周围有引号?试试echo $LD_LIBRARY_PATH 看看是否设置正确。我对 fftw2.1.5 了解不多,但我会尝试使用 CFLAGS。很奇怪,openmpi 或 mpich 没有安装在集群的某个地方。
  • echo $LD_LIBRARY_PATH 给出 /home//lib,所以没关系。它安装了 openMP 而不是 mpich,不幸的是它与 GADGET2 不兼容。我尝试使用 CFLAGS 而不是 CPPFLAGS 并且成功了! ...好吧, ./configure 部分。我编辑了我的问题。
  • 已解决,如 EDIT2 中所述。谢谢。
  • 你解决了吗?我会对结果感兴趣,我有类似的问题。
  • 是的,参见 EDIT2。这是工作命令: ./configure --prefix=$HOME --enable-mpi --enable-type-prefix --enable-float LDFLAGS=-L$HOME/lib CFLAGS=-I$HOME/include CC= mpicc

标签: mpi fftw


【解决方案1】:

序言

这是一个非常旧线程,但我目前正在使用相同的环境,上面介绍的解决方案本身并没有解决我的问题。然而,我对它的微小补充——最终解决了我的问题——在未来可能仍然对其他人有用和有用。 (另外,我对 GNU/Linux 还很陌生,所以我的回答对其他人来说可能是微不足道的。对此我很抱歉。)

在使用本地安装的 MPI(在我的情况下为 OpenMPI 3.1.3)安装 FFTW 2.1.5 和 3.3.9 失败一周后,同时不断回顾这个线程(和许多其他线程),我的工作解决方案“发现”是完全违反直觉的(至少对我来说,再次)。

原帖中的(必要但不充分的)步骤

原始帖子和编辑中的解决方案和细致的细节是必要的,但它们只需要一点点评论就足够了。这就是为什么我首先要写这个答案。您必须按照原始答案中 EDIT2 中的说明运行 FFTW2 和 FFTW3 的配置。

对于 FFTW2,命令是

./configure --prefix=/path/to/install \
            --enable-mpi \
            --enable-type-prefix \
            --enable-float \
            LDFLAGS=-L/path/to/mpi/lib CFLAGS=-I/path/to/mpi/include \
            CC=mpicc

FFTW3 是

./configure --prefix=/path/to/install \
            --enable-mpi \
            --enable-float \
            LDFLAGS=-L/path/to/mpi/lib CFLAGS=-I/path/to/mpi/include \
            CC=mpicc

(FFTW3 没有--enable-type-prefix 标志,前缀在每种情况下都会自动写入每个FFTW3 标头的开头)

注意:在我的情况下,将编译器显式指定为 CC=mpicc 对于 FFTW2 和 FFTW3 来说都是多余的,但对于其他人来说可能是必要的。

Linux的背叛$PATH

在最初的讨论中,其他人正确地提到,为了使用本地安装的头文件和二进制文件,您必须分别将它们添加到 $LD_LIBRARY_PATH$PATH。当然,MPI 也是如此。 但是。至于我自己,作为一个艰难地发现它的 Linux 新手,这些信息本身是不够的。毫无疑问 - 并且不知道我即将为初学者准备一周的 Linux 地狱之旅 - 我将我的 $PATH$LD_LIBRARY_PATH 变量更新为

PATH=$PATH:/path/to/mpi/bin
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/mpi/lib

export $PATH
export $LD_LIBRARY_PATH

在会话结束时,这些变量将不复存在,因此您必须在此会话中使用它们,或者通过将这些行添加到您的 ~/.bashrc(或相应的 ~/...rc您正在使用的外壳)。我已经完成了上述所有操作,并且... FFTW 仍然无法检测到 MPI 库...

充分的附录

您看,上面的命令是完全有效的,这也是您通常向这些变量中的任何一个添加路径的方式之一。我们都做过很多次。我不熟悉 FFTW 的内在本质,但如果你把 path/to/mpi/... 放在 $PATH$LD_LIBRARY_PATH 的末尾,它就不会找到它们。我不知道为什么,我什至不知道这是否是一种常见且微不足道的行为,所以不要问我这个特殊的异常。因此,如果您在完成上述所有操作后仍然遇到同样的问题,只需在路径和动态库路径的开头添加 MPI,如下所示:

PATH=/path/to/mpi/bin:$PATH
LD_LIBRARY_PATH=/path/to/mpi/lib:$LD_LIBRARY_PATH

export $PATH
export $LD_LIBRARY_PATH

是的。在为 GADGET2 和 GADGET4 以及其他软件设置环境一周的不断试验和错误之后,这个小改动就是解决方案。

【讨论】:

  • 按顺序搜索 PATH 变量中列出的文件夹,因此如果您的路径中有不兼容的 mpi bin,如果您将正确的路径放在末尾,它将被执行(并失败) PATH 变量。如果是这样的话,你把它放在第一位是正确的。无论如何,我很高兴你找到了解决方案,我很高兴显然 GADGET4 在多年后终于出来了!
  • 你很有可能是对的。在过去的 1-2 周内,我使用各种方法将各种 MPI 版本(mpich 和 openmpi)安装到不同的位置。尽管我每次都尝试在新安装之前进行清理,但仍有可能残留一些垃圾。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
  • 2015-12-27
  • 2013-06-17
  • 2017-08-25
  • 1970-01-01
相关资源
最近更新 更多