Sun Studio 12: OpenMP API ユーザーズガイド

付録 B OpenMP への変換

この章では、Sun または Cray の指令およびプラグマを使用する従来のプログラムを OpenMP に変換するための指針を説明します。


注 –

従来の Sun および Cray の並列化指令は廃止予定で、Sun Studio コンパイラでサポートされなくなりました。


B.1 従来の Fortran 指令の変換

従来の Fortran プログラムでは、Sun または Cray 形式の並列化指令が使用されています。これらの指令の詳細については、『Fortran プログラミングガイド』の「並列化」に関する章を参照してください。

B.1.1 Sun 形式の Fortran の指令の変換

次の表は、Sun の並列化指令およびその従属句と、それに相当する OpenMP の指令の概要です。これらは、変換の一例です。

表 B–1 Sun の並列化指令を OpenMP の指令に変換する

Sun の指令 

OpenMP の指令 

C$PAR DOALL [qualifiers]

!$omp parallel do [qualifiers]

C$PAR DOSERIAL

完全に相当する句はありません。次で代用することができます。 

!$omp master

loop

!$omp end master

C$PAR DOSERIAL*

完全に相当する句はありません。次で代用することができます。 

!$omp master

loopnest

!$omp end master

C$PAR TASKCOMMON block[,...]

!$omp threadprivate (/block/[,...])

DOALL 指令では、次の修飾句を指定することができます。

表 B–2 DOALL 修飾句とそれに相当する OpenMP の句

Sun の DOALL 句 

OpenMP の PARALLEL DO に相当する句 

PRIVATE(v1,v2,...)

private(v1,v2,...)

SHARED(v1,v2,...)

shared(v1,v2,...)

MAXCPUS(n)

num_threads(n)。 完全に相当する句はありません。

READONLY(v1,v2,...)

完全に相当する句はありません。firstprivate(v1,v2,...) を使用して同じ効果を得ることができます。

STOREBACK(v1,v2,...)

lastprivate(v1,v2,...).

SAVELAST

完全に相当する句はありません。lastprivate(v1,v2,...) を使用して同じ効果を得ることができます。

REDUCTION(v1,v2,...)

reduction(operator:v1,v2,...) 縮約演算子および変数リストを指定する必要があります。

SCHEDTYPE(spec)

schedule(spec) (表 B–3 を参照)

SCHEDTYPE(spec) 句では、次のスケジュール指定を使用することができます。

表 B–3 SCHEDTYPE のスケジュール指定とそれに相当する OpenMP の schedule

SCHEDTYPE(spec) 

OpenMP の schedule(spec) 句

SCHEDTYPE(STATIC)

schedule(static)

SCHEDTYPE(SELF(chunksize))

schedule(dynamic,chunksize)

デフォルトの chunksize の値は 1 です。

SCHEDTYPE(FACTORING(m))

完全に相当する句はありません。 

SCHEDTYPE(GSS(m))

schedule(guided, m)

デフォルトの m の値は 1 です。

B.1.1.1 Sun 形式の Fortran の指令と OpenMP の変換の問題

B.1.2 Cray 形式の Fortran の指令の変換

Cray 形式の Fortran 並列化指令は、指令を示す標識が !MIC$ である点を除き、Sun 形式のものと同一です。また、!MIC$ DOALL の修飾句も異なります。

表 B–4 Cray 形式の DOALL 修飾句とそれに相当する Open MP の句

Cray の DOALL 句 

OpenMP の PARALLEL DO に相当する句 

SHARED(v1,v2,...)

SHARED(v1,v2,...)

PRIVATE(v1,v2,...)

PRIVATE(v1,v2,...)

AUTOSCOPE

相当する句はありません。スコープは必ず、明示的に指定するか、DEFAULT 句か __AUTO 句と共に指定します。

SAVELAST

完全に相当する句はありません。lastprivate を使用して同じ効果を得ることができます。

MAXCPUS(n)

num_threads(n)。 完全に相当する句はありません。

GUIDED

schedule(guided, m)

デフォルトの m の値は 1 です。

SINGLE

schedule(dynamic,1)

CHUNKSIZE(n)

schedule(dynamic,n)

NUMCHUNKS(m)

schedule(dynamic,n/m) ここで、n には反復数を指定します。

B.1.2.1 Cray 形式の Fortran の指令と OpenMP の指令の変換の問題

両者の違いは、Cray の AUTOSCOPE に相当するものがない点を除き、Sun 形式の指令の場合と同様です。

B.2 従来の C プラグマの変換

C コンパイラでは、明示的な並列化用の従来のプラグマを使用することができます。これらのプラグマについては、『C ユーザーズガイド』を参照してください。Fortran の指令の場合と同様に、これらは一例です。

従来の並列化プラグマは、次のとおりです。

表 B–5 C の並列化プラグマを OpenMP に変換する

従来の C プラグマ 

相当する OpenMP プラグマ 

#pragma MP taskloop [clauses]

#pragma omp parallel for [clauses]

#pragma MP serial_loop

完全に相当する句はありません。次で代用することができます。 

#pragma omp master

loop

#pragma MP serial_loop_nested

完全に相当する句はありません。次で代用することができます。 

#pragma omp master

loopnest

taskloop プラグマでは、次の句を指定できます。

表 B–6 taskloop の句とそれに相当する OpenMP の句

taskloop の句

OpenMP の parallel for に相当する句

maxcpus(n)

完全に相当する句はありません。num_threads(n) を使用します。

private(v1,v2,...)

private(v1,v2,...)

shared(v1,v2,...)

shared(v1,v2,...)

readonly(v1,v2,...)

完全に相当する句はありません。firstprivate(v1,v2,...) を使用して同じ効果を得ることができます。

storeback(v1,v2,...)

lastprivate(v1,v2,...) を使用して同じ効果を得ることができます。

savelast

完全に相当する句はありません。lastprivate(v1,v2,...) を使用して同じ効果を得ることができます。

reduction(v1,v2,...)

reduction(operator:v1,v2,...) 縮約演算子および変数リストを指定する必要があります。

schedtype(spec)

schedule(spec) (表 B–7 を参照)

schedtype(spec) 句では、次のスケジュール指定を使用することができます。

表 B–7 SCHEDTYPE のスケジュール指定とそれに相当する OpenMP の schedule

schedtype(spec) 

OpenMP の schedule(spec) 句

SCHEDTYPE(STATIC)

schedule(static)

SCHEDTYPE(SELF(chunksize))

schedule(dynamic,chunksize)

注: デフォルトの chunksize の値は 1 です。

SCHEDTYPE(FACTORING(m))

完全に相当する句はありません。 

SCHEDTYPE(GSS(m))

schedule(guided, m)

デフォルトの m の値は 1 です。

B.2.1 従来の C のプラグマと OpenMP の変換の問題