很多人可能还没有接触过基于指导语句的编程方式,所以对指导语句比较陌生,所以我在这里试着跟大家解释指导语句。
0、基本概念
什么是编译:编译是指将源代码处理成可以被计算机识别执行的代码的过程。
编译器:编译器是指执行编译过程的软件。
链接:将多个二进制代码合并成一个独立的可执行文件的过程。
链接器:执行链接过程的软件。
作用域:某个主体所能控制的有效代码范围。
1、指导语句的形式
我用这个标题,可能不会完全概括我下面要说的这些内容。大家可以从内容中理解一下指导语句是什么。
首先指导语句依赖于源程序,所谓源程序就是指比如C或者Fortran一样的代码,在源程序中加入一些类似于注释的语句,这些语句可以被称为指导语句。特别的在C语言里,我们可以使用#pragma 来标记指导语句。今天已经有不少指导语句的标准,在这些标准里定义了指导语句的格式,以及功能描述,比如比较常见的OpenMP,还有比较新的OpenACC,OpenHMPP。这些标准各自提供一套指导语句集。
2、指导语句的目的
指导语句可以让程序员在短时间内写出高效的程序,这里的“高效”是指能够尽可能的利用计算设备的计算资源,获得更高的效能比(获得的性能 / 实际性能峰值,开发时间 / 获得的性能)。比如OpenMP提供的指导语句,你可以在一些适于并行的地方加入一些指导语句,这些指导语句将会被编译器获得,分析,处理,然后产生并行的代码,已获得多CPU核心的计算资源。 又例如OpenACC指导语句,用户在源代码中适合数据并行的部分加上OpenACC的指导语句,支持OpenACC的编译器可以分析处理这段代码后产生在协处理器上执行的多线程函数,并且正确的产生控制数据在CPU和协处理器之间的数据传输。
3、指导语句的工作方式
对于OpenACC指导语句,用户在自己的源代码中找到比较花时间的计算部分,然后自己分析下这段代码是否适合并行,如果可以,用户需要加入一些指导语句,然后使用支持OpenACC指导语句的编译器将加入了OpenACC指导语句的程序编译,之后生成的程序中指导语句作用域之内的代码将会被决定是否放到协处理器上执行。
以上内容纯属个人理解,如有不同见解,期待您的回复。