《OpenACC并行编程实战》—— 3.2 导语格式

本节书摘来自华章出版社《OpenACC并行编程实战》一 书中的第3章,第3.2节,作者何沧平,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.2 导语格式

OpenACC的绝大部分功能都是以导语的形式实现,导语有一个基本格式,这个格式简单易学。本书中关于OpenACC语法的描述,都会引用官方标准《The OpenACC Application Programming Interface Version 2.5》,不易懂的地方会追加解释。
在C/C++中,使用#pragma预处理机制指定OpenACC导语,语法是:
#pragma acc 导语名字 [子语列表] 换行
每个导语都以#pragma acc开始。导语的其他部分都遵守C/C++中pragma的使用规范。空格和跳格统称为空白字符。#的前后都可以使用空白字符;导语中使用空白字符来分隔各字段。#pragma后面的预处理标记使用宏替换。导语区分大小写。一个OpenACC导语作用于紧接着的语句、结构块和循环。子语列表是一串用逗号分隔的子语。这里的“换行”意为每个导语要独占一行,不要在一行上写多个导语。

3cdfab57632740ef0a845d00302a43e4ca277364

例3.3给出了几个格式正确的导语例子,里面的导语、子语的具体含义先不必理会,后文会详述。符号代表空白字符(强调说明可以使用空白字符)。在这几行导语中,private(i)和independent这两个子语既可以使用空白字符分隔,又可以使用逗号分隔。最后两行组成一个导语,续行符“”将长导语分写在多行,便于阅读。去掉所有的续行符和换行符,其他不做任何改变,多行导语就成为仅占一行的长导语。
Fortran自由格式源文件中,用下列格式指定OpenACC导语:
!$acc 导语名字 [子语列表]
第一个注释字符(!)可以放在任意列,但它前面只能是空白字符(空格和跳格的统称)。前导符!$acc必须以一个整体出现,中间不能有空白字符。Fortran语言的每行长度、空白字符、续行符规则同样适用于导语行。导语起始行的前导符后面必须接有空白字符。待续行中导语部分的最后一个非空白字符必须是连字符(&),连字符后面仍然可以写注释;接续行中导语必须以前导符开始(前面允许有空白字符),前导符后面的第一个非空白字符可以是续行符。导语行上也可以放注释,注释以感叹号开始,直至行尾。如果前导符后面的第一个非空白字符是一个感叹号,那么该行被忽略。子语列表是一串用逗号分隔的子语。
ede9f1950dc8716a5030ff813408388dd4506521 cf93e1c30aa09dca1c0b4db90c1eb09c6bf7d072

例3.4中给出几个Fortran版本的导语示范。空白字符的使用规则与C版本相同,不同的是续行规则。第3~5行是分写成3行的一个导语,每行都需要以前导符!$acc开始,而C版则不需要以#pragma开始。
在固定格式Fortran源代码文件中,OpenACC导语可以采取下列形式中的一个:
    !$acc 导语名字 [ 子语列表 ]
    c$acc 导语名字 [ 子语列表 ]
    *$acc 导语名字 [ 子语列表 ]
前导符(!$acc、c$acc或*$acc)必须写在1~5列。固定格式的每行长度、空白字符、续行、列的规则同样适用于导语行。导语起始行第6列必须是空格或0,接续行导语在第6列不能是空格或零。导语行也可以添加注释,注释可以从第7列(包含)之后的任意列以感叹号开始,至行尾结束。
在Fortran中,导语不区分大小写。分写在多行的单个程序语句中间不能混入导语,同样,分写在多行的单个导语中间也不能混入程序语句。本文档中所有Fortran版导语例子都采用自由格式,建议读者也尽量避免新开发Fortran 77代码。
每个导语中只能有一个导语名字,一个例外是组合导语,它被视为单个导语名字。如无特别规定,多个子语出现的顺序无关紧要,子语可以重复出现多次。有些子语的参数会包含一个列表。列表是用逗号分隔的一串子语或参数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值