《OpenACC并行编程实战》—— 2.2 OpenACC 2.5规范

简介: 本节列出OpenACC的主要构件、导语,读完本书后可以在此处快速查阅语法,不必到正文中寻找零星的介绍。初次阅读请跳过。

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

2.2 OpenACC 2.5规范

本节列出OpenACC的主要构件、导语,读完本书后可以在此处快速查阅语法,不必到正文中寻找零星的介绍。初次阅读请跳过。

1.导语一般格式

C/C++:
#pragma acc 导语名字 [子语列表] 换行
Fortran
!$acc 导语名字 [子语列表]

2. parallel构件

C/C++:
#pragma acc parallel [子语列表] 换行
  结构块
Fortran:
!$acc parallel [子语列表]
  结构块
!$acc end parallel 
parallel构件的子语:
async[( 整数表达式 )]
wait[(整数表达式列表 )]
num_gangs(整数表达式)
num_workers(整数表达式 )
vector_length(整数表达式 )
device_type(设备类型列表)
if(条件)
reduction(操作符:变量列表)
copy(变量列表)
copyin(变量列表)
copyout(变量列表)
create(变量列表)
present(变量列表)
deviceptr(变量列表)
private(变量列表)
firstprivate(变量列表)
default(none|present)

3. kernels构件

C/C++:
#pragma acc kernels [子语列表] 换行
  结构块
Fortran:
!$acc kernels [子语列表]
  结构块 
!$acc end kernels
kernels构件的子语:
async[(整数表达式)]
wait[(整数表达式列表)]
num_gangs(整数表达式)
num_workers(整数表达式)
vector_length(整数表达式)
device_type(设备类型列表)
if(条件)
copy(变量列表)
copyin(变量列表)
copyout(变量列表)
create(变量列表)
present(变量列表)
deviceptr(变量列表)
default(none|present)

4. data构件

C/C++:
#pragma acc data [子语列表] 换行
  结构块
Fortran:
!$acc data [子语列表]  
  结构块 
!$acc end data
data构件的子语:
if(条件)
copy(变量列表)
copyin(变量列表) 
copyout(变量列表) 
create(变量列表)  
present(变量列表) 
deviceptr(变量列表)

5. enter data导语

C/C++:
#pragma acc enter data 子语列表  换行
Fortran:
!$acc enter data 子语列表
enter data的子语:
if(条件)
async[(整数表达式)]
wait[(整数表达式列表)]
copyin(变量列表) 
create(变量列表)

6. exit data导语

C/C++:
#pragma acc exit data 子语列表  换行
Fortran:
!$acc exit data 子语列表
exit data的子语:
if(条件)
async[(整数表达式)]
wait[(整数表达式列表)]
copyout(变量列表)
delete(变量列表)
finalize

7. host_data导语

C/C++:
#pragma acc host_data 子语列表  换行
  结构化块
Fortran:
!$acc host_data 子语列表
  结构化块
!$acc end host_data
host_data的子语:
use_device(变量列表)

8. loop导语

C/C++:
#pragma acc loop [子语表表] 换行
  for循环
Fortran:
!$acc loop [子语列表] 
  do循环
loop的子语:
collapse(n) 
gang[(gang参数列表)] 
worker[([num:]整数表达式)] 
vector[([length:]整数表达式)] 
seq 
auto
tile(尺寸表达式列表)
device_type(设备类型列表)
independent
private(列表) 
reduction(操作符:列表)

9.组合导语

C/ C++:
#pragma acc parallel loop [子语列表] 换行
  for 循环
#pragma acc kernels loop [子语列表] 换行
  for 循环
Fortran:
!$acc parallel loop [子语列表]
  do 循环
[!$acc end parallel loop] 
!$acc kernels loop [子语列表]
  do 循环
[!$acc end kernels loop]

10. declare导语

C/C++:
#pragma acc declare 子语列表 换行
Fortran:
!$acc declare 子语列表
declare的子语:
copy(变量列表)
copyin(变量列表)
copyout(变量列表) 
create(变量列表)
present(变量列表)
deviceptr(变量列表)
device_resident(变量列表)
link(变量列表)

11. init导语

C/C++:
#pragma acc init [子语列表] 换行
Fortran:
!$acc init [子语列表]
init的子语:
device_type( 设备类型列表 )
device_num( 整数表达式 )

12. shutdown导语

C/C++:
#pragma acc shutdown [子语列表] 换行
Fortran:
!$acc shutdown [子语列表]
shutdown的子语:
device_type( 设备类型列表 )
device_num( 整数表达式 )

