计算化学公社

标题: openmpi安装运行问题 [打印本页]

作者
Author:
西乡新丰客    时间: 2017-1-6 09:15
标题: openmpi安装运行问题
我刚刚装了openmpi-1.10.2版本,按照网上的方法安装的,设置好环境变量之后运行了下,mpirun -np 4 hello_c,但是结果并没有4个进程,只有一个进程,却重复了4次;但在运行mpirun -np 4 hello_usempi.f90时,出现提示:mpirun noticed that the job aborted, but has no info as to the process that caused that situation。
请问这是什么原因?                              

作者
Author:
archer    时间: 2017-1-6 12:58
你应该发下代码
作者
Author:
西乡新丰客    时间: 2017-1-6 16:37
archer 发表于 2017-1-6 12:58
你应该发下代码

我用了两个测试的例子,一个是程序自带的hello_c,还有一个是下载的hello_c,但出现的结果都是一样的。
#include <stdio.h>
#include "mpi.h"

int main(int argc, char* argv[])
{
    int rank, size, len;
    char version[MPI_MAX_LIBRARY_VERSION_STRING];

    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    MPI_Get_library_version(version, &len);
    printf("Hello, world, I am %d of %d, (%s, %d)\n",
           rank, size, version, len);
    MPI_Finalize();
}
另一个是
   #include<stdio.h>
    #include"mpi.h"

    int main(int argc, char *argv[]){
            int totalTaskNum, rankID;

            int rt = MPI_Init(&argc, &argv);
            if(rt != MPI_SUCCESS){
                    printf("Error starting MPI.\n");
                    MPI_Abort(MPI_COMM_WORLD, rt);
            }

            MPI_Comm_size(MPI_COMM_WORLD, &totalTaskNum);
            MPI_Comm_rank(MPI_COMM_WORLD, &rankID);

            printf("Hellow, world! %dth of totalTaskNum = %d\n", rankID, totalTaskNum);

            MPI_Finalize();

            return 0;
    }
程序应该没问题,因为在集群上运行是正常的。我对并行计算不太熟悉,只是看过一些mpi和openmp的资料,所以想问问是不是对单机安装有什么特殊的地方?
作者
Author:
archer    时间: 2017-1-6 17:21
本帖最后由 archer 于 2017-1-6 17:29 编辑

每个进程应该输出一个hello,就是4个,你的输出是什么样的?Hello, world, I am 1 of 4, (Intel(R) MPI Library 5.0 Update 3 for Linux* OS
, 48)
Hello, world, I am 2 of 4, (Intel(R) MPI Library 5.0 Update 3 for Linux* OS
, 48)
Hello, world, I am 3 of 4, (Intel(R) MPI Library 5.0 Update 3 for Linux* OS
, 48)
Hello, world, I am 0 of 4, (Intel(R) MPI Library 5.0 Update 3 for Linux* OS
, 48)
应该没有问题



作者
Author:
archer    时间: 2017-1-6 17:26
本帖最后由 archer 于 2017-1-6 17:29 编辑

编译:mpicc hello.c
运行 mpirun -np 4 ./a.out
mpirun -np 4 hello_c这既不是编译,也不是运行。

作者
Author:
西乡新丰客    时间: 2017-1-6 18:02
本帖最后由 西乡新丰客 于 2017-1-6 18:10 编辑
archer 发表于 2017-1-6 17:26
编译:mpicc hello.c
运行 mpirun -np 4 ./a.out
mpirun -np 4 hello_c这既不是编译,也不是运行。

编译后的文件hello_c,在例子中已经给出了,我用的是mpicc -o hello_c   hello_c.c命令来编译的,而openmpi并行运行文件我在集群上一直都是这么做的不过集群上是fortran,用的是mpif90来并行的。我上面给出的是hello.c的文件,我现在不知道为什么会出现只有一个进程重复4次的情况,结果如下
Hellow, world! 0th of totalTaskNum = 1
Hellow, world! 0th of totalTaskNum = 1
Hellow, world! 0th of totalTaskNum = 1
Hellow, world! 0th of totalTaskNum = 1
谢谢


作者
Author:
archer    时间: 2017-1-6 18:47
你的配置没有设置正确,按照教程再检查一遍看看,不行的话,我也没有办法,抱歉
作者
Author:
西乡新丰客    时间: 2017-1-6 21:00
archer 发表于 2017-1-6 18:47
你的配置没有设置正确,按照教程再检查一遍看看,不行的话,我也没有办法,抱歉

嗯,我再试试,谢谢
作者
Author:
卡开发发    时间: 2017-1-7 03:22
一次跳出来n个相同的有可能是环境变量的问题,你该检查一下which mpicc看看路径的指向是不是你安装的目录。
作者
Author:
西乡新丰客    时间: 2017-1-7 10:17
本帖最后由 西乡新丰客 于 2017-1-7 11:20 编辑
卡开发发 发表于 2017-1-7 03:22
一次跳出来n个相同的有可能是环境变量的问题,你该检查一下which mpicc看看路径的指向是不是你安装的目录。

