fortran并行程序入门(1)

news/2024/11/17 4:47:28/

入门俩程序

  • 前言
  • 一、简单并行程序?
  • 二、Fortran并行的一些注解
    • 1.线程通信的一些代码注解
  • 总结


前言

今天,迫不得已还是要学fortran了,不然工作进行不下去。

一、简单并行程序?

本处先加载前人所写的部分代码。

program mainuse mpiimplicit noneinteger*4::ierr,my_id,num_procscall MPI_INIT ( ierr )! find out my process ID, and how many processes were started.call MPI_COMM_RANK (MPI_COMM_WORLD, my_id, ierr)call MPI_COMM_SIZE (MPI_COMM_WORLD, num_procs, ierr) !num_procs--number of processwrite(*,'(1x,i2,a,i2)')my_id,'/',num_procscall MPI_FINALIZE ( ierr )
end program
————————————————
版权声明:本文为CSDN博主「xhh22900」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xhh22900/article/details/117305417

其中种种代码究竟是,干什么用的呢?
use mpi 是导入mpi包,有了这行代码,下面的MPI_INIT之类的函数才能使用。
然后就是MPI_INIT,这是个初始化MPI的代码,初始化调用 MPI 进程的执行环境以执行单线程执行,里面需要包含一个变量,我看大多数人都用ierr。
MPI_COMM_RANK用来标识各个MPI进程,给出调用该函数的进程号,其中的my_id可以作为进程的唯一标识符。
MPI_COMM_SIZE 用来返回通信子进程的进程数
MPI_FINALIZE 用来终结进程

上述代码再linux集群中编译时需要用到mpif90命令,这也是Mpi执行f90文件的命令

mpif90 example.f90 -o example

然后用如下命令执行程序

mpirun -np 8 ./example

这样设置的线程总数为8,也就是用8个线程来执行这个程序,最后输出结果为

  1/ 83/ 84/ 85/ 86/ 87/ 80/ 82/ 8

可以看到,左边为执行程序的线程my_id,斜杠右边为总线程数

二、Fortran并行的一些注解

1.线程通信的一些代码注解

代码如下,这里同样引用了前人所写的代码:

program mainuse mpiimplicit noneinteger*4::ierr,my_id,num_procs,i,tempa,status(mpi_status_size),tt,jcall MPI_INIT ( ierr )! find out my process ID, and how many processes were started.call MPI_COMM_RANK (MPI_COMM_WORLD, my_id, ierr)call MPI_COMM_SIZE (MPI_COMM_WORLD, num_procs, ierr) !num_procs--number of processtempa=my_idif(my_id==0)thenwrite(*,'(1x,i2,a,3i2)')my_id,'/',num_procs,mod(my_id+1,num_procs),mod(my_id-1+num_procs,num_procs)call mpi_send(tempa,1,mpi_integer,mod(my_id+1,num_procs),99,mpi_comm_world,ierr)elsecall mpi_recv(tempa,1,mpi_integer,mod(my_id-1+num_procs,num_procs),99,mpi_comm_world,status,ierr)write(*,'(1x,i2,a,3i2)')my_id,'/',num_procs,mod(my_id+1,num_procs),mod(my_id-1+num_procs,num_procs)endifif(my_id<num_procs-1)call mpi_send(tempa,1,mpi_integer,mod(my_id+1,num_procs),99,mpi_comm_world,ierr)call MPI_FINALIZE ( ierr )
end program
————————————————
版权声明:本文为CSDN博主「xhh22900」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xhh22900/article/details/117305417

这里新增了两个关键的线程通信的代码
MPI_SEND这个代码从英语意思看就是发送,在本代码中的第一个if里,只有my_id=0的线程才仅仅发送,后面都是既接收又发送。
其中,
MPI_SEND(DATA,ICOUNT,DATA_TYPE,IDEST,ITAG,MPI_COMM_WORLD,IERR)
里参数的主要意义为

DATA:要送出资料的起点
ICOUNT:要送出资料的数量,当ICOUNT的值大于1时,DATA必须是阵列类型数据
DATA_TYPE:要送出去的资料类别
IDEST:是收受资料的CPUid
ITAG:是要送出的资料标签