13. set导语

C/C++:
#pragma acc set [子语列表] 换行
Fortran:
!$acc set [子语列表]
set的子语:
default_async( 整数表达式 )
device_num( 整数表达式 )
device_type( 设备类型列表 )

14. update导语

C/C++:
#pragma acc update 子语列表  换行
Fortran:
!$acc update 子语列表
update的子语:
async[(整数表达式)]
wait[(整数表达式列表)]
device_type(设备类型列表)
if(条件)
if_present
self(变量列表)
host(变量列表)
device(变量列表)

15. routine导语

C/C++:
#pragma acc routine 子语列表 换行
#pragma acc routine(名字) 子语列表 换行
Fortran:
!$acc routine 子语列表
!$acc routine(名字) 子语列表
set的子语:
gang
worker
vector
seq
bind(名字)
bind(字符串)
device_type(设备类型列表)
nohost

16. wait导语

C/C++:
#pragma acc wait [(整数表达式列表)] 子语列表 换行
Fortran:
!$acc wait [(整数表达式列表)] 子语列表 
wait的子语:
async [( 整数表达式)]
相关文章
|
并行计算 C语言 C++
《OpenACC并行编程实战》—— 第2章 OpenACC概览 2.1 OpenACC规范的内容
2007年出现的CUDA C/C++语言引爆了GPU通用计算热潮,但编程比较麻烦,挖掘硬件性能需要很多高超的优化技巧。为了降低编程门槛,2011年11月,Cray、PGI、CAPS和英伟达4家公司联合推出OpenACC 1.0编程标准,2012年3月PGI率先推出支持OpenACC的编译器PGI Accelerator with OpenACC。
3209 0
|
并行计算 异构计算
《OpenACC并行程序设计:性能优化实践指南》一 3.10 使用Score-P和Vampir记录OpenACC运行时事件
本节书摘来自华章出版社《OpenACC并行程序设计:性能优化实践指南》一 书中的第3章,第3.10节,作者:[美] 罗布·法伯(Rob Farber),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1531 0
《OpenACC并行程序设计:性能优化实践指南》一 第1章 从串行编程到并行编程
本节书摘来自华章出版社《OpenACC并行程序设计:性能优化实践指南》一 书中的第1章,作者:[美] 罗布·法伯(Rob Farber),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1223 0
|
并行计算 测试技术 API
《OpenACC并行程序设计:性能优化实践指南》一 3.4 通过代码插装准备性能测量
本节书摘来自华章出版社《OpenACC并行程序设计:性能优化实践指南》一 书中的第3章,第3.4节,作者:[美] 罗布·法伯(Rob Farber),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1296 0
|
测试技术
《OpenACC并行程序设计:性能优化实践指南》一 2.1 测试代码:共轭梯度法
本节书摘来自华章出版社《OpenACC并行程序设计:性能优化实践指南》一 书中的第2章,第2.1节,作者:[美] 罗布·法伯(Rob Farber),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1704 0
|
并行计算 Unix 程序员
《OpenACC并行编程实战》—— 1.2 并行编程语言
在并行计算发展史上出现过多种并行编程语言,至今仍在使用的只剩几种, 它们各有特色。
2189 0
|
并行计算 C++ 异构计算
《OpenACC并行编程实战》—— 导读
2010年以来,中国超级计算机建设突飞猛进,欣欣向荣。一个原因是国力强盛,大力投资高新科技;另一个原因是整体科技水平提高,需求旺盛。天气预报、石油物探、工程仿真、基因测序等传统应用对计算资源的需求持续增长,以深度学习为代表的人工智能大爆发,资金雄厚的互联网公司对计算能力极度渴求。
2738 0
|
Linux C语言
《OpenACC并行编程实战》—— 第3章 OpenACC计算构件 3.1 条件编译
程序的加速效果来自于对计算部分的并行化。本章重点介绍计算并行化所用的3个构件:kernels、loop和parallel,以及几个重要的子语。编译器将串行循环映射成并行线程的方式多种多样,需要仔细观察几种常用循环的并行化方式,掌握映射规律。
2190 0
《OpenACC并行编程实战》—— 3.2 导语格式
OpenACC的绝大部分功能都是以导语的形式实现,导语有一个基本格式,这个格式简单易学。本书中关于OpenACC语法的描述,都会引用官方标准《The OpenACC Application Programming Interface Version 2.5》,不易懂的地方会追加解释。
2244 0