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

news2024/11/26 8:35:26


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:$PATH
 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/hipper/ex_openmpi/local/lib
 
 cd examples
 make
 mpirun -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 main
        include 'mpif.h'
        character * (MPI_MAX_PROCESSOR_NAME) processor_name
        integer myid, numprocs, namelen, rc,ierr
        call 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.coloradmin.cn/o/1342856.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python subprocess run 和 Popen 的一些使用和注意事项

文章目录 一、run二、Popen NAME subprocess - Subprocesses with accessible I/O streams MODULE REFERENCE https://docs.python.org/3.9/library/subprocess The following documentation is automatically generated from the Python source files. It may be incomplete, …

【事故总结】Mybatis-Wrapper导致的生产事故

近期遭遇了一次生产环境的严重告警&#xff0c;涉及慢接口和CPU过载。经过排查&#xff0c;发现问题根源在于一段使用MyBatis的查询代码。当传入空列表作为查询条件时&#xff0c;MyBatis会忽略该条件&#xff0c;导致全表扫描&#xff0c;进而引发系统资源耗尽和频繁的Full GC…

浅谈技术架构的演进过程

前言 最近在学习Redis、Doctor相关技术知识&#xff0c;它们与分布式系统有着很大的关系。 而对于分布式系统&#xff0c;它本身就是随着业务的不断推进&#xff0c;技术架构不断演进而得到发展和实现的。而所谓的分布式系统&#xff0c;实际上就是想办法引入更多的硬件资源&am…

OpenHarmony之分布式软总线

分布式软总线是多设备终端的统一基座&#xff0c;为设备间的无缝互联提供了统一的分布式通信能力&#xff0c;能够快速发现并连接设备&#xff0c;高效地传输任务和数据。 分布式软总线实现近场设备间统一的分布式通信管理能力&#xff0c;提供不区分链路的设备间发现连接、组网…

消息队列基础知识

学一点&#xff0c;整一点&#xff0c;基本都是综合别人的&#xff0c;弄成我能理解的内容 https://blog.csdn.net/BenJamin_Blue/article/details/125946812 https://blog.csdn.net/qq_46119575/article/details/129794304 &#x1f4cc;导航小助手&#x1f4cc; 生产者-消费者…

14.12-常见的对于非阻塞复制的误解

常见的对于非阻塞复制的误解 1&#xff0c;非阻塞赋值和$display1.1&#xff0c;RTL案例1.2&#xff0c;功能实现1.3&#xff0c;解释误解 2&#xff0c;#0延时赋值2.1&#xff0c;RTL案例2.2&#xff0c;功能实现2.3&#xff0c;解释误解 3&#xff0c;对同一变量进行多次非阻…

家用洗地机哪个牌子好?2024年洗地机热门品牌测评

随着科技水平的不断发展&#xff0c;人们对家居设备的要求也在不断提高&#xff0c;追求省时省力的家务工具变得越来越受欢迎。家用洗地机的出现满足了这一需求&#xff0c;其洗拖吸一体的特点使其成为现代家庭的必备神器。 使用家用洗地机可以极大地提高地面清洁的效率&#…

因数据侵权,纽约时报起诉OpenAI、微软

12月28日&#xff0c;金融时报消息&#xff0c;因为非法使用数百万篇新闻数据训练ChatGPT等生成式AI产品&#xff0c;《纽约时报》正在起诉OpenAI和微软。 这是第一家起诉生成式AI厂商的著名媒体。《纽约时报》没有公布具体数额&#xff0c;但希望获得数十亿美元的赔偿金。 O…

两向量叉乘值为对应平行四边形面积--公式推导

两向量叉乘值为对应平行四边形面积--公式推导 介绍 介绍

PowerShell Instal 一键部署gitea

gitea 前言 Gitea 是一个轻量级的 DevOps 平台软件。从开发计划到产品成型的整个软件生命周期,他都能够高效而轻松的帮助团队和开发者。包括 Git 托管、代码审查、团队协作、软件包注册和 CI/CD。它与 GitHub、Bitbucket 和 GitLab 等比较类似。 Gitea 最初是从 Gogs 分支而来…