谢谢,which后不是我的安装目录,我的mpicc应该在/usr/local/openmpi/bin下,但which的路径是usr/bin/下,我重新安装了下,可以用了,但是还有两个问题:
1,我在重新安装时,config  --prefix=/×××/×××/   后面加上的F77=ifort  以及FC=ifort是在确定用的编译器么?但是,我的fortran编译器有gfortran以及ifort,但是当我加上这个F77=ifort FC=ifort参数后,会出现错误提示:是fortran编译器问题而不是openmpi的问题。然后就终止了。可是我的ifort -v是可以显示出版本号的,为什么还会说我的fortran编译器有问题?
2,我在网上下载的一个hello_c.c的程序mpicc 编译后mpirun执行可以显示出正确的进程结果。但是我用openmpi的example中的hello_c.c编译后还是错误的结果,就是一个进程显示np次。这又是为什么?(现在我which mpicc后的路径和我的安装路径是一样的了)。
谢谢

作者
Author:
卡开发发    时间: 2017-1-7 11:52
西乡新丰客 发表于 2017-1-7 10:17
谢谢,which后不是我的安装目录,我的mpicc应该在/usr/local/openmpi/bin下,但which的路径是usr/bin/下 ...

1、configure的过程只是生成编译过程的用到的一些本机的信息。同样检查ifort的所有环境变量是否正确设置,把你的错误信息发来看看;
2、ifort不正常的话icc也够呛工作正常,尚不清楚原因。
作者
Author:
西乡新丰客    时间: 2017-1-7 15:56
本帖最后由 西乡新丰客 于 2017-1-7 21:21 编辑
卡开发发 发表于 2017-1-7 11:52
1、configure的过程只是生成编译过程的用到的一些本机的信息。同样检查ifort的所有环境变量是否正确设置 ...

*** Fortran compiler
checking whether we are using the GNU Fortran compiler... no
checking whether ifort accepts -g... no
configure: WARNING: Open MPI now ignores the F77 and FFLAGS environment variables; only the FC and FCFLAGS environment variables are used.
checking whether ln -s works... yes
checking if Fortran compiler works... no
**********************************************************************
* It appears that your Fortran compiler is unable to produce working
* executables.  A simple test application failed to properly
* execute.  Note that this is likely not a problem with Open MPI,
* but a problem with the local compiler installation.  More
* information (including exactly what command was given to the
* compiler and what error resulted when the command was executed) is
* available in the config.log file in the Open MPI build directory.
**********************************************************************
configure: error: Could not run a simple Fortran program.  Aborting.
这就是在用./configure  --prefix=/***/  F77=ifort   FC=ifort出现的提示,但我已經检查了一遍环境配置which ifort是我安装的目录。而且我的ifort可以编译*.f90的fortran文件,为什么还说我的ifort安装有问题?

作者
Author:
西乡新丰客    时间: 2017-1-7 16:06
本帖最后由 西乡新丰客 于 2017-1-7 21:04 编辑
卡开发发 发表于 2017-1-7 11:52
1、configure的过程只是生成编译过程的用到的一些本机的信息。同样检查ifort的所有环境变量是否正确设置 ...

而且,现在我把openmpi的example中的hello_c.c文件cp到我的主目录~/下,再编译运行,就能得到正确的进程数了,但如果还在openmpi的目录下运行,还是会出现一个进程重复np次的情况。(说明下,我的openmpi装在了/usr/local/下,例子也就在/usr/local/openmpi/example下)而且我在修改路径时只修改了~/.bashrc,中的PATH和LIB,我想,问题是不是出在了只修改了用户主目录下的.bashrc而没有修改根目录下的环境变量,所以我又修改了/etc/profile中的PATH和LIB,但在openmpi目录下编译运行的结果还是同上面一样,这是为什么?
作者
Author:
西乡新丰客    时间: 2017-1-7 21:30
卡开发发 发表于 2017-1-7 11:52
1、configure的过程只是生成编译过程的用到的一些本机的信息。同样检查ifort的所有环境变量是否正确设置 ...

还有一点,就是,我把/usr/local/openmpi/example下的*.f90的并行例子cp到主目录~/下用mpifort编译,然后用mpirun运行,是可以正常运行得出正确的进程数的。这和mpicc那个编译出现的问题一样,都是在根目录下没法正常运行,但到了主目录下就可以了,即使我也改变了根目录下/etc/profile内的路径,仍然会出现只有一个进程重复np次的情况。请问,这是为什么?谢谢
作者
Author:
卡开发发    时间: 2017-1-8 06:19
本帖最后由 卡开发发 于 2017-1-8 06:23 编辑
西乡新丰客 发表于 2017-1-7 21:30
还有一点,就是,我把/usr/local/openmpi/example下的*.f90的并行例子cp到主目录~/下用mpifort编译,然 ...

