主题:还是关于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				
				楼主您好,我现在遇到了和您一样的问题,请问您现在已经解决了这个问题吗?应该怎么解决呢?希望您不吝赐教,非常感谢!
							 
									
			
我来回复