MPI并行程序设计 —— C 和 fortran 环境搭建 openmpi 示例程序


1.安装环境

wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.6.tar.g
tar zxf openmpi-4.1.6.tar.gz
cd openmpi-4.1.6/
其中 configure 选项 --prefix=/.../ 需要使用绝对路径,例如:
./configure  --prefix=/home/hipper/ex_openmpi/local/ 2>&1 | tee config.out
make -j all 2>&1 | tee make.out
make install 2>&1 | tee install.out

2.配置编译运行环境


 

 export PATH=/home/hipper/ex_openmpi/local/bin:$PATHexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/hipper/ex_openmpi/local/libcd examplesmakempirun -np 7 hello_c

效果图:

3. 练习测试环境

3.1 C语言测试

#include "mpi.h"
#include <stdio.h>
#include <math.h>
void main(argc,argv)
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\n",myid, numprocs, processor_name);MPI_Finalize();
}

编译:
gcc hello_ompi.c -I ../local/include/ -L ../local/lib/ -lmpi

执行:
../local/bin/mpirun -np 18 ./a.out

cpu有18个物理核心

效果:

3.2 fortran 语言测试

源代码:每行开始TAB键
        program maininclude 'mpif.h'character * (MPI_MAX_PROCESSOR_NAME) processor_nameinteger myid, numprocs, namelen, rc,ierrcall MPI_INIT( ierr )call MPI_COMM_RANK( MPI_COMM_WORLD, myid, ierr )call MPI_COMM_SIZE( MPI_COMM_WORLD, numprocs, ierr )call MPI_GET_PROCESSOR_NAME(processor_name, namelen, ierr)write(*,10) myid,numprocs,processor_name
10      FORMAT('Hello World! Process ',I2,' of ',I1,' on ', 20A)call MPI_FINALIZE(rc)end

编译:

gfortran hello_ompi.f -I../local/include/ -L../local/lib/  -lmpi_mpifh -lgfortran

运行:

$ ../local/bin/mpirun -np 7 ./a.out

效果图:

3.3 机器名称最长可以占多少个字节

256个字节
效果:

3.4 进程间收发信息

#include "mpi.h"
main( argc, argv )
int argc;
char **argv;
{MPI_Status status;char message[20];int myrank;MPI_Init( &argc, &argv );/* MPI程序的初始化*/MPI_Comm_rank( MPI_COMM_WORLD, &myrank );/* 得到当前进程的标识*/if (myrank == 0) /* 若是 0 进程*/{/* 先将字符串拷贝到发送缓冲区message中 然后调用MPI_Send语句将它发出 用  strlen(message)指定消息的长度 用MPI_CHAR指定消息的数据类型 1指明发往进程1 使用的消息标识是99 MPI_COMM_WORLD是包含本进程 进程0 和接收消息的进程 进       程1 的通信域 发送方和接收方必须在同一个通信域中 由通信域来统一协调和控制消息        的发送和接收*/strcpy(message,"Hello, process 1\n");MPI_Send(message, strlen(message), MPI_CHAR, 1, 99,MPI_COMM_WORLD);}else if(myrank==1) /* 若是进程 1 */{/*进程1直接执行接收消息的操作 这里它使用message作为接收缓冲区 由此可见 对于同   一个变量 在发送进程和接收进程中的作用是不同的 它指定接收消息的最大长度为20 消   息的数据类型为MPI_CHAR字符型 接收的消息来自进程0 而接收消息携带的标识必须为     99 使用的通信域也是MPI_COMM_WORLD 接收完成后的各种状态信息存放在status中    接收完成后 它直接将接收到的字符串打印在屏幕上 */MPI_Recv(message, 20, MPI_CHAR, 0, 99, MPI_COMM_WORLD, &status);printf("received :%s:", message);}MPI_Finalize();/* MPI程序结束*/
}

编译:

$ gcc send_recv_openmpi.c -o send_recv.out -I ../local/include/ -L ../local/lib  -lmpi

运行:

$ ../local/bin/mpirun -np 2 ./send_recv.out

效果图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/307484.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++干货铺】STL中set和map的介绍和使用

个人主页点击直达&#xff1a;小白不是程序媛 C系列专栏&#xff1a;C干货铺 代码仓库&#xff1a;Gitee 目录 序列式容器 关联式容器 键值对 树形结构的关联式容器 set set的介绍 set的使用 set的模板参数列表 set的构造 ​编辑 set的容量 set的删除和查找 mult…

