英特尔向量化工具箱:5. 实现GAP的建议

---------------------------------------------------------------------------------------
返回到向量化的六步流程
---------------------------------------------------------------------------------------

英特尔向量化工具箱:5. 实现GAP的建议(如使用基本函数、使用pragma simd、数组表示法array notations等等)
既然你已经知道了你的循环的GAP报告的建议,现在就是尽量实现这些建议。

报告可能建议对代码进行修改。你需要确保这些改变是"安全的"。换句话说,确保这些改变不会影响循环的语义和安全性。确保循环没有受影响的依赖的一种方式是,按照相反的顺序执行循环,分析是否会改变其结果。另外一方面是考虑你的循环中的继续在乱序时候的结果。如果结果会改变,那么你的循环有依赖,从而向量化可能不“安全”。在这种情况下,你仍然可能通过消除依赖来完成向量化。

修改你的代码,从而为编译器提供额外的信息,或者优化你的代码,获得更好的向量化。

示例 (基于步骤4的代码):


被向量化了!

一旦你认为循环可以被向量化,GAP报告可能会推荐使用下面一些技术。点击下面的技术获取更多信息。


C/C++
Intel Cilk Plus (General information)
User-Mandated Vectorization (Pragma SIMD)
Array Notations
Elemental Functions

Fortran
DO CONCURRENT
cDEC$ SIMD

-------------------------------------------------
该步骤相关的其它资源
-------------------------------------------------
查看在线研讨会: Quickly Manipulate Data in Parallel Using Intel® Cilk™ Plus Array Notation/Elemental Functions - Recodings(会议记录) or Slides(幻灯片)
查看在线研讨会: Using Intel® C++ Composer XE to Maximize Code Vectorization and Improve Application Performance - Recodings(会议记录) or Slides(幻灯片)
阅读白皮书: 查看A Guide to Auto-Vectorization with Intel C++ Compilers的第七和八部分(关于应用GAP的建议)
阅读白皮书: Floating Point Consistency and how it is affected by various optimizations
试用编译器: 英特尔® 软件评估中心
有关编译器优化的更完整信息,请参阅优化通知