Ubuntu22.04-安装后Terminal无法调出

参考&#xff1a; Ubuntu20.04 终端打开不了的问题排查_ubuntu终端打不开-CSDN博客 https://blog.csdn.net/u010092716/article/details/130968032 Ubuntu修改locale从而修改语言环境_ubuntu locale-CSDN博客 https://blog.csdn.net/aa1209551258/article/details/81745394 问…

2023年度总结:技术旅程的杨帆远航⛵

文章目录 职业规划与心灵成长 ❤️‍&#x1f525;我的最大收获与成长 &#x1f4aa;新年Flag &#x1f6a9;我的技术发展规划 ⌛对技术行业的深度思考 &#x1f914;祝愿 &#x1f307; 2023 年对我来说是一个充实而令人难以忘怀的一年。这一年&#xff0c;我在CSDN上发表了 1…

有效解决vcruntime140_1.dll丢失的问题,关于vcruntime140_1.dll文件

今天在使用电脑的过程中突然提示找不到vcruntime140_1.dll&#xff0c;出现这样的提示后&#xff0c;想要在打开程序时&#xff0c;有再一次提示找不到vcruntime140_1.dll&#xff0c;不能在正常打开程序&#xff0c;那么有什么办法可以解决vcruntime140_1.dll丢失的问题呢&…

用python画最简单的图案,用python画小猫简单代码

本篇文章给大家谈谈用python画小猫简单100行代码&#xff0c;以及用python画最简单的图案&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 Source code download: 本文相关源码 from turtle import * #两个函数用于画心 defcurvemove():for i in range(200): …

Java基础02-Java编程基础

文章目录 变量&#xff08;Variables&#xff09;局部变量和成员变量局部变量&#xff08;Local Variables&#xff09;成员变量&#xff08;Instance Variables&#xff09; 标识符&#xff08;Identifiers&#xff09;八种基本数据类型原始数据类型&#xff08;Primitive Dat…

【网络安全 | CTF】pure_color

该题考察图片隐写 给出一张图片如下&#xff1a; 典型的图片隐写&#xff0c;运行stegsolve即可&#xff1a; 如图&#xff1a; flag{true_steganographers_doesnt_need_any_tools}

《新传奇》期刊投稿论文发表

《新传奇》杂志是经国家新闻出版总署批准、面向国内外公开发行的综合性社科期刊&#xff0c;由湖北省文联主管&#xff0c;湖北今古传奇传媒集团有限公司主办&#xff0c;湖北优秀期刊。本刊旨在坚守初心、引领创新&#xff0c;展示高水平研究成果&#xff0c;支持优秀学术人才…

Element UI之el-tabs的样式修改字体颜色、下划线、选中/未选中

目录 默认样式 修改默认字体颜色&#xff1a; 修改鼠标悬浮/选中字体颜色&#xff1a; 去掉长分割线并修改下划线颜色 完整代码 默认样式 注意事项&#xff1a;一定要在 <style scoped>不然修改的样式不会覆盖生效 修改默认字体颜色&#xff1a; ::v-deep .el-tabs__…

三分钟学完科研论文常用统计图

统计分析的结果通常包括统计图和统计表。统计图是一种用图形表示数据的方式&#xff0c;它能够直观地展示数据的分布、趋势和关系。科研论文中常见的统计图包括条形图、饼图、折线图、散点图等。这些图形可以帮助人们快速地理解和分析数据&#xff0c;找出其中的规律和特征。今…

【LangChain】与文档聊天:将OpenAI与LangChain集成的终极指南

欢迎来到人工智能的迷人世界&#xff0c;在那里&#xff0c;人与机器之间的通信越来越模糊。在这篇博客文章中&#xff0c;我们将探索人工智能驱动交互的一个令人兴奋的新前沿&#xff1a;与您的文本文档聊天&#xff01;借助OpenAI模型和创新的LangChain框架的强大组合&#x…