主题:还是关于Intel Fortran编译器的矢量化
baccle
[专家分:190] 发布于 2010-11-09 15:49:00
在Lunix环境下使用Intel Fortran编译器,根据我对矢量化的了解,!DEC$ IVDEP和!DEC$ NOVECTOR两个语句是矢量化开关的语句。我在程序中加入了语句!DEC$ IVDEP想让我的某个do循环矢量化,但编译的时候就是矢量化不了。开始的时候以为是编译器不认这句话,后来试了一下在某个被自动矢量化的地方加入语句!DEC$ NOVECTOR,结果发现语句!DEC$ NOVECTOR是好使的。
想请问,要矢量化得满足什么条件?上网查了下,说的都不详细,有懂的麻烦说详细点?谢谢啦,还有,如果编译器没有自动矢量化的地方是不是自己不要随便矢量化?
回复列表 (共17个回复)
沙发
dongyuanxun [专家分:7180] 发布于 2010-11-09 17:38:00
我以前的文章
http://www.cnblogs.com/xunxun1982/archive/2010/05/12/1734000.html
你可以参考下
板凳
baccle [专家分:190] 发布于 2010-11-09 17:52:00
dongyuanxun大侠,我早已经看过这篇帖子了,是百度出来的,我就是加入那个要程序向量化的语句!DEC$ IVDEP,但编译的时候一点反应也没有,还是没有被向量化,真是愁死我了。我想向量化的那段在程序运行的时候占的比重特别大,我能想到的对它优化的方法都优化完了。因为这段程序是对数组操作的,数组很大,计算就是简单的相加,我觉得应该是很适合向量化的。您能给我个详细点的文档吗?我好好研究研究。
着急啊,必须得让程序快起来。
3 楼
dongyuanxun [专家分:7180] 发布于 2010-11-09 18:28:00
自动向量化如果符合规则是不需要写!DEC$ IVDEP的
只有那些很模糊的数据依赖才可以写!DEC$ IVDEP
使用/Qvec-report3 来显示那段代码是否向量化和是否存在数据依赖
如果是确实的数据依赖是不可能被向量化的
4 楼
baccle [专家分:190] 发布于 2010-11-09 19:29:00
使用/Qvec-report3 来显示那段代码是否向量化和是否存在数据依赖,具体怎么操作呢?能麻烦您说得详细点吗?
还有,我确定我加!DEC$ IVDEP后的循环里面没有依赖关系啊,那为什么就向量化不了呢?
您有详细点的向量化的资料吗?能给我看看嘛?哈
5 楼
dongyuanxun [专家分:7180] 发布于 2010-11-09 19:37:00
windows下直接加
ifort /O3 /Qvec-report3 main.f90
向量化报告会显示在屏幕上
可以定向到文件 ifort /O3 /Qvec-report3 main.f90 > out.txt 2>&1
另外,向量器只能向量化最内层的循环,其他无法向量化,而且对于编译期间无法确定循环次数的循环也无法向量化
6 楼
baccle [专家分:190] 发布于 2010-11-09 19:54:00
windows下直接加
ifort /O3 /Qvec-report3 main.f90
向量化报告会显示在屏幕上
可以定向到文件 ifort /O3 /Qvec-report3 main.f90 > out.txt 2>&1
大侠,加在哪……怎么加……,这段话我听不懂啊,不好意思,调程序我还行,设环境变量什么的我比较白,不好意思啦
7 楼
dongyuanxun [专家分:7180] 发布于 2010-11-09 20:02:00
CMD命令行啊
VS IDE是显示不出来的
那个帖子我不是告诉过你么,VS IDE里会先编译(/c)再链接的,而/c使用时,/Qvec-report3无效
不只vec报告,所有的监测报告都无效
8 楼
baccle [专家分:190] 发布于 2010-11-09 21:28:00
您知道哪里能下载Intel编译器手册的吗?我自己研究研究吧,谢谢了
9 楼
dongyuanxun [专家分:7180] 发布于 2010-11-09 21:39:00
ivf安装后就有编译器参考文档啊
在安装目录里搜索main_for.chm
10 楼
baccle [专家分:190] 发布于 2010-11-10 18:15:00
谢谢,找到了,哈
我来回复