作者Geigemachen ()
看板PLT
标题[疑惑]双核心程式执行一天以後越跑越慢..
时间Mon Dec 21 01:14:21 2009
我分享使用Intel Visual Fortran Compiler Professional试用版
进行编译双核心程式的心得与疑难。
不用修改原始程式码,装对compiler还有其他软体元件,在编译时加对正确的选项参数
就好了。
最令我困惑的现象是,前几个小时CPU使用率满载100%,程式执行得很快,
连续执行一天以後就慢得几乎不会动,删除暂存档,重开机,或是关机几小时冷却
再开机,还是快不起来。
步骤与现象:
1.首先安装Microsoft visual studio (我用2003安装不顺,2005则很快成功)
2.下载Intel Visual Fortran Compiler Professional,试用期30天
http://software.intel.com/en-us/articles/intel-visual-fortran-compiler-
professional-edition-for-windows-evaluation/
3.启动compiler
(1)视窗版:比较容易,省略不提
(2)命令列版:
a)点选程式集中的Fortran Build Environment for applications,
(省略此动作,直接进入命令列编译,会让link失败,如同Microsoft visual
studio安装部份失败时却仍然安装且启动compiler时所产生的错误讯息)
画面跳入命令列以後到C:\Program Files\Intel\Compiler\11.1\051\bin\ia32
目录找到ifort.exe
4.编译选项
使用ifort编译双核心程式,加入正确的选项。我选的命令与选项如下:
(连着不要换行:)
ifort [目的档名不加.exe] /O3 /Qparallel /Qpar-runtime-control
/Qdiag-enable:par [Fortran来源档名,含副档名]
最佳化程度选项:
/O3 很积极最佳化最快运算速度,即使对某些程式而言速度不会更快,
仍增大程式码最佳化以进行加速
/O2 最佳化最快运算速度,对某些程式而言速度不会更快,
不增大程式码也不再继续最佳化
/Qparallel 指定编译时把回圈运算分给不同的多核心CPU进行自动平行运算
/Qpar-runtime-control 让编译器产生执行控制码,进行有效的自动平行运算
/Qdiag-enable:par 显示编译时有关平行运算部分的细节与诊断讯息。
系统预设不显示,无法在编译时被通知是否有进行平行化。
以上选项参数的细节可用ifort/help查讯
5.编译後的速度与可携性
我把编译成功的双核心.exe在安装Intel compiler的电脑#1上执行成功,
速度颇快,是单核心程式执行速度的2-5倍。CPU使用率也从50%上升到100%。
信心满满地移植到另一台的双CPU电脑电脑#2执行,却发现.exe的可携性不好,
程式执行会中断,出现"找不到libiomp5md.dll"的错误讯息。
我就把搜寻电脑
#1compiler资料夹,找到这个档案:
C:\Program Files\Intel\Compiler\11.1\051\bin\ia32\
libiomp5md.dll
把它拷贝到电脑#2上.exe的同一个资料夹,从此这个恼人的错误讯息就消失了。
电脑#2也享受到了类似的加速效果,CPU使用率也从50%上升到100%。
6.超过24小时CPU使用率达到100%的後果:执行速度慢到不会动!?
因为研究工作需要,我需要在两台电脑上连续执行大量程式,常常超过24小时。
我在电脑#1 #2 上都执行双核心程式,超过24小时CPU使用率达到100%,
程式执行速度逐渐变慢,一天後比刚开机就执行的单核心的程式还慢
(同样的程式,单核心程式要连续3-4天以上不关机,才会变得这麽慢)。
(A)重新启动系统,清除暂存档
为了厘清系统记忆体资源配置造成的影响,我就清除系统暂存档(发现暂存档不大),
两台电脑都重新开机,重新执行一样的程式,结果还是慢到几乎不会动。
(B)关机冷却几小时,再重新启动系统
为了厘清硬体上电路过热造成的影响,我就把电脑关机冷却几小时,拿去寒风
比较强的地方冷却,本来很热的风扇与CPU区域也被冷却得凉飕飕的,再重新开机,
执行同样的程式。但是系统仍然变得很慢,慢到几乎不会动。
这就令我很困惑了,怎麽连续执行1天以前,与1天以後,速度可以差到这麽多?
是软体还是硬体上的问题呢?有没有人编译双核心程式时有解决这种变慢现象的
好方法呢?
多谢各位指点了,欢迎分享程式执行加速的心得
--
鱼防水,无法呼吸啊......
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.160.151.62
--
上月球!月球是中国人吴刚不可分割的一部分
抓嫦娥!此女意图分裂中国领土脱离中国掌握
杀玉兔!玉兔为资产阶级之玩物!日帝之玩偶!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.160.151.62
※ 编辑: Geigemachen 来自: 118.160.151.62 (12/21 01:15)
※ 编辑: Geigemachen 来自: 118.160.151.62 (12/21 01:15)
※ 编辑: Geigemachen 来自: 118.160.151.62 (12/21 01:17)
1F:→ iamivers0n:有观察记忆体的用量吗? 12/21 01:20
有的,记忆体够用,两台电脑都有2GB RAM,这个程式使用量约300MB-700MB。
初期跑得快与後来跑得慢期间的记忆体状况差别不大,都够用。
我原来也怀疑记忆体不足,除了这个程式的command line视窗以外,
我把大部分的常驻软体,桌面显示,电脑电源程式,网路功能..都关闭了,
以节省记忆体。
这个方法在电脑执行快的时候有效,最多增快执行速度到1.5倍左右,
慢到不会动的时候没用,同一台电脑原来只要10分钟就完成的进度,
放了好四五个小时都不会动。
单核心程式也有类似的现象,只是没有那麽快发生,也没有变慢得那麽明显且剧烈。
※ 编辑: Geigemachen 来自: 118.160.151.62 (12/21 01:24)
※ 编辑: Geigemachen 来自: 118.160.151.62 (12/21 01:28)
2F:推 godfat:可否说明演算法是在做什麽?单这样看似乎也只能乱猜 12/22 00:05
多谢板主指点,我稍後加上演算法,整理中..
因为演算目的是物理用途,我试着不要提供太多物理相关的描述免得造成阅读困难,
※ 编辑: Geigemachen 来自: 140.109.112.200 (12/22 00:34)
※ 编辑: Geigemachen 来自: 140.109.112.200 (12/22 00:57)