コードの現代化を実践: スレッド化、メモリー、ベクトル化の最適化

同カテゴリーの次の記事

Unreal* Engine 4/インテル® VTune™ Amplifier 利用ガイド

この記事は、インテルの The Parallel Universe Magazine 33 号 (英語) に収録されている、インテル® VTune™ Amplifier のアプリケーション・パフォーマンス・スナップショット (APS) を利用してハードウェアを効率良く使用する方法を紹介した章を抜粋翻訳したものです。

ハイパフォーマンス・コンピューティング (HPC) システムは、ハードウェア・コンポーネントの複雑な組み合わせであると言えます。ハードウェア・ベンダーは、計算集約型アプリケーションのパフォーマンスを向上するため、スピードアップ、レイテンシーの軽減、コアの追加、ベクトル幅の拡張に常に取り組んでいます。しかし、単により優れたコンポーネントを備えたシステムでアプリケーションを実行するだけでは、それらのコンポーネントが効率良く使用される保証はありません。期待するパフォーマンス向上を達成するため、コード変更 (コードを対応させること) が必要になることがあります。

幸いにも、インテル® Parallel Studio XE には、インテル® ハードウェア上でコードのチューニング作業を支援するツールが含まれています。どのツールから使用すべきか迷った場合は、インテル® VTune™ Amplifier のアプリケーション・パフォーマンス・スナップショット (APS) (英語) を使用することで、アプリケーションのパフォーマンス特性、特にパフォーマンスを制限しているボトルネックのサマリーを素早く取得できます。アプリケーション・パフォーマンス・スナップショットは、クラスター、ノード、コアレベルのパフォーマンスのチューニングに適切なインテル® Parallel Studio XE ツールを選択するのにも役立ちます (図 1)。


1. APS と専用のパフォーマンス・ツール

ISO3DFD: 波動伝播カーネルとパフォーマンス測定

サンプルコードを使用して、ボトルネックの発見とパフォーマンスの向上にツールがどのように役立つかを見てみましょう。ISO3DFD は、等方性音波方程式を実装します。

ここで、∇2 はラプラス演算子、p は圧力場、c は速度場です。有限差分は、pt と pt-1 の関数として pt+1 を表現するために使用できます。有限差分伝播カーネルは、ステンシルパターンを利用して実装できます。3 次元では、ステンシルは圧力場を横切って移動する 3D クロスのように見えます。つまり、pt+1[x,y,z] を更新するには、pt[x,y,z] のすべての近傍に 3D でアクセスする必要があります。図 2 は、2D のステンシルパターンです。


2. 2D ステンシルパターン

実際のアプリケーションでは、物理学者は通常コーナーケース用に特定の伝播手法を実装します。これらのコーナーケースは、境界条件と呼ばれます。ここではコードを簡潔にするため、境界に波を伝播しません。図 3 の単純な実装は、ステンシルの単一の反復を計算します。


3. ステンシルの単一の反復の計算

この記事では単一ノードのパフォーマンスに注目するため、サンプルコードは MPI を使用してクラスターレベルの並列処理を実装していません。

ベースライン・パフォーマンスを確立するため、デュアルソケットのインテル® Xeon® Gold 6152 プロセッサー (2.10GHz、22 コア/ソケット) を搭載した Red Hat* Enterprise Linux* Server 7.4 システム上で、512 x 400 x 400 グリッドで初期実装を実行してベンチマークを測定しました。次のコマンドを使用して、インテル® Parallel Studio XE 環境を設定します。

> source <Parallel_Studio_install_dir>/psxevars.sh

そして、インテル® VTune™ Amplifier のアプリケーション・パフォーマンス・スナップショットを使用して、ISO3DFD 初期実装のチューニングの可能性を素早く見つけます。次のコマンドで APS を起動します。

> aps ./Iso3DFD

関連記事

  • インテル Parallel Universe 26 号日本語版の公開インテル Parallel Universe 26 号日本語版の公開 インテル Parallel Universe マガジンの最新号が公開されました。この号では、インテル® Xeon Phi™ プロセッサー向けのコードの現代化について説明します。また、インテル® Parallel Studio XE 2017 […]
  • インテル® VTune™ Amplifier XE を利用した Python* コードの高速化インテル® VTune™ Amplifier XE を利用した Python* コードの高速化 この記事は、インテルの The Parallel Universe Magazine 25 号に収録されている、インテル® VTune™ Amplifier XE を利用して非常に低いオーバーヘッドで Python* コードのプロファイリング情報を得る方法に関する章を抜粋翻訳したものです。 インテル® VTune™ […]
  • インテル Parallel Universe 27 号日本語版の公開インテル Parallel Universe 27 号日本語版の公開 インテル Parallel Universe マガジンの最新号が公開されました。この号では、20 周年を迎える OpenMP* について取り上げます。また、新しいインテル® AVX-512 命令セットにより以前は不可能だったベクトル化を行う方法について紹介します。新しいインテル® Advisor […]
  • 2017 年秋のインテル® ソフトウェア製品技術ウェビナー2017 年秋のインテル® ソフトウェア製品技術ウェビナー インテル® VTune™ Amplifier と OpenMP* によりスレッドのパフォーマンスとスケーラビリティーを向上する 「スレッド」と「スケーラビリティー」は、単なるコーディングの流行語ではなく、エンタープライズ向けクラウド/ネットワークから HPC […]
  • インテル® VTune™ Amplifier XE による Java* および Python* コードのプロファイルインテル® VTune™ Amplifier XE による Java* および Python* コードのプロファイル この記事は、インテルの The Parallel Universe Magazine 26 号に収録されている、さまざまなツールと手法によりマシンラーニングで Python* のパフォーマンスを向上する方法に関する章を抜粋翻訳したものです。 長年にわたり、Java* […]