首页/文章/ 详情

Fortran 的FORALL结构

7月前浏览5197

本文摘要(由AI生成):

本文介绍了FORALL结构在Fortran语言中的用途和限制。FORALL旨在构建高效并行执行程序的结构,特别是在处理多重循环等并行过程时。尽管FORALL在语法上提供了一种简洁的数组操作方式,但其实际运行速度并不总是优于传统的do循环,有时甚至更慢。这主要是因为FORALL的性能强烈依赖于编译器的优化能力。在Fortran2015中,FORALL已被视为要淘汰的语法。文章建议,为了获得并行优势,不如直接使用mpi来拆分do循环。此外,文章还提到了如何使用cpu_time函数来测量FORALL和do循环的执行时间,以便进行性能比较。


FORALL结构旨在建立一种高效执行程序的结构,特别是在并行过程,例如多重循环

以上两种写法完全等效,需要指出的是:FORALL只能用于数组操作,也就是说,赋值符号两边只能是数组。然而在实际使用中,FORALL结构的运算速度并不比do循环快,有时甚至比do循环还慢不少。以下是Intel Fortran编译器的官方文档说明

可以看到,FORALL强烈依赖于编译器优化,不一定能提高速度。因此,Fortran2015里FORALL已经是要淘汰的语法了。想要并行优势,还不如直接mpi把do循环给拆了。


PS:cpu_time返回的是一个浮点型数字,表示当前CPU运行时间(以秒计)

示例:

program  test_cpu_time

 real :: start, finish

 call cpu_time(start)

 ! put code to test here

 call cpu_time(finish)

 print '("Time = ",f6.3," seconds.")',finish-start

end program test_cpu_time


这样可以自己分别用FORALL结构和do循环结构做个测试,看看各自运行的时间。


来源:数值分析与有限元编程
科普
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-04-02
最近编辑:7月前
太白金星
本科 慢慢来
获赞 5粉丝 10文章 321课程 0
点赞
收藏
作者推荐

Python画五星红旗

本文摘要(由AI生成):本文介绍了使用Python的Turtle库绘制五星红旗的思路和方法。绘制过程分为三个模块:设计旗面、大五角星和四个小五角星,通过定义相应的函数实现。Turtle库提供了丰富的绘图命令,包括绘图窗口设置、运动控制、方向设置和画笔控制等。利用这些命令,可以在Turtle的坐标系中绘制出五星红旗。绘图时,需要合理设置各个部分的位置和比例,以达到理想的绘制效果。Turtle库作为一个简单易用的图形绘制工具,对于学习和实践图形编程非常有帮助。画五星红旗的思路:首先,应分为三个模块展开设计,第一个模块是设计旗面,对于国旗的旗面可以按照黄金分割比进行设计,第二个模块是设计大五角星,第三个模块是设计四个小五角星。分别定义三个函数draw_rentangle,draw_big_star,draw_small_star来实现。三者之间的合适位置可以通过下图比例作参考,再根据效果图进行修正。Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。以下是turtle的一些方法1、绘图窗口设置命令turtle.setup(400,300,200,100):参数以此(宽,高,距离屏幕左边距离,距离屏幕上方距离),屏幕左上角原点,单位像素。2、运动命令turtle.goto(x,y):直接跳转到(x,y)点,以绘图窗口中心为原点,向右为x轴,向上为y轴。turtle.fd(d)、turtle.forward(d):以当前方向,往前行进d像素。turtle.bk(d)、turtle.backword(d):保持当前方向不变,往后退行d像素。turtle.circle(r,angle):从当前位置以r为半径圆的angle角度旋转。3、方向设置命令turtle.seth(angle):以x轴方向为起点将方向偏转为angle度,逆时针为正。只改变行进方向但不行进。turtle.left(angle):在当前行进方向的基础上,向左旋转angle度。turtle.right(angle):在当前行进方向的基础上,向右旋转angle度。4、画笔控制命令turtle.penup():台笔turtle.pendown():落笔turtle.pensize(width):画笔粗细turtle.pencolor(颜色名red/RGB三元组/颜色编码):画笔颜色turtle.fillcolor(colorstring):绘制图形的填充颜色turtle.begin_fill():开始填充turtle.end_fill():结束填充turtle.filling():返回当前是否在填充状态来源:数值分析与有限元编程

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