Fortran Coder

查看: 8450|回复: 1
打印 上一主题 下一主题

[原创] 有这个一个高维数组存储的问题

[复制链接]

9

帖子

5

主题

0

精华

入门

F 币
57 元
贡献
35 点
跳转到指定楼层
楼主
发表于 2021-3-4 23:01:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[Fortran] 纯文本查看 复制代码
PROGRAM Cs

      IMPLICIT NONE

        
        integer i,j,k,m,n,maxx,x1,x2,y1,y2,z1,z2
        integer Num,iNum
        
        real(kind=8) time1,time2,time3,time4,time5,time6

        real(kind=8) numi
        real(kind=8) con

        real,allocatable :: Ex(:,:,:),Hy(:,:,:),Hz(:,:,:),indt(:,:,:)
        maxx=70;numi=1.0;Num=10
        time1=0.0;time2=0.0;time3=0.0;time4=0.0;time5=0.0;time6=0.0
        allocate(Ex(maxx,maxx,maxx),Hy(maxx,maxx,maxx)
     +        ,Hz(maxx,maxx,maxx),indt(maxx,maxx,maxx))
        Ex=0;indt=0
        x1=15;x2=30
        y1=20;y2=35
        z1=18;z2=30
        do k=1,maxx
        do j=1,maxx
        do i=1,maxx
            if(x1<=i.and.i<=x2) indt(i,j,k)=1
            if(y1<=j.and.j<=y2) indt(i,j,k)=1
            if(z1<=k.and.k<=z2) indt(i,j,k)=1
        enddo
        enddo
        enddo
        num=0
        do k=1,maxx-1
        do j=1,maxx-1
        do i=1,maxx
            if(indt(i,j,k)==1) num=num+1
        enddo
        enddo
        enddo      
        print*,'筛选过后数目A',num
        print*,'筛选过后数目(A)/总数(B)', 1.0*num/(maxx*(maxx-1)*(maxx-1))
        time1=0.0
        
        Ex=0
        time1=0.0
        time2=0.0
        call cpu_time(time1)
        do n= 1,10000
        do k=1,maxx-1
        do j=1,maxx-1
        do i=1,maxx

            Ex(i,j,k)=(Hy(i,j,k)-Hy(i,j,k+1))*0.1254
     +               +(Hz(i,j,k)-Hz(i,j+1,k))*0.2948

        enddo
        enddo
        enddo
        enddo
        call cpu_time(time2)    
    
        print*,'总迭代时间(B的耗时)',time2-time1,'s'

        
        Ex=0
        time3=0.0
        time4=0.0
        call cpu_time(time3)
        do n= 1,10000
        do k=1,maxx-1
        do j=1,maxx-1
        do i=1,maxx
             if(indt(i,j,k).eq.1) cycle
            Ex(i,j,k)=(Hy(i,j,k)-Hy(i,j,k+1))*0.1254
     +               +(Hz(i,j,k)-Hz(i,j+1,k))*0.2948
        enddo
        enddo
        enddo
        enddo
        call cpu_time(time4)      
    
        print*,'A的耗时',time4-time3,'s'
        print*,'A/B的时间比',(time4-time3)/(time2-time1)     

      ENDPROGRAM Cs

A与B操作的次数比 与耗时不成比例
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

213

帖子

2

主题

0

精华

宗师

F 币
2126 元
贡献
875 点

规矩勋章

沙发
发表于 2021-3-5 05:26:15 | 只看该作者
本帖最后由 风平老涡 于 2021-3-5 05:35 编辑

1) 没有看到Hy和Hz的赋值。
2)请给出具体的次数比和耗时比。
3)print*,'筛选过后数目(A)/总数(B)', 1.0*num/(maxx*(maxx-1)*(maxx-1)) 给出的是符合条件的次数比, 而

    if(indt(i,j,k).eq.1) cycle 四重循环给出的是不满足条件的时间差。

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-4-27 03:48

Powered by Tencent X3.4

© 2013-2024 Tencent

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