从上解释可以看出,MPI_SEND只管发送,所以它作为先头的第一次进程命令

MPI_RECV 是同时接受发送的命令

CALL MPI_RECV(DATA,ICOUNT,DATA_TYPE,ISRC,ITAG,MPI_COMM_WORLD,ISTATUS,IERR)

以上命令的主要参数意义为

DATA:是要收受资料的起点
ICOUNT:是要收受资料的数量
DATA_TYPE:是要收受资料的类别
ISRC:是送出资料的CPU id
ITAG:是要收受资料的标签
ISTATUS:是执行MPI_RECV副程式之后的状况

其中主要的参数和MPI_SEND差不多,比较易于理解

总结

下班了!!!


http://www.ppmy.cn/news/598617.html

相关文章

python调用fortran的3种形式【f2py,动态链接库,os命令】

一、f2py调用fortran 基于 F2PY&#xff0c;在 Python 中调用 Fortran 函数的基本流程是&#xff1a; Fortran 代码使用f2py编译 Fortran 代码&#xff0c;产生动态库在 Python 中通过import引入动态库 注意&#xff1a; F2py 支持有限的 Fortran 子集。 """…

关于gfortran和ifort

最近用fortran写了个程序&#xff0c;分别用gfortran和ifort进行了编译&#xff0c;却发现同样的代码&#xff0c;gfortran可以编译通过&#xff0c;而ifort出错。下面以样例程序加以说明&#xff0c;看看这两个编译器有什么小区别。 代码包括三个源文件&#xff1a;一个主程序…

macOS使用CodeRunner快速配置fortran环境

个人网站:xzajyjs.cn 由于一些项目的缘故&#xff0c;需要有fortran的需求&#xff0c;但由于是M1 mac的缘故&#xff0c;不能像windows那样直接使用vsivf这种经典配置。搜了一下网上主流的跨平台方案&#xff0c;主要是gfortran&#xff0c;最近用Coderunner&#xff08;主要…

python调用fortran学习笔记

起因&#xff1a;不想把fortran结果手动搬到excel里画图表 先在window系统试&#xff0c; 使用f2py方法的时候总是报错has fortran sources but no fortran compiler found&#xff0c;或者not supported between instances of nonetype and str。 使用dllctypes库的时候&am…

在Linux环境下,使用ifortran编译 带有结构的和.inc头文件 的fortran项目生成.so文件

在Linux环境下&#xff0c;使用ifortran编译 带有结构的和.inc头文件 的fortran项目生成.so文件 1 致谢2 参考文章和手册3 需求描述3.1 文件结构3.2 文件调用关系 4 主程序改造为函数5 项目编译方法5.1 方案一 直接对所有.f90源文件进行编译5.1.1 具体实现5.1.2 注意事项 5.2 方…

Fortran入门——菜鸟级基础语法

前言&#xff1a; 最近需要自学Fortran,本人菜鸟&#xff0c;零基础&#xff0c;这篇文章也是帮助我自己更好的记住一些基础语法。所以&#xff0c;有Fortran基础的&#xff0c;可以跳过本篇啦~ 本文的环境是mingw vscode 哈 1.后缀 Fortran文件的后缀是 .f90&#xff08;还…

Fortran编译初步

写在前面 注意&#xff1a;本文是关于 gfortran 的文章。如果你不清楚 gfortran&#xff0c;g77&#xff0c;g95 等等的概念的话&#xff0c;不妨看看GCC 的 Fortran 语言编译器介绍&#xff1b;如果你要用 g77 的话&#xff0c;这是一篇g77入门。 [编辑]Fortran 编程中相关文…

idea中有个目录不显示,磁盘中是有的

java项目src下有个目录data不显示 通过打开D盘看目录是有的&#xff0c;运行项目的时候报错&#xff0c;找不到目录下的文件。 解决方案&#xff1a; idea -> file -> seetings -> EDitor -> file types 打开页面后右侧显示有ignore files and folders 查看这里面有…