主题:还是关于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个回复)
11 楼
asymptotic [专家分:16630] 发布于 2010-11-11 12:42:00
最近发布的 Intel Fortran 12.0 对这个有改进,并且有 Getting Started Tutorial --> Using Auto Vectorization 说明最基本的矢量化问题,您可以参考一下。
12 楼
f2003 [专家分:7960] 发布于 2010-11-11 12:53:00
看来对矢量化有兴趣的朋友还是不少的。
尤其是今年intel sandyBridge上市,矢量宽度将达到256位,也就是8个单精度的simd了。
这个帖子里的朋友们说的对,碰运气是不行的,应查看编译器在矢量化过程中的report,
编译器并不是总能凑足4个数据一起操作,simd跟其他并行模式一样,会受到数据之间的依赖性的限制。
为什么能矢量化,为什么不能矢量化,编译器会给出原因,程序员可针对性进行改善。
编写出可以矢量化的代码,编写出指令级并行度高的代码,编写出可以自动并行化成功的代码,等于是像一个intel MKL库性能优化人员那样编写出“为编译器优化”的代码,坚持不懈地积累经验才行。
13 楼
yeg001 [专家分:14390] 发布于 2010-11-11 14:26:00
我还是停留在尽量筹出一些矩阵操作来让他自动实现SIMD. 要仔细去做还是要花一些时间.
asymptotic兄, 想问问, intel编译器那个Using Auto Vectorization 我怎么没找到? 我装了"Intel Parallel Studio XE 2011"但没找到这个文件. 请问文件所在文件夹是什么?
14 楼
dongyuanxun [专家分:7180] 发布于 2010-11-11 14:39:00
[quote]我还是停留在尽量筹出一些矩阵操作来让他自动实现SIMD. 要仔细去做还是要花一些时间.
asymptotic兄, 想问问, intel编译器那个Using Auto Vectorization 我怎么没找到? 我装了"Intel Parallel Studio XE 2011"但没找到这个文件. 请问文件所在文件夹是什么?[/quote]
...Guides - Creating Parallel Application - Automatic Vectorization
15 楼
dongyuanxun [专家分:7180] 发布于 2010-11-11 14:43:00
略微看了下 12.0的文档比11写的好 11写的杂而不系统
16 楼
prolee2008 [专家分:30] 发布于 2010-11-12 12:06:00
在parallel xe的samples里面 有aotu-vector的例子
写的很明确了
17 楼
saupt005 [专家分:0] 发布于 2012-03-22 21:25:00
楼主您好,我现在遇到了和您一样的问题,请问您现在已经解决了这个问题吗?应该怎么解决呢?希望您不吝赐教,非常感谢!
我来回复