使用Intel编译器(1)并行化(3)自动并行化相关的选项和总结
2011-11-29 21:55
375 查看
参考手册:
http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011Update/compiler_c/index.htm
说明:本系列文章为个人笔记,如有不正确之处,请参考官方相关文档,如果错误发现,我会尽量更新修改。另外,以下内容不保证对于所有版本的编译器都正确,编译器的实现也可能有一些变化之处,具体参考官方文档。
更多说明请参考/article/8516772.html中补充说明部分。
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(向导自动并行化)。另外,这部分是讨论的“自动并行化”,从某种程度上说,自动向量化本身也属于自动并行化的部分,向量化是数据级并行,这里的自动并行化是线程级并行的范畴。关于自动向量化,参考关于自动向量化的部分。
http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011Update/compiler_c/index.htm
说明:本系列文章为个人笔记,如有不正确之处,请参考官方相关文档,如果错误发现,我会尽量更新修改。另外,以下内容不保证对于所有版本的编译器都正确,编译器的实现也可能有一些变化之处,具体参考官方文档。
更多说明请参考/article/8516772.html中补充说明部分。
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(向导自动并行化)。另外,这部分是讨论的“自动并行化”,从某种程度上说,自动向量化本身也属于自动并行化的部分,向量化是数据级并行,这里的自动并行化是线程级并行的范畴。关于自动向量化,参考关于自动向量化的部分。
相关文章推荐
- 使用Intel编译器(1)并行化(2)自动并行化代码相关
- 使用Intel编译器(1)并行化(4)向导自动并行化(GAP)
- 使用Intel编译器(1)并行化(1)自动并行化基础
- 使用Intel编译器(0)基础(3)循环相关的优化技术Loop optimization
- Atitit 并发技术的选项 attilax总结 艾龙 著 1. 三大并发模型 1 2. 从可读性考虑 优先使用 并行工作者 多线程模式,不要使用异步流水线模式 2 2.1. 多线程模式方便全局
- 使用Intel编译器(3)HLO(1)高级别优化的选项和使用
- 使用Intel编译器(2)向量化(1)自动向量化基础
- Storm使用到的相关技术总结
- AndroidStudio中百度地图接口使用配置相关总结
- 使用Mybatis Generator自动生成Mybatis相关代码
- Storm使用到的相关技术总结
- PHP 错误与异常 笔记与总结(3)PHP 配置文件(php.ini)中与错误相关的选项 与 设置错误级别
- Linux中yum手动安装、手动建立仓库文件夹关联实现关联包自动安装、yum相关命令使用
- Effective C++学记之06 若不想使用编译器自动生成的函数,就应该明确拒绝。
- 使用Mybatis Generator自动生成Mybatis相关代码
- 使用Intel 向量化编译器优化性能(1)
- 使用JavaScript实现页面选项自动添加行以及删除行 javaweb
- size classes的使用总结&自动计算行高
- 使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件(转)
- Storm使用到的相关技术总结