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

使用Intel编译器(1)并行化(4)向导自动并行化(GAP)

2013年06月10日 ⁄ 综合 ⁄ 共 1969字 ⁄ 字号 评论关闭

参考手册:

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编译器的自动并行化的一些选项,下面要介绍的是另一个功能,即向导自动并行化(guided auto palatalization, GAP)。简单的理解,向导自动化就是编译器根据代码编译后,告诉用户一些建议来对代码进行优化。

(1) GAP基础

GAP是向导自动并行化,可以理解为一个工具,对代码给出建议,从而根据建议来优化代码。

1. GAP的“建议”是不是都是自动并行化的建议?

并行化,包括很多方面,前面一部分的/Qparallel的自动并行化主要是针对线程级并行,那么这里的GAP是不是都是和/Qparallel有关的建议呢?答案是否定的。GAP的建议目前主要包括auto-parallel和auto-vec和data transformation三个方面,即自动并行化和自动向量化和数据转换

2. GAP如何使用?

只需要在编译的时候,使用选项/Qguide即可。使用/Qguide有效的前提是使用了O2/3等选项。使用了/Qguide选项后,编译器并不会真的去"编译"代码,而是分析代码后给出优化建议,也就是说,使用了/Qguide后,GAP运行过程中不会产生.obj文件或可执行文件。

3. 建议类型

GAP给出的一些建议消息主要包括以下三种:

代码修改建议:即告诉用户哪些地方的代码可以修改后,能提升性能或利于编译器进行优化。建议为指针参数增加restrict关键字消除歧义,建议在循环体开始初始化局部变量等。一般而言,这些代码建议都是为了让编译器更确定能进行优化,比如restrict消除歧义等,当然,这些建议并不是一定需要接受。比如有些指针参数可能是不能使用restrict的,根据用户需要来决定。
使用pragmas建议:即告诉用户给特定的循环增加pragmas注释,从而辅助编译器优化。
增加编译选项建议:即告诉用户增加一些优化选项,来进行优化。

总结:GAP的建议,都是为了更好的帮助编译器优化。而且,GAP给出的建议也是和使用的选项相关的,比如,最开始GAP可能只给出一条建议,让用户考虑增加/Qparallel选项,增加后,再次编译,会给出更多建议等。

(2) GAP选项

/Qguide[:n]:使用GAP,其中n表示级,取值为1到4。默认级别为4。级别越高,给出的建议考虑的内容越多。

/Qguide-par[:n]:只处理自动并行化(auto-parallelization)相关的建议。说明:必须使用/Qparallel选项。

/Qguide-vec[:n]:只处理自动向量化(auto-vectorization)相关的建议。

/Qguide-data-trans[:n]:只处理和数据转换(data transformation)相关的建议。

说明:上面的n都是可选的,取值从1到4.

默认情况下,GAP的消息输出到stderr中。如果要将消息输出到文件,可以使用如下选项(当然,这两个选项都是在使用上面的GAP的选项才有效):

/Qguide-file[:file_name]
/Qguide-file-append[:file_name]

(3)针对指定的热点进行分析

GAP还有一个功能是能针对已知的热点代码进行分析。所谓的“热点”,就是程序中耗时的部分。

选项:

/Qguide-opts:string

说明:其中string,需要根据一定的格式书写,其表示的含义可能是一个文件、一个函数等,用于告诉GAP需要分析的代码部分。当然,/Qguide-opts选项也需要结合上面的GAP选项一起使用。更多具体信息,参考官方文档。

(3) GAP的消息

在官方文档上,可以查到相关的GAP信息的说明。那么,GAP的建议消息是不是都需要接受呢?这是不一定的。需要用户根据代码判断,有些消息只是用于告诉用户修改后可以得到优化,但是修改后的正确性用户必须自己保证(特别是有些代码是由于存在歧义,GAP会提示用户消除歧义),那么,如果用户希望GAP不提示某一个诊断信息,如何实现?可以使用选项/Qdiag-disable:list,其中list列举要禁用的消息的ID即可。

抱歉!评论已关闭.