没有合适的资源?快使用搜索试试~ 我知道了~
首页OpenACC 2.0中文版:易用加速器编程接口
OpenACC 2.0中文版:易用加速器编程接口
5星 · 超过95%的资源 需积分: 46 74 下载量 88 浏览量
更新于2024-07-21
收藏 1.86MB PDF 举报
OpenACC2.0中文版是一份针对高性能计算(HPC)领域的重要文档,它发布于2013年6月,由译者在GPU和Xeon Phi等并行计算加速器日益普及的背景下编译而成。当时,这些加速器已经在超级计算机领域占据了显著位置,许多大学也开始引入相关课程,以满足大量研究人员的需求。 OpenACC是一个应用编程接口,其目标是简化加速器编程,降低对程序员的技术门槛。它旨在让开发者无需深入理解CUDA或OpenCL等底层硬件语言,只需在现有串行代码中插入少量的"导语"(directives),即可让编译器自动生成适应加速器的底层代码。这种设计降低了编程复杂性,减少了因硬件升级导致的代码维护负担,使得软件可以随着硬件的发展无缝迁移。 本文档强调了OpenACC与之前版本的区别,尤其是对于关键术语的翻译,如将clause翻译为"子句",以及将construct转换为"构件",这与早期版本有所不同。译者wcj0626表示自己是非计算机专业人士,翻译可能存在错误和不足,鼓励读者提出批评和建议,同时也感谢张健康、简婕、小小河和风辰等人的帮助和支持,包括校对、翻译和审阅工作。 法律条款方面,文档使用者被假定已经充分理解并接受文档中列出的条件。文档的原始英文版可以在OpenACC官方网站获取,而最新版本则可在指定论坛下载。同时,译者还创建了一个技术交流QQ群,邀请对OpenACC技术感兴趣的人员加入,共同学习和进步。 在整个翻译过程中,译者的未婚妻提供了持续的支持和理解,这体现了OpenACC2.0中文版背后的团队协作精神和对技术推广的重视。这份文档对于那些希望利用并行计算加速器提升性能的开发者来说,是一个实用且重要的参考资源。
资源详情
资源推荐
明确支持多主机线程
在 vecotr 和 worker 循环最后可选择移除同步或栅栏。
在 device_type 子句之后允许 if 子句
循环导语的 default(none)子句
循环导语的 shared 子句(或者类型的其他东西)
分析、追踪或其他运行时数据收集工具的标准接口
单主机线程对多设备更好的支持,不管是相同或不同类型
第2章 导语
本章讲述 OpenACC 导语的语法和行为。在 C 和 C++中,用语言本身提供的
#pragam机制来引入 OpenACC 导语。在 Fortran 中,用带有独特前导符的注释来
引入 OpenACC 导语。如果不支持或者关闭了 OpenACC 功能,编译器将会忽略
OpenACC 导语。
限制
Fortran 中,OpenACC 导语不能出现在 PURE 和 ELEMENTAL 中
2.1 导语格式
在 C/C++中使用#pragma 机制来指定 OpenACC 导语,语法是:
#pragma acc
导语名字
[
子句
[[,]
子句
]…]
换行
每个导语都以#pragma acc 开始。导语的其他部分都遵守 C/C++中 pragma 的
使用规范。#的前后都可以使用空白字符;导语中使用空白字符来分隔各字段。
#pragma 后面的预处理标记使用宏替换。导语区分大小写。一个 OpenACC 导语
作用于紧接着的语句、结构块和循环。
Fortran 自由格式源文件中,用下列格式指定 OpenACC 导语:
!$acc
导语名字
[
子语
[[,]
子语
]... ]
第一个注释字符(!)可以放在任意列,但它前面只能是空白字符(空格和跳格)。
前导符!$acc 必须以一个整体出现,中间不能有空白字符。每行长度、空白字符、
续行符规则同样适用于导语行。导语起始行的前导符必须有一个空白字符。待续
行
1
中导语部分的最后一个非空白字符必须是连字符(&),连字符后面仍然可以
写注释;接续行中导语必须以前导符开始(前面允许有空白字符),前导符后面的
第一个非空白字符可以是续行符。导语行上也可以放注释,注释以感叹号开始,
直至行尾。如果前导符后面的第一个非空白字符是一个感叹号,那么该行被忽略。
在固定格式 Fortran 源代码文件中,OpenACC 导语可以采取下列形式中的一
个:
!$acc
导语名字
[
子语
[[,]
子语
]...]
c$acc
导语名字
[
子语
[[,]
子语
]...]
*$acc
导语名字
[
子语
[[,]
子语
]...]
前导符(!$acc,c$acc,或*$acc)必须写在 1-5 列。固定格式的每行长度、空白字
符、续行、列的规则同样适用于导语行。导语起始行第 6 列必须是空格或 0,接
续行导语在第 6 列不能是空格或零. 导语行也可以添加注释,注释可以从第 7 列
(包含)之后的任意列以感叹号开始,至行尾结束。
在 Fortran 中,导语不区分大小写。分写在多行的单个程序语句中间也不能
混入导语,同样地,分写在多行的单个导语中间不能混入的程序语句。本文档中
所有 Fortran OpenACC 导语例子都采用自由格式。
除了组合指令被认为是一个单一的导语名字,每个导语中只能有一个导语名
字。除非特别限定,不然多个子句出现的顺序无关紧要,以及同一子语可以重复
多出现多次。有些子语可含有列表参数。
2.2 条件编译
预定义的宏_OPENACC 的值为 yyyymm, 其中 yyyy是编译器所支持 OpenACC
版本的发布年份,mm 是月份。当且仅当 OpenACC 导语功能打开时,编译器必
须定义这个宏。这里讲述的版本是 201306。
2.3 内部控制变量
OpenACC 的实现内部控制变量(Internal control variables,ICVs)来控制程序的
行为。编译器通过环境变量或通过调用 OpenACC 例程将这些内部变量初始化。
通过调用 OpenACC 例程,程序可以获得这些变量的值。
内部控制变量是:
acc-device-type-var 控制使用哪种类型的加速器
acc-device-num-var 控制使用所选类型中的哪个加速器
2.3.1 修改和去除内部控制变量值
下表列出了修改内部控制变量的环境变量和例程,取出内部控制变量值的例
程:
内部控制变量
修改值的方法
取出值的方法
acc-device-type-var
ACC_DEVICE_TYPE
acc_set_device_type
acc_get_device_type
acc-device-num-var
ACC_DEVICE_NUM
acc_set_device_num
acc_get_device_num
这些变量的初值由编译器定义。赋初值之后,执行任何 OpenACC 构件、例
程之前,用户设定的所有环境变量值都已经被读出,并相应地修改了内部控制变
量的值。OpenACC 构件中的子句不修改内部控制变量的值。对每个主机线程都
有一份每个内部控制变量的拷贝。在设备端线程的内部控制变量值可能不会被修
改。
2.4 设备指定子句
OpenACC 导语使用 device_type 子句对不同加速器指定不同子句或者子句参
数。device_type 子句的参数是逗号分开的一个或者多个加速器架构名称标识符
或者星号的列表。一个导语有一个或者多个 device_type 子句。子句在没有
device_type 子 句 的 导 语 中 可以适用到 所 有 的 加 速 器设 别 类 型 上 。 对于
device_type 子句其后到导语结束或者到下一个 device_type 子句的子句,它们将
于 该 device_type 关联。只有 当编 译器 编 译到 命名 加 速设备类型 时, 关联
device_type 子句的子句才起作用。关联星号参数 device_type 子句的子句可以作
用于在导语中任何 device_type 子句没有命名的任何加速器设备上。device_type
子句以任意顺序出现。只有确定的子句才可以放在 device_type 子句之后。
支持的加速器设备类型由编译器自定义。取决于编译器和编译环境,编译器
可能仅支持单一加速器设备类型;或者支持多种加速器设备类型,但是每次只支
持一个;或者在单次编译中支持多种加速器设备类型。
加速器架构名称是通用的,例如供应商(vendor);或更多指定,例如一个特定
的设备群。详细见附录 A.1 目标设备推荐名称。当为特定设备编译时,编译器将
会使用关联了 device_type 子句的子句,而 device_type 子句指定了应用于这个设
剩余62页未读,继续阅读
wcj0626
- 粉丝: 56
- 资源: 24
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 前端面试必问:真实项目经验大揭秘
- 永磁同步电机二阶自抗扰神经网络控制技术与实践
- 基于HAL库的LoRa通讯与SHT30温湿度测量项目
- avaWeb-mast推荐系统开发实战指南
- 慧鱼SolidWorks零件模型库:设计与创新的强大工具
- MATLAB实现稀疏傅里叶变换(SFFT)代码及测试
- ChatGPT联网模式亮相,体验智能压缩技术.zip
- 掌握进程保护的HOOK API技术
- 基于.Net的日用品网站开发:设计、实现与分析
- MyBatis-Spring 1.3.2版本下载指南
- 开源全能媒体播放器:小戴媒体播放器2 5.1-3
- 华为eNSP参考文档:DHCP与VRP操作指南
- SpringMyBatis实现疫苗接种预约系统
- VHDL实现倒车雷达系统源码免费提供
- 掌握软件测评师考试要点:历年真题解析
- 轻松下载微信视频号内容的新工具介绍
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功