主题:关于Intel矢量化的问题
baccle
[专家分:190] 发布于 2010-11-04 11:59:00
急问高手:
我的程序是在大型机上计算的,已经在程序中使用了OpenMP做并行处理,用的是Intel fortran的编译器,在编译的时候有以下提示:remark:block was vectoried。这个提示的意思应该是对程序进行了矢量化。请问,如果大型机上一共只有有128个CPU,我已经开了128个线程并行计算,就是说CPU的使用率已经100%,如果此时程序还vectoried的话,会不会反而比不vectoried慢呢?
回复列表 (共9个回复)
沙发
dongyuanxun [专家分:7180] 发布于 2010-11-04 13:14:00
那个remark是自动SIMD向量化,和并行可以同时使用
openmp是基于线程的,向量化是基于cpu指令的
板凳
baccle [专家分:190] 发布于 2010-11-04 14:36:00
谢谢楼上,我的个人电脑是4个CPU,装的是Intel Fortran10.0.025的编译器,编译的时候没有remark:block was vectoried的提示,大型机上装的是Intel Fortran 10.1.018,编译的时候出现了这个提示,如果大型机上也开4个CPU,运算的速度反而比个人电脑要慢,而且还慢了不少,请问是因为什么慢的呢?实在是想不明白?
3 楼
yeg001 [专家分:14390] 发布于 2010-11-04 16:01:00
openmp一般不会做那么底层的并行的. SIMD向量化不应该影响到你的并行程序. 况且SIMD相当于是硬件并行, 好处不言而喻.
至于比你的PC慢, 请问你的PC配置是什么, 你的"大型机"配置是什么? 编译的时候用了什么优化?
4 楼
baccle [专家分:190] 发布于 2010-11-04 16:33:00
谢谢楼上,我的PC机是Intel(R) Core(TM) 2 Quad CPU Q9550 @2.83GHz,1.95G内存;编译器是Intel 10.0.025,编译模式是release。 大型机是天津最近新组装好的“天河一号”TH-1小系统,它的用户手册写的是:每个计算结点都是一个多核SMP服务器,每个计算结点配置是是两个Intel Xeon5450四核CPU, 运行频率3.0GHz,32G主存 。编译时用的是Linux下的-O2级别优化,这个应该是和PC机里面visual studio环境里面release的默认优化级别是一样的。
在studio里面有Debug和release两个模式,在Linux下ifort后面加什么编译指令可以和release等价呢?以前我用Fortran做过的并行只是在个人电脑上做的,用的都是Windows下的visual studio环境,对Linux不熟,也没有大型机的并行计算经验,如果楼上解释环境变量设置,编译指令什么的,麻烦说详细点,呵呵,万分感谢。
抓狂中……急找高手求助
5 楼
dongyuanxun [专家分:7180] 发布于 2010-11-04 17:18:00
[quote]谢谢楼上,我的PC机是Intel(R) Core(TM) 2 Quad CPU Q9550 @2.83GHz,1.95G内存;编译器是Intel 10.0.025,编译模式是release。 大型机是天津最近新组装好的“天河一号”TH-1小系统,它的用户手册写的是:每个计算结点都是一个多核SMP服务器,每个计算结点配置是是两个Intel Xeon5450四核CPU, 运行频率3.0GHz,32G主存 。编译时用的是Linux下的-O2级别优化,这个应该是和PC机里面visual studio环境里面release的默认优化级别是一样的。
在studio里面有Debug和release两个模式,在Linux下ifort后面加什么编译指令可以和release等价呢?以前我用Fortran做过的并行只是在个人电脑上做的,用的都是Windows下的visual studio环境,对Linux不熟,也没有大型机的并行计算经验,如果楼上解释环境变量设置,编译指令什么的,麻烦说详细点,呵呵,万分感谢。
抓狂中……急找高手求助[/quote]
用
ifort -O3 -fast
试试
6 楼
yeg001 [专家分:14390] 发布于 2010-11-04 17:34:00
勋哥, ifort编译似乎 -fast已经包含-O3了. 楼主可以试试这两个中的一个.
ivf10 我很久没用了, 编译选项跟现在的ivf11有所区别, 详细你可以看看
ifort --help
的说明, 或者上intel主页找找文档.
还有, 编译的时候加了 -openmp没有? 控制4个线程需要在代码里控制或者改环境变量的.
BTW: Xeon5450好像也有超线程的...
7 楼
baccle [专家分:190] 发布于 2010-11-04 17:57:00
-openmp肯定是加了,要不没法并行啊,-O3激进模式的优化也试过了,没用,并行速度在大型机上就是上不去,抓狂啊
8 楼
dongyuanxun [专家分:7180] 发布于 2010-11-04 18:39:00
环境都不一样 速度不一样很正常啊 ivf在VS里还默认一群选项呢 开关都不一样 速度当然就不一样了
/fp:fast /arch:SSE3 /QaxSSE3(Windows开关)什么之类的自己加加
用性能剖析器衡量下时间,看看哪里执行慢,也有可能是openmp的启动分配线程开销占了大部分时间呢,如果是开销大的话,那么请降低线程数量
9 楼
yeg001 [专家分:14390] 发布于 2010-11-04 19:09:00
我记得ivf11是需要自己加SSE编译选项的, ivf10不熟悉.
不如你
ifort --help >> iforthelp.txt
看看里面的内容再决定用什么开关吧.
我来回复