作者dv6000 (dv6000)
看板Fortran
标题Re: [心得]Intel Fortran编译器编译双核心程式的心得
时间Tue Dec 22 13:57:42 2009
※ 引述《Geigemachen ()》之铭言:
: ※ 引述《kobenein (哈哈哈)》之铭言:
: : 有没有免费的双核心complier
: 我分享使用Intel Visual Fortran Compiler Professional试用版
: 进行编译双核心程式的心得与疑难。
: 不用修改原始程式码,装对compiler还有其他软体元件,在编译时加对正确的选项参数
: 就好了。
: 步骤与现象:
: 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查讯
哈哈,想不到找到同道中人,事实上,intel visual fortran使用的,是OpenMP的语法,
不知道友有没有用OpenMP的语法来写?
"Qparallel",是自动平行,如果你的code很长,有几千行,这个指令没有用,还会"坏事",
我有碰到道友所说,变很慢速的情形.特别是Threshold给错了,基本上,
整个code就不会动了!
我用的是标准的OpenMP指令,也就是:
Qopenmp,这个才是王道啊,可是code就要照OpenMP的方法来写.
:
: 5.编译後的速度与可携性
: 我把编译成功的双核心.exe在安装Intel compiler的电脑#1上执行成功,
: 速度颇快,是单核心程式执行速度的2-5倍。CPU使用率也从50%上升到100%。
我是用双CPU共8核的机器在跑,我没碰到这样神的case,不过我有量了一下,
大概是这样吧...
计算时间...
1核 55秒
2核 3x秒
3核 2x秒
4核 1x秒
5核 1x秒
6核 1x秒
7核 x秒
8核.....变不稳.
以8核心机器,小弟觉得,驱动5核最经济.
: 信心满满地移植到另一台的双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天以後,速度可以差到这麽多?
: 是软体还是硬体上的问题呢?有没有人编译双核心程式时有解决这种变慢现象的
: 好方法呢?
: 多谢各位指点了,欢迎分享编译的心得
小弟觉得,道友的机器发生了"竞争",也就是说总performance如果是100%,道友可能不小心
用到了101%,那就或发生了竞争.
以双核的机器,小弟不赞成使用多核计算,因为总要空出一个核来做一些杂事.
如果同时驱动双核,那也许就会出问题?
小弟都用Xeon的CPU,其它的CPU能不能用多核,小弟也不清楚.
要用多核计算,除了多核complier,多核CPU,还要有多通道.
道友不知用的是那一种机器?
再者,OpenMP也不支持早期的多核CPU,就算是早期的Xeon,CPU.
整体而言,小弟觉得道友是因为使用"双核"CPU+"Qparallel"+过多的"Threshold",
而引发的不稳定.道友不妨检查看看.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 68.101.70.49
1F:推 Geigemachen:我用Intel Core2 Duo CPU,昨天重试恢复正常了 12/22 18:16
2F:→ Geigemachen:没想到驱动8核会变成不稳,而不是越多CPU就越快 12/22 18:17
3F:→ Geigemachen:我今天忙别的事情,修改程式储存可追踪参数再试试 12/22 18:19
4F:→ blc:自动平行化总是有些问题… 12/22 20:51
5F:→ dv6000:G兄,自动平行不是好方法,双核你同时驱动,很容易不稳. 12/24 12:53
6F:→ dv6000:我觉得应该是总核数要减个1 or 2比较稳. 12/24 12:53