Fortran Coder

查看: 7699|回复: 3
打印 上一主题 下一主题

[编译器] 同一程序,不同电脑效率不同

[复制链接]

131

帖子

34

主题

0

精华

宗师

F 币
1602 元
贡献
813 点
跳转到指定楼层
楼主
发表于 2015-4-20 18:51:12 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
问题是这样的:我新编的一个程序,就是读取所有参数后(参数不多)开始循环运行计算输出结果到文件。
就是正常的Fortran代码编写,没有采用并行计算什么的。
奇怪的是:这个程序在一台配置较低的电脑(i5的CPU)上CPU可以跑到25%,但是同样的exe换到另一台电脑(i7cpu)上只有12%。
这就导致电脑好反而算的慢。
也怀疑是编译器针对当前的电脑做了优化,但是不管在那个电脑上编译得到的exe到两个电脑上试都是差不多的效果。
何解?
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

131

帖子

34

主题

0

精华

宗师

F 币
1602 元
贡献
813 点
地板
 楼主| 发表于 2015-4-21 19:35:03 | 只看该作者
li913 发表于 2015-4-21 10:51
25% 和 12%如果是指的cpu使用率,那么这是正常的。串行程序只能使用一个核心进行计算,如果是四核CPU,能到 ...

一语破的,醍醐灌顶!
十分感谢!

835

帖子

2

主题

0

精华

大宗师

F 币
3926 元
贡献
2334 点
板凳
发表于 2015-4-21 10:51:28 | 只看该作者
25% 和 12%如果是指的cpu使用率,那么这是正常的。串行程序只能使用一个核心进行计算,如果是四核CPU,能到25%;八核CPU,就是12%。

46

帖子

8

主题

0

精华

熟手

F 币
211 元
贡献
131 点
沙发
发表于 2015-4-20 21:11:15 | 只看该作者
我这里有一个简单的程序,你可以在两台电脑上分别试验一下计算时间(也许能帮你分析一下究竟是电脑本身的问题还是程序的问题)。

      program main
      real*8, allocatable :: x(:), y(:)
      real*8 time
      integer*4 time0, time1, dtime
      integer i, j, n, m
      n = 10000
      m = 100000
      allocate(x(n), y(n))
      do i=1,n
        x(i) = rand()
      end do
      call system_clock(time0)
      do j=1,m
        do i=1,n
          y(i) = x(i) + 1d0
        end do
      end do
      call system_clock(time1, dtime)
      time = 1d0*(time1-time0)/dtime
      write(*,"(a7,f16.7)")"Time = ",time
      deallocate(x, y)
      end program
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-25 13:45

Powered by Tencent X3.4

© 2013-2024 Tencent

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