このトピックは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーにのみ適用されます。
ターゲット固有の関数を利用するように、ターゲットで実行する関数とオフロードコードのセクションを記述することができます。
コンパイラーは、コプロセッサー向けのコードを生成するとき、マクロ __MIC__ を定義します。 !DIR$ if defined __MIC__ セクション内にターゲット固有のコードを記述することができます。
!DIR$ OMP OFFLOAD 文に続く文の内部で __MIC__ マクロを使用しないでください。 ただし、宣言子から呼び出されるサブプログラムでこのマクロを使用することはできます。
クラス F32vec の実装は CPU とコプロセッサー専用です。 コプロセッサーで実行する場合、オフロードコードで専用バージョンを使用できます。オフロードに失敗して構造を CPU で実行する場合は、CPU バージョンを使用します。
!DIR$ ATTRIBUTES OFFLOAD : mic :: foo
integer function foo()
implicit none
!DIR$ if defined (__MIC__)
foo = 1 ! コードはコプロセッサーで実行中です
!DIR$ else
foo = 0 ! コードはホストで実行中です
!DIR$ endif
end function foo
program main
implicit none
! ローカル変数
integer :: result
integer :: foo
!DIR$ ATTRIBUTES OFFLOAD : mic :: foo
! ホストで foo を呼び出します
result = foo()
! 結果を出力します
if ( result ) then
write (*,*) "Code ran on coprocessor"
else
write (*,*) "Code ran on host"
end if
! MIC で foo を呼び出します
!DIR$ OFFLOAD TARGET(mic)
result = foo()
! 結果を出力します
if ( result ) then
write (*,*) "Code ran on coprocessor"
else
write (*,*) "Code ran on host"
end if
end program main