インテル® Fortran コンパイラの自動並列化機能は、入力プログラムの連続部分を同等のマルチスレッド・コードに自動的に変換します。自動パラレライザは、プログラムのループのデータフローを分析して、安全かつ効率的に並列実行可能なループに対するマルチスレッド・コードを生成します。これにより、SMP (対称型マルチプロセッサ) システムの並列アーキテクチャを活用できます。
自動並列化は次のようなユーザの負担を軽減します。
ワークシェアリング候補であるループを見つけなければならない。
正しい並列実行を確認するためにデータフロー分析を行う。
OpenMP* ディレクティブのプログラミングに必要な場合、スレッドコード生成のデータをパーティショニングする。
並列ランタイム・サポートは、ループの反復修正、スレッド・スケジューリング、および同期化の詳細を処理するような、OpenMP と同じランタイム機能を提供します。
OpenMP ディレクティブはシリアル・アプリケーションを素早く並列アプリケーションに変換できる一方、並列処理を含み、適切なコンパイラ・ディレクティブを追加するアプリケーション・コードの特定部分を、プログラマは明示的に識別する必要があります。-parallel オプションで起動された自動並列化は、並列処理を含むループ構造を自動的に識別します。コンパイル中、コンパイラは、並列処理のためにコード・シーケンスを別々のスレッドに自動的に分解しようと試みます。他にプログラマにかかる負荷はありません。
次の例は、2 つのスレッドで同時に実行できるようにループの反復を分割する方法を示します。
オリジナルの連続コード
do i=1,100
a(i) = a(i) + b(i) * c(i)
enddo
変換された並列コード
Thread 1
do i=1,50
a(i) = a(i) + b(i) * c(i)
enddo
Thread 2
do i=51,100
a(i) = a(i) + b(i) * c(i)
enddo