哦,你有mpiifort,那看来环境变量有冲突,看看能否在bashrc或profile先注释掉intel的mpi的环境变量,然后再试试。
作者
Author:
西乡新丰客    时间: 2017-1-8 10:36
卡开发发 发表于 2017-1-8 06:19
哦,你有mpiifort,那看来环境变量有冲突,看看能否在bashrc或profile先注释掉intel的mpi的环境变量,然 ...

抱歉,我没了解您的意思,man mpifort中说是openmpi中带的fortran编译器,我只在.bashrc和profile内设置了intel的ifort的路径,和openmpi的路径,我以前装过mpich但并没有设置环境变量,所以也没有用过mpich。我如果直接./configure  --prefix=/*****/不加F77,FC参数,是可以成功配置的。
您让我注释掉inter的mpi环境变量,可我本来就没有写到bashrc和profile里去,这应该怎么办?谢谢
作者
Author:
西乡新丰客    时间: 2017-1-8 11:06
卡开发发 发表于 2017-1-8 06:19
哦,你有mpiifort,那看来环境变量有冲突,看看能否在bashrc或profile先注释掉intel的mpi的环境变量,然 ...

我不是太明白您的意思,因为我并没有在.bashrc或者profile内写入过其他的mpi的环境变量。
我现在觉得问题可能是出在了在根目录下编译fortran程序时,只能用gfortran,只有在主目录~/下才可以用ifort来编译,但是以前我装gfortran时并没有写入过其路径,现在在.bashrc或者profile内也没有其路径,所以我想知道如何使得在根目录下可以用ifort来编译,而不用gfortran来编译。
谢谢
作者
Author:
卡开发发    时间: 2017-1-8 11:54
西乡新丰客 发表于 2017-1-8 11:06
我不是太明白您的意思,因为我并没有在.bashrc或者profile内写入过其他的mpi的环境变量。
我现在觉得问 ...

实在不行私下联系,我远程看下好了,实在搞不定再说。
作者
Author:
西乡新丰客    时间: 2017-1-8 17:03
卡开发发 发表于 2017-1-8 11:54
实在不行私下联系,我远程看下好了,实在搞不定再说。

好的,谢谢,我自己先试试
作者
Author:
西乡新丰客    时间: 2017-1-8 20:59
本帖最后由 西乡新丰客 于 2017-1-8 21:03 编辑
卡开发发 发表于 2017-1-8 11:54
实在不行私下联系,我远程看下好了,实在搞不定再说。

麻烦您在看下:我将openmpi的路径写入~/.bashrc内source后,把/usr/local/openmpi/example下的*.f90的并行例子cp到主目录~/下用mpifort编译,然后用mpirun运行, 是可以正常运行得出正确的进程数的,但是当我在根目录下编译时,是不能用mpifort来编译的,只能用mpif90来编译,而且编译后再用mpirun运行后会出现一个进程重复np次的情况。我又修改了根目录 下/etc/profile内openmpi的路径,仍然会出现只有一个进程重复np次的情况。
我并没有在.bashrc或者profile内写入过其他的mpi的环境变量。(只有ifort和openmpi的路径。)
我觉得问题是不是在于在根目录下编译fortran程序时,只能用gfortran,而我的gfortran又并没有安装好,所以只有一个进程,重复了np次,而在主目录~/下,由于我在bashrc中写入来openmpi以及ifort的路径,所以可以用ifort来编译。而现在在根目录下仍然是只能用gfortran来编译串行的fortran程序,而不能用ifort来编译,会提示sudo:ifort找不到命令。我想,是不是只要我在根目录下能用ifort编译串行的fortran程序,就可以正确安装openmpi了。这之前出想的./configure --prefix=/***/ F77=ifort FC=ifort所出现的错误也就会没有了。我已經用root下source了/.bashrc以及/etc/profile还是没有用处。
另外有帖子说:“openmpi设置fortran编译器,通过 man mpif90查到在/usr/share/openmpi/mpif90-wrapper-data.txt里面修改配置,内容的话一看就知道了。”我也试过将mpifort-wrapper-data.txtcompiler中compiler参数修改为ifort也没有效果。
作者
Author:
kinkeng    时间: 2017-4-16 17:51
西乡新丰客 发表于 2017-1-7 21:30
还有一点,就是,我把/usr/local/openmpi/example下的*.f90的并行例子cp到主目录~/下用mpifort编译,然 ...

虽然不知道具体问题,我觉得可能是权限问题




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3