この記事は、Go Parallel に公開されている「GUIDED CODE VECTORIZATION WITH INTEL ADVISOR XE」 (https://goparallel.sourceforge.net/wp-content/uploads/2016/04/Colfax_Advisor_Vectorization.pdf) の日本語参考訳です。
この文献では、インテル® Advisor と呼ばれる最適化ツールを利用した、荷電粒子のグループによって生成される 3 次元空間のポイントのセットの電位を計算するサンプル・ワークロードの最適化について説明します。サンプル・ワークロードは、インテル® アドバンスト・ベクトル・エクステンション 2 (インテル® AVX2) 対応のマルチコアのインテル® Xeon® プロセッサー上で実行します。
サンプル・アプリケーションは、元々複数のコア向けに並列化されていますが、それ以外の最適化やベクトル化は行われていません。ここでは、インテル® Advisor によって検出された 3 つのパフォーマンス問題 (ベクトル依存関係、型変換、および非効率なメモリー・アクセス・パターン) について述べます。問題ごとに、インテル® Advisor によって提示されたデータの解釈、および問題を解決するためのアプリケーションの最適化について説明します。最適化により、オリジナルの実装と比較して、パフォーマンスが 16 倍向上しました。
この文献で使用するサンプルコードは、Colfax Research の Web サイトからダウンロードできます。
1. はじめに
近年、ハイパフォーマンス・コンピューティング (HPC) 業界で導入されている最新のプロセッサーでは、並列性が大幅に向上しています。最近のコンピューター・アーキテクチャーは、ハイパフォーマンスを提供するため、多数のコアと幅広いベクトルレジスターを備えています。しかし、電力効率と冷却の制限により、プロセッサーの世代間でクロック速度の大幅な向上は望めなくなりました。最近のコンピューターで実行するアプリケーションは、高度な並列アーキテクチャーの利点を得るため、この周波数の向上から超並列処理への計算能力の変化に対応する必要があります。
並列処理の利点が得られるようにアプリケーションを適合させることをコードの現代化と呼び、この処理は、特に並列プログラミングの経験がない開発者にとっては困難な作業です。レガシー・アプリケーションでは、桁違いなパフォーマンス向上の可能性があるため、現代化は最適化と同義です。インテル® Advisor は、コードの現代化に取り組む開発者を支援するためインテルにより開発されたソフトウェア・ツールです。
インテル® Advisor は、アプリケーションの最適化の早期段階で開発者を支援するように設計されています。コードの詳細な解析情報を提供し、ベクトル化、スレッド並列処理、メモリー・アクセス・パターンを含むパフォーマンス最適化の複数の分野について推奨事項を示します。この文献では、インテル® Advisor のベクトル化アドバイザー機能にのみ注目します。
電位を計算する最適化されていないサンプル・アプリケーションを、インテル® Advisor でそれをステップバイステップで最適化して、ベクトル化アドバイザーの使用例を示します。
2. サンプル・ワークロード
このセクションでは、インテル® Advisor を使用して、サンプル・アプリケーションのデータ並列性を高める現代化を行います。オリジナルのサンプル・アプリケーションはベクトル化されておらず、非効率なメモリー・アクセス・パターンも含まれています。ただし、複数コアに向けて並列化は行われています。インテル® Advisor は、マルチスレッド化とその最適化を支援します。ここでは、最初にマルチスレッド化について述べてからベクトル化に取り組みたいと思います。