现在的位置: 首页 > 综合 > 正文

使用Intel编译器(1)并行化(3)自动并行化相关的选项和总结

2013年07月30日 ⁄ 综合 ⁄ 共 1419字 ⁄ 字号 评论关闭

参考手册:

http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011Update/compiler_c/index.htm

说明:本系列文章为个人笔记,如有不正确之处,请参考官方相关文档,如果错误发现,我会尽量更新修改。另外,以下内容不保证对于所有版本的编译器都正确,编译器的实现也可能有一些变化之处,具体参考官方文档。

更多说明请参考http://blog.csdn.net/gengshenghong/article/details/7034748中补充说明部分。

Summary:

前面了解了Intel编译器的自动并行化相关的编程要注意的地方等,也简单的了解了自动并行化相关的基本选项,这里对这些内容做一个总结,也算是对自动并行化部分的一个结束。

(1)自动并行化选项

1. /Qparallel:允许编译器自动并行化

2. /Qpar-reportn:n为0、1、2、3,是否输出并行化报告以及输出内容。

3. 其它还有很多选项和自动并行化有关,其实,这些选项大部分都同时和OpenMP有关,用于设置一些OpenMP的环境的选项。可以在(http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011Update/compiler_c/index.htm#copts/common_content/options_ref_bk_openmp.htm)查看相关选项(特别是其中以par开头的选项,当然,这里的部分选项可能只是用于自动并行化的)。下面列举部分选析:

/Qpar-thresholdn:用于设置一个“阈值”来帮助编译器决定是否进行自动并行化。它是关于编译器对数据分析得到的并行化后性能提升的可能性的,n取值为0到100,表示一个百分比,如果性能提升的可能性为50%就进行并行化,那么设置n为50即可。默认情况下,编译器是使用/Qpar-threshold100的,即编译器只会在确定代码并行化一定能带来性能提升的情况下才会并行化。

(2)自动并行化总结

对于自动并行化的使用,总体来说,只需要重点理解以下几点就可以了:

1. 自动并行化使用OpenMP来实现,所以,和OpenMP环境设置相关的选项和环境变量和函数等都有可能也会对自动并行化有影响。

2. 自动并行化的实现采用了类似于OpenMP中的parallel for的共享工作构造,所以,能否自动并行化,也有一定的类似之处,比如循环的迭代次数应该是编译时就能确定的。

3. 使用/Qparallel选项允许自动并行化,且必须在O2/O3选项开启的情况下有效。另外,/Qpar-reportn选项可以用于输出并行化报告。

4. 使用#pragma parallel和#pragma noparallel来对某一个指定的循环是否并行化进行允许和禁止,有效的前提是使用了/Qparallel选项。(另外,parallel后面还可以增加always强制编译器进行并行化等)

5. 更多自动并行化,就需要依靠GAP(向导自动并行化)。另外,这部分是讨论的“自动并行化”,从某种程度上说,自动向量化本身也属于自动并行化的部分,向量化是数据级并行,这里的自动并行化是线程级并行的范畴。关于自动向量化,参考关于自动向量化的部分。

抱歉!评论已关闭.