ホストとターゲットで実行するコードのセクションを指定する

このステップでは、ホストとターゲットの両方で実行するように定義されているコードのセクションを確認します。

次のソースコードを探します。

  !DIR$ OFFLOAD BEGIN target(mic) mandatory &
                             inout(numEs) in(all_Vals) out(E_vals)
      do k = 1, MAXSZ
         if ( MODULO(all_Vals(k),2) == 0 ) then
             numEs = numEs + 1
             E_vals(numEs) = all_Vals(k)
         endif
      enddo
  !DIR$ END OFFLOAD

このコードブロックは、最初の 10 個の偶数を検索して配列に格納します。コードブロックの先頭および終了は OFFLOAD 宣言子です。 コンパイラーは、この宣言子で指定されたコードブロックを、ホストとターゲットの両方で実行するようにコンパイルします。

mandatory 節は、暗黙のデフォルトを明確にし、ターゲットでの実行を指定します。 ホストで実行することはできません。ターゲットが利用できない場合、プログラムは実行に失敗してエラーメッセージを出力します。

ホストとターゲットの命令セットは似ていますが、同じシステムメモリーを共有しません。このため、コードブロックで使用する変数は、ホストとターゲットの両方に存在していなければなりません 変数がホストとターゲットの両方に存在することを保証するため、offload 宣言子は、パラメーター指定子を使用してホストとターゲット間でコピーする変数を定義します。

デフォルトでは、コンパイラーはホストとターゲットの両方で実行するアプリケーションを生成しますが、同じコードを使用してホストでのみ実行するアプリケーションを生成することもできます。次のステップでは、同じソースコードをコンパイルしてホストでのみ実行するアプリケーションを生成します。

次へ


このヘルプトピックについてのフィードバックを送信