在本地安装fftw-2.1.5和mpi

时间:2014-01-15 16:13:31

标签: mpi fftw

我正在尝试使用带有--enable-mpi标志的Linux集群上安装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,我已经这样做了。

任何人都知道如何解决这个问题?

编辑: 按照弗朗西斯的建议,我使用了CFLAGS而不是CPPFLAGS,我通过了./compile部分。但是我在make期间收到了另一个错误:

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

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

EDIT2: 解决方法是将mpicc作为正确的编译器传递给./configure,并带有CC标志。

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

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

(type-prefix和float是GADGET2所需的额外选项)

1 个答案:

答案 0 :(得分:0)

序言

这是一个非常的旧线程,但我目前正在使用完全相同的环境,上面提供的解决方案本身并没有解决我的问题。然而,我对它的小附录——最终解决了我的问题——在未来可能仍然对其他人有用。 (另外,我对 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(或相应的 {{1 }} 您正在使用的外壳的文件)。我已经完成了上述所有操作,并且... FFTW 仍然不会检测到 MPI 库...

足够的附录

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

$LD_LIBRARY_PATH

是的。经过一周的不断试错,为 GADGET2 和 GADGET4 以及其他软件设置环境,这个小小的改变就是解决方案。