Fortran Coder

查看: 12037|回复: 4
打印 上一主题 下一主题

[讨论] 最近发现的一个问题,一直困扰我,看看没有大神给我解惑

[复制链接]

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

楼主
发表于 2021-2-10 12:19:08 | 显示全部楼层
1. 循环是有损耗的。cycle 也是有损耗的。
2. ce(i,j,k)=dzz 单独一个赋值语句速度是很快的。
3. cycle并不能减少循环的次数,都是80*80*80*1000次。
4. cycle 损耗和赋值语句的损耗相当(差别不大—)。当有 if 的时候,执行 cycle不执行赋值。当没有 if 的时候,执行赋值但不执行cycle。因此,两者的区别也不大。
5. 你的代码写得啰嗦,又低效。你要知道,Fortran是矢量化的语言,它本身可以减少很多不必要的循环,不要用C语言的逻辑来写Fortran代码。
尝试用下面的代码,简练,直观,高效。

[Fortran] 纯文本查看 复制代码
MODULE CDAS1
  REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: indt,ce
  real dzz
ENDMODULE CDAS1

PROGRAM cs
  USE CDAS1
  IMPLICIT NONE
  integer maxx,maxy,maxz
  real time1,time2
  dzz=0.6
  maxz=80;maxy=80;maxx=80
  allocate(indt(maxx,maxy,maxz),ce(maxx,maxy,maxz))
  indt=0;ce=0
  indt(:39,:,:)=1
  call CPU_TIME(time1)
  where(indt==1) ce=dzz
  call CPU_TIME(time2)
  print*,'time',time2-time1
ENDPROGRAM cs
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-8 20:07

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表