応募方法
以下の手順に沿って、本キャンペーンにご応募いただくことができます。
当選結果は、厳正な抽選の上、ダイレクトメッセージ (DM) のご連絡をもってかえさせていただきます。
- ① キャンペーンの要件に沿って OpenMP* プログラムの GPU オフロード実行にチャレンジし、計測した実行時間を確認できるスクリーンショットを取得します。pi のオフロードや、コンパイルと実行の例についても以下に紹介しています。実行時間が計測できない場合、インテル® VTune™ プロファイラーの GPU オフロードで解析した [プラットフォーム・ビュー] のスクリーンショットを取得します。
- ② エクセルソフト株式会社の公式 Twitter アカウントまたは公式 Facebook アカウントをフォローして、キャンペーン用の投稿をリツイートまたはシェアします。
- ③ OpenMP* プログラムの GPU オフロード実行にチャレンジした感想に手順 (1) で取得したスクリーンショットを添えた上、キャンペーン用ハッシュタグ 『#XLsoftオフロード実行チャレンジキャンペーン』 を付けて投稿します。
- ④ キャンペーン期間終了後、Twitter または Facebook アカウントの DM にて当選の旨をご連絡させていただきます。
要件
※ 注意: Fortran ユーザーは、最新のインテル® oneAPI HPC ツールキットを使用する必要があります。インテル® Parallel Studio XE 版のインテル® C++ コンパイラーを使用する場合、omptarget.lib ライブラリーのパスを指定する必要があります。 V19.1 update2 の場合は以下です (2020.2.254 はバージョンによって異なります):
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2020.2.254\windows\lib
参考動画
技術ポータル 「iSUS」 編集長である菅原 清文氏を講師としてお招きして、インテル® コンパイラーを使用した OpenMP* 5.0 による並列プログラミングについて学べる 3 部構成のウェビナー・シリーズを開催しました。このシリーズでは、CPU および GPU 向けにサポートされる OpenMP* の機能を含め、開発手順や新機能について説明します。最後に、oneAPI HPC ツールキットのベータ版に含まれるコンパイラーでコンパイルし、GPU への移行ができているか確認します。
パート 1 本編
OpenMP* が広く導入される背景とこれまでの歴史を振り返ってみます。異なるバージョンのインテル® コンパイラーや異なるコンパイラー間で OpenMP* を使用する注意点や制限について説明します。
また、OpenMP* 3.1 で追加されたタスク機能が 4.0 から 4.5 でどのように進化したかを例を使用して説明し、最新の OpenMP* 5.0 で強化された新機能を紹介します。
パート 2 本編
OpenMP* のスレッド化機能を使用してプログラマーがマルチスレッドの動作をプログラミングしたように、OpenMP* 4.0 からは omp simd を使用してプログラマーが明示的にベクトル化もできるようになりました。OpenMP simd に関連する機能を 4.0 から 5.0 までの進化を追って紹介します。
また、OpenMP* 4.0 で追加されたオフロード機能を利用することで、これまで共有メモリー型並列処理に加え分散メモリー型の並列処理を表現できるようになりました。注目されるヘテロジニアス・プログラミング環境での OpenMP オフロード機能についても説明します。
パート 3 本編
パート 1 および 2 でカバーされなかった OpenMP* 5.0 のそのほかの機能について紹介します。最後に、oneAPI 向けのデータ並列 C++ (DPC++) へ移行する前に、現行のインテル® C++/Fortran コンパイラー v.19.1 や oneAPI HPC ツールキットに含まれるインテル® C++ および Fortran コンパイラー 2021 ベータ版を使用して、簡単にインテル グラフィックスへのオフロードを行うソフトウェアの開発および検証方法を紹介します。
パート 1 補足編
典型的な pi の計算の例、ループ反復の負荷が均一ではない prime の例、並列構造の入れ子を中心に、ワークシェアを taskloop に移行する利点があるのかについて、サンプルコードをもとに解説します。
パート 2 補足編
ベクトル化の確認、OpenMP* に関連するコンパイラー・オプション、コンパイラーのプラグマとディレクティブについて説明します。また、omp simd ベクトル化における問題と解決についての例題についても紹介します。
例: pi のオフロード
#pragma omp parallel for private(x) reduction(+:sum)
for (i=0; i<num_rects; ++i){
x = (i + .5) * width;
sum += 4.0/(1. + x*x);
}
#pragma omp target data map(from:sum)
#pragma omp target teams distribute parallel for private(x) reduction(+:sum)
for (i=0; i<num_rects; ++i){
x = (i + .5) * width;
sum += 4.0/(1. + x*x);
}
パフォーマンスが向上するに越したことはありませんが、単にオフロードするだけでは高速実行できません。このキャンペーンではオフロードできるかどうかを目標とします。
例: コンパイルと実行
- ① icx pi.c /Qiopenmp /Qopenmp-targets=spir64 /nologo
- icx でコンパイルすると /Qnextgen オプションを指定する必要がありません
- icl を使用する場合 /Qnextgen が必要
- /Qiopenmp と /Qopenmp-targets=spir64 は必須オプションです
- ② set OMP_TARGET_OFFLOAD=DISABLED
- OMP_TARGET_OFFLOAD を DISABLED にすると CPU で実行されます
- ③ set OMP_TARGET_OFFLOAD=MANDATORY
- OOMP_TARGET_OFFLOAD を MANDARITY にすると GPU で実行されます
可能であれば、インテル® VTune™ プロファイラーのプレビュー機能 「GPU オフロード解析」を使用して実行状況を確認してください。