4.16 构建onnx结构模型-And

前言 构建onnx方式通常有两种&#xff1a; 1、通过代码转换成onnx结构&#xff0c;比如pytorch —> onnx 2、通过onnx 自定义结点&#xff0c;图&#xff0c;生成onnx结构 本文主要是简单学习和使用两种不同onnx结构&#xff0c; 下面以 And 结点进行分析 方式 方法一&…

马斯克谈六西格玛:管理质量与火箭科学如何相辅相成

如果你问我&#xff0c;作为一个有志于送人类上火星的家伙&#xff0c;六西格玛管理有没有用&#xff1f;我会说&#xff0c;如果把火箭控制的精度与六西格玛得到的生产质量相比&#xff0c;你会发现两者都追求同一件事&#xff1a;接近零缺陷的完美。 六西格玛不只是一组工具…

【2023 CCF 大数据与计算智能大赛】基于TPU平台实现超分辨率重建模型部署 基于FSRCNN的TPU平台超分辨率模型部署方案

2023 CCF 大数据与计算智能大赛 基于TPU平台实现超分辨率重建模型部署 基于FSRCNN的TPU平台超分辨率模型部署方案 WELL 刘渝 人工智能 研一 西安交通大学 中国-西安 1461003622qq.com 史政立 网络空间安全 研一 西安交通大学 中国-西安 1170774291qq.com 崔琳、张…

MySQL报错:1366 - Incorrect integer value: ‘xx‘ for column ‘xx‘ at row 1的解决方法

我在插入表数据时遇到了1366报错&#xff0c;报错内容&#xff1a;1366 - Incorrect integer value: Cindy for column name at row 1&#xff0c;下面我演示解决方法。 根据上图&#xff0c;原因是Cindy’对应的name字段数据类型不正确。我们在左侧找到该字段所在的grade_6表&…

MySQL的日志管理以及备份和恢复

MySQL日志管理 mysql的日志默认保存位置为/usr/local/mysql/data vim /etc/my.cnf #开启二进制日志功能 vim /etc/my.cnf [mysqld]##错误日志&#xff0c;用来记录当MySQL启动、停止或运行时发生的错误信息&#xff0c;默认已开启 log-error/usr/local/mysql/data/mysql_…

RabbitMQ 核心概念(交换机、队列、路由键),队列类型等介绍

RabbitMQ 核心概念(交换机、队列、路由键)&#xff0c;队列类型等介绍 RabbitMQ 是一个消息队列系统&#xff0c;它的核心概念包括交换机&#xff08;Exchange&#xff09;、队列&#xff08;Queue&#xff09;和路由键&#xff08;Routing Key&#xff09;&#xff0c;它们一起…

shiro1.13认证流程核心-非框架整合版本

本案例测试使用的是shiro1.13.0最新版本测试 1、shiro概述&#xff1f; Apache Shiro是java的一个安全框架&#xff0c;能够实现&#xff1a;认证、授权、加密、会话管理、与Web集成、缓存等。 认证&#xff1a;本质就是判断你输入的用户名和密码跟数据库的是否相同。 授权&am…

售后客服日常回复必备的话术

致歉安抚通用 1.非常抱歉耽误您宝贵的时间了&#xff0c;这边给您查询一下&#xff0c;请稍等。 2.非常抱歉&#xff0c;给您添麻烦了。这边为您转接售后专员给您处理&#xff0c;请亲稍等。 3.影响到您的购物体验万分抱歉。 4.这边都会给您尽心解决的呢。 5.我非常理解您…

全新研发体系助力产品落地 传音控股成科技出海代表

一直以来&#xff0c;手机都被认为是所有新技术的最佳应用载体&#xff0c;尤其是在数字化、智能化时代&#xff0c;技术创新能力决定着手机厂商的生存与发展。 作为全球新兴市场手机行业的中坚力量之一&#xff0c;传音控股始终坚持以技术创新为驱动&#xff0c;围绕用户需求…

Airtest+Poco多设备并发自动化游戏测试框架(遇到的问题)

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

Google Play上架:2023年度总结报告

今天是2023年的最后一个工作日&#xff0c;今天用来总结一下2023年关于谷歌商店上架的相关政策改动和对应的拒审解决方法。 目录 政策更新与改动2023 年 2 月 22 日2023 年 4 月5 日2023 年 7 月 12 日2023 年 10 月 25 日 开发者计划政策拒审邮件内容和解决办法 政策更新与改…