自動パラレライザーを有効にするには、-parallel (Linux* および Mac OS* X) または /Qparallel (Windows*) オプションを使用します。このオプションは、安全に並列実行できる並列ループを検出して、これらのループのマルチスレッド・コードを自動的に生成します。
このオプションを使用して、並列化を有効にするには、KMP_STACKSIZE 環境変数に十分なサイズを設定する必要があります。
自動並列化を使用するコマンド例は、次のとおりです。
オペレーティング・システム |
説明 |
---|---|
Linux および Mac OS X |
ifort -c -parallel myprog.f |
Windows |
ifort -c /Qparallel myprog.f |
自動並列化では、2 つの特定の宣言子 !DEC$ PARALLEL と !DEC$ NOPARALLEL が使用されます。
自動並列化宣言子の形式と構文
自動並列化コンパイラー宣言子の形式は次のとおりです。
構文 |
---|
<prefix> <directive> |
上記の括弧の意味は次のとおりです。
<xxx>: プリフィックスと宣言子が必要
固定形式のソース出力の場合、プリフィックスは !DEC$ または CDEC$ です。
自由形式のソース出力の場合、プリフィックスは !DEC$ のみです。
プリフィックスの後には、宣言子がきます。次に例を示します。
構文 |
---|
!DEC$ PARALLEL |
自動並列化宣言子は感嘆符で始まるため、-parallel (Linux) または /Qparallel (Windows) オプションを省略した場合、宣言子はコメントの形式になります。
!DEC$PARALLEL 宣言子は、すぐ後のループで存在していると想定され、正常な自動並列化を妨げる依存を無視するようにコンパイラーに指示します。しかし、依存が証明されると無視されません。
!DEC$ NOPARALLEL 宣言子は、後のループの自動並列化を無効にします。
例 |
---|
program main parameter (n=100 integer x(n),a(n) !DEC$ NOPARALLEL do i=1,n x(i) = i enddo !DEC$ PARALLEL do i=1,n a( x(i) ) = i enddo end |
自動並列化は、次の OpenMP* 環境変数を使用します。
OMP_NUM_THREADS
OMP_SCHEDULE
KMP_STACKSIZE
デフォルト設定とこれらの変数の使用方法についての詳細は、「OpenMP* の環境変数」を参照してください。