zoukankan      html  css  js  c++  java
  • MPI2 编程环境搭建 MPI4PY 编程环境搭建

    最近发现了一门新语言 Julia   ,  这门编程语言据说大有取代 Python语言成为数据科学的大佬,但是细看发现最主要说的是这门编程语言运行速度比较快,并且在分布式和并行计算上比较有优势,这时候我就在想PYTHON语言是否也可以比较容易的搭建并行计算的平台呢,这一看还真有,就是  MPI4PY,这是个基于MPI的Python并行计算框架,其实细研究发现这个东西其实就是把MPI做了一下封装,然后把Python的消息用MPI进行传递。

    由于  mpi4py  是在MPI 之上进行运作的,需要先安装MPI,  于是下面我们先安装MPI。

    MPI 的old 版本下载地址:

    http://www.mpich.org/static/downloads/

    由于MPICH2的中文资料比较好找,于是本文安装MPICH2的版本,mpich2-1.0.4p1  。

    mpich2-1.0.4p1

    下载地址:

    http://www.mpich.org/static/downloads/1.0.4p1/mpich2-1.0.4p1.tar.gz

    下载后解压。

    编译:

    ./configure --prefix=/opt/mpich2-1 --enable-f90 --enable-cxx --enable-threads=multiple --enable-sharedlibs=gcc --with-mpe
    make 
    
    
    sudo make install

    本文的安装环境为  Ubuntu16.04, mpi的安装路径设置为  /opt/mpich2-1   。

    其中,编译过程中报错,  最后发现是系统中还需要安装LIB库,于是,

    sudo apt install mpich

    不过据网上说只需要安装   libmpich-dev  就可以,不过没有考证。

    安装结束后进行设置:

    在  $HOME 文件夹下面的  .bashrc 文件中添加内容:

    export PATH=/opt/mpich2-1/bin:$PATH
    export LD_LIBRARY_PATH=/opt/mpich2-1/lib:$LD_LIBRARY_PATH

    source  .bashrc   更新系统变量。

    配置  mpd

    cd $HOME
    
    touch .mpd.conf
    
    sudo chmod 600 .mpd.conf
    修改内容:  vim .mpd.conf
    
    
    
    MPD_SECRETWORD=mr45-j9z
    mr45-j9z  为密码内容,  该内容可以自己随意设置。



    启动 mpd
    mpd &

    以上为 MPICH2 安装的全部过程。




    下面安装MPI4PY
    sudo pip2 install mpi4py

    测试 ,  mpi4py  是否安装成果:

    测试文件:

    # mpi_helloworld.py
    
    from mpi4py import MPI
    
    
    comm = MPI.COMM_WORLD
    size = comm.Get_size()
    rank = comm.Get_rank()
    node_name = MPI.Get_processor_name() # get the name of the node
    
    print 'Hello world from process %d at %s.' % (rank, node_name)

    运行:

    mpiexec -n 4 python x.py

    安装成功。

    ================================================================================

    MPICH2   安装成功测试:

    创建文件  hello.c

    #include "mpi.h"  
    #include <stdio.h>  
    #include <math.h>  
    int main (int argc, char **argv)  
    {  
    int myid, numprocs;  
    int namelen;  
    char processor_name[MPI_MAX_PROCESSOR_NAME];  
    MPI_Init (&argc, &argv);  
    MPI_Comm_rank (MPI_COMM_WORLD, &myid);  
    MPI_Comm_size (MPI_COMM_WORLD, &numprocs);  
    MPI_Get_processor_name (processor_name, &namelen);  
    fprintf (stderr, "Hello World! Process %d of %d on %s
    ", myid, numprocs, processor_name);  
    MPI_Finalize ();  
    return 0;  
    }

    编译:

    mpicc -o hello hello.c

    执行:

    mpirun -np 4 ./hello

    安装成功。

  • 相关阅读:
    离鞘剑(四)
    Node.js 蚕食计划(四)—— Express + SQL Server 搭建电影网站
    离鞘剑(三)
    python数据类型(第三弹)
    python数据类型(第二弹)
    python数据类型(第一弹)
    开发工具的安装与使用(总结篇)
    开发工具的安装与使用(第四弹)
    PriorityQueue和PriorityBlockingQueue
    一文弄懂java中的Queue家族
  • 原文地址:https://www.cnblogs.com/devilmaycry812839668/p/9476554.html
Copyright © 2011-2022 走看看