OpenACC:GPU 编程的便捷之道
1. OpenACC 简介
OpenACC 是一种让程序在 GPU 上运行的简便方式。在归约子句中,除了常见的操作符,还可以使用 * 、 max 、 min 、 & 、 | 、 && 和 || 等操作符。在 OpenACC 2.6 及以前的版本中,归约子句里用逗号分隔的变量或变量列表仅限于标量,不能是数组。但从 OpenACC 2.7 版本开始,可以在归约子句中使用数组和复合变量。
对于一些无法并行执行的循环,可以使用 #pragma acc serial 指令,让编译器以串行方式执行这部分代码。使用该指令的代码块将由一个工作组(gang)、一个工作线程(worker)且向量长度为 1 来执行。
2. 减少 CPU 与 GPU 之间的数据移动
在 GPU 编程中,数据移动往往比浮点运算更重要。尽管将计算任务移到 GPU 上可以加快计算速度,但数据移动的开销可能会导致整体运行时间变慢。为了解决这个问题,可以使用数据构造(data construct)来减少不必要的数据移动。
在 OpenACC 标准 v2.6 中,数据构造的规范如下:
#pragma acc data [ copy | copyin | copyout | create | no_create | pr
超级会员免费看
订阅专栏 解锁全文
24

被折叠的 条评论
为什么被折叠?



