PGI 14.1 が 2014年1月にリリースされて以降、OpenACC 2.0 の機能が順次追加され、PGI 15.1(2015年)にて包括的にサポートした。PGI 16.1(2016年) から OpenACC 2.5、PGI 18.1 (2018年) から OpenACC 2.6の実装の追加を行なった。(PGIのサブスクリプションが有効な場合は、最新のリビジョンを使う権利を有します。)以下に、追加された機能をコメントする。
(一例) pgcc -fast -Minfo -acc -ta=tesla,cc70,cuda9.0 CUDAROOT=/opt/local/cuda-9.0 openacc_test.c
以下は、 現在のACC routine ディレクティブの制約事項である。
以下は、既知の制約事項です。
以下は、既知のC++プログラム上の制約事項です。
C++ 言語機能サポートを有効にするために必要な GCC のバージョン(C++14のGCC 5以降、C++17の GCC 7以降)と-ta=teslaへのオプションである nonvvm サブオプションの使用との間に競合が発生する場合があります 。nonvvm サブオプションは、システムにインストールされている GCC のバージョンとの互換性をチェックする CUDA Toolkit のコンポーネントを使用し、指定された最大バージョンより新しいバージョンでは動作しません。
GCC Version Compatibility with -ta=tesla:nonvvm、各ツールキットに対するサポートするGCCの最大バージョン
以下は、OpenACC 2.0/2.5 の将来的なサポート機能です。OpenACC 仕様的には 2.0 のDeclare link機能とNested parallelism機能を除外して、OpenACC 2.5 機能を提供しております。(PGI 17.10現在)
機能 | Revision |
---|---|
serial and serial loop constructs | 18.1 |
Fortran optional arguments support in data clauses | 18.1 |
attach/detach clauses | 18.1 |
implicit attach/detach behavior for other data clauses | 18.1 |
no_create clause in compute and data constructs | 18.1 |
if_present clause in host_data construct | 18.1 |
if clause in host_data construct | 18.3 |
New Device API Runtime Routines acc_get_property, acc_attach[_async], acc_detach[_finalize][_async] | 18.1 |
機能 | Revision |
---|---|
Change in the behavior of the copy, copyin, copyout and create data clauses. | 15.1 |
Change in the behavior of the acc_copyin, acc_create, acc_copyout and acc_delete API routines. | 15.1 |
New default(present) clause for compute constructs. | 15.7 |
Asynchronous versions of the data API routines. | 15.9 |
New acc_memcpy_device API routine. | 15.7 |
New OpenACC interface for profile and trace tools. | 16.1 |
Change in the behavior of the declare create directive with a Fortran allocatable. | 15.1 |
Reference counting added to device data. | 16.1 |
Change in exit data directive behavior. New optional finalize clause. | 16.7 |
New update directive clause, if_present. | 17.1 |
New init, shutdown, set directives. | 17.1 |
Change in the routine bind clause definition. | 17.1 |
New API routines to get and set the default async queue value. | 17.1 |
Num_gangs, num_workers and vector_length clauses allowed on the kernels construct. | 16.7 |
機能 | Revision | 機能 | Revision |
---|---|---|---|
Kernels clauses | !$acc routine | 14.1 | |
wait() | 14.7 | gang | 14.1 |
default() | 15.1 | worker | 14.1 |
device_type() | 15.1 | vector | 14.1 |
seq | 14.1 | ||
Parallel clauses | bind name() | 14.7 | |
wait() | 14.7 | bind string() | 14.7 |
default() | 15.1 | device_type() | 15.1 |
device_type() | 15.1 | nohost | 14.7 |
Loops clauses | #pragma atomic | 14.4 | |
tile() | 15.1 | !$acc atomic | 14.4 |
auto() | 15.1 | ||
device_type() | 15.1 | Runtime routines | |
acc_wait() | 14.1 | ||
Update clauses | acc_wait_all() | 14.1 | |
wait() | 14.7 | acc_async_wait_all | 14.1 |
async() | 14.7 | acc_wait_async() | 14.4 |
acc_copyin() | 14.1 | ||
Declare clauses | acc_present_or_copyin() | 14.1 | |
link() | -- | acc_create() | 14.1 |
acc_present_or _create() | 14.1 | ||
!$acc enter_data | 14.1 | acc_copyout() | 14.1 |
if() | 14.1 | acc_delete() | 14.1 |
async() | 14.7 | acc_map_data() | 14.1 |
wait() | 14.7 | acc_unmap_data() | 14.1 |
copyin() | 14.1 | acc_deviceptr() | 14.1 |
create() | 14.1 | acc_hostptr() | 14.1 |
pcopy() | 14.1 | acc_is_present() | 14.1 |
pcreate() | 14.1 | acc_memcpy_to_device() | 14.1 |
acc_memcpy_from_device() | 14.1 | ||
!$acc exit_data | 14.1 | acc_update_device() | 14.1 |
if() | 14.1 | acc_update_self() | 14.1 |
async() | 14.7 | ||
wait() | 14.7 | ||
copyout() | 14.1 | ||
delete() | 14.1 |
以下は、2.0 の新機能をサマリー的に纏めたものである。
ROUTINEディレクティブに関しての説明が、以下の URL にアップされました。Using the OpenACC Routine Directive by Michael Wolfe, August 2014