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

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



