为了完成课程作业,笔者致力于寻找最简捷的配置方式。目的是连接三个节点运行简单的MPI程序。
参考资料:https://www.open-mpi.org , https://blog.csdn.net/kongxx/article/details/52227572
为了方便后续的SSH连接,这里设置所有节点具有相同的username(因为 ssh IP
等价于 ssh $USER@IP
) 。关于新建用户的部分请参考https://blog.csdn.net/silent56_th/article/details/80033636 。
一个方便后续输入的可选操作是:在各个节点中通过修改/etc/hosts
为其他节点的IP地址映射一个名称,用于指代。
详情参考:https://blog.csdn.net/kongxx/article/details/47046817
简单的说,是节点A用例如RSA的算法生成了公私钥做身份认证,节点B通过记录节点A的公钥,对节点A进行授权。授权完成后,节点A可以不需要密码直接访问节点B。
理论上只需要其他节点对主节点做授权,笔者为了防止bug,对所有节点之间均做了授权。
关于MPI以及Open MPI的简介详见:https://www.open-mpi.org/video/?category=general
简单的说是MPI为协议,Open MPI是具体实现。
关于Open MPI的编译详见:https://www.open-mpi.org/faq/?category=building#easy-build
简易步骤为:下载解压–>configure(--prefix
用于指定安装位置)–> sudo make all install
笔者直接将Open MPI安装到系统中,所以 --prefix=/user/local
,后续也无需设置PATH等系统参数;否则需要将相应位置的bin以及lib路径加入到 $PATH
和 $LD_LIBRARY_PATH
中(可以通过 .bashrc
设置)
mpicc
命令和 gcc/cc
使用方法相似,简单操作是 mpicc <c_filename> -o <excutable_filename>
单节点执行: mpirun -np <processor_num> <filename>
,其中-np指定处理器数目,第一个不可解释的字符串( <filename>
)被看作可执行文件名称。
小集群执行: mpirun -np <processor_num> --hostfile <hostfile_name> <filename>
,其中 <hostfile_name>
内指定可用的节点IP地址与slot数。例如笔者的mpi-hosts文件为:
localhost slots=2
slave1 slots=2
slave2 slots=2
其中localhost为本地节点,slave1/2是其他两个节点在主节点中的IP地址指代(于/etc/hosts
中设置)