将来に対応したコードの最適化によるソフトウェアの現代化

この記事は、インテル® デベロッパー・ゾーンに公開されている「Modernizing Software with Future-Proof Code Optimizations」の日本語参考訳です。


この記事の PDF 版はこちらからご利用になれます。

Bull image

新しいインテル® Parallel Studio XE 2018 を利用してハイパフォーマンスでスケーラブルな移植性の高い並列コードを作成する

インテル® Parallel Studio XE は、HPC、エンタープライズ、クラウド・コンピューティング向けのインテル® プロセッサー・アーキテクチャーにおいて、ソフトウェアの開発、デバッグ、チューニングを支援するインテルの開発製品です。コンパイラーとハイパフォーマンスな数学ライブラリーから大規模なクラスター・アプリケーション向けのデバッガーとプロファイラーまで、すべてを備えた統合ツールスイートです。これらのツールを利用することで、開発者はインテル® プロセッサーの潜在的な能力を最大限に引き出すことができます。インテル® Parallel Studio XE は、開発者がハイパフォーマンスでスケーラブルな安定した並列コードを素早く作成できるように支援します。

インテル® Parallel Studio XE 最新リリースのインテル® Parallel Studio XE 2018 には、多数の新しく興味深い機能が含まれています [1]。まずは、製品名の一部でもある並列化から見ていきましょう。以前は、ソフトウェア開発と並列化は個別の懸念事項であり、並列コンピューティングは主にハイパフォーマンス・コンピューティング分野に限定されていました。しかし、今日では並列アーキテクチャーが普及し、マルチコア・プロセッサーは携帯端末から世界で最も強力なスーパーコンピューターまで広範に利用されています。

インテル® コンパイラーは、OpenMP* 4.5 標準規格のコンパイラー・ディレクティブによるマルチスレッド化をサポートし、さらに OpenMP* 5.0 ドラフト (TR4) の初期サポートも提供しています。誕生から 20 年が経った OpenMP* は、新しいハードウェア・アーキテクチャーとともに進化し続けています [2, 3, 4]。最新バージョンでは、アクセラレーター・デバイスへの計算オフロード、ベクトル化ディレクティブ、強化されたスレッド割り当て制御などが利用できます [5]。分散メモリーシステム向けのプロセスレベルの並列化において、インテル® MPI ライブラリーは、最新のメッセージ・パッシング・インターフェイス (MPI) 標準規格をサポートしており、集合通信、ジョブの開始と終了、インテル® Omni-Path アーキテクチャー (インテル® OPA) などの最新の高速インターコネクトのサポートを提供します。OpenMP* と MPI を併用するハイブリッド・アプリケーションは、現代のクラスターでスケーラブルな並列処理を達成する強力な手段であることが実証されています。

ソケットごとのコア数は、最初のマルチコア・プロセッサーが登場して以来着実に増加し続けています。高レベルの並列化は重要ですが、低レベルのコードのチューニングも見過ごすべきではありません。適切にチューニングされていない並列コードは、逆効果になることがあります。アプリケーションを並列化した後に、いくつかの主要ループをベクトル化したほうが優れたパフォーマンスが得られるだけでなく、並列化も不要であったことに気付くことほど残念なことはありません。最近のプロセッサー・アーキテクチャーの広いベクトル幅に対応するため、インテル® コンパイラーは、効率良くベクトル化するための多くの新機能を備えています [6]。OpenMP* のベクトル化ディレクティブに加えて、インテル® コンパイラーは、インテル® Xeon® スケーラブル・プロセッサーとインテル® Xeon Phi™ プロセッサーにおいて最新のインテル® アドバンスト・ベクトル・エクステンション 512 (インテル® AVX-512) 命令を利用します [7]

インテル® Parallel Studio XE 2018 に含まれるインテル® コンパイラーは、最新の Fortran、C、C++ 標準規格をサポートします。比較的最近、インテル® Parallel Studio XE にインテル® Distribution for Python* が追加されました。インテルの最適化された Python* ディストリビューションは、インテル® パフォーマンス・ライブラリーと多くの Python* パッケージ (NumPy*、SciPy*、scikit-learn、mpi4py) を統合します。(製品に含まれない Julia [8] や R [9, 10] などのその他の生産性言語もインテル® パフォーマンス・ライブラリーを利用できます。) インテル® Parallel Studio XE 2018 には、次の高度に最適化されたライブラリーも含まれます: インテル® マス・カーネル・ライブラリー (インテル® MKL)、インテル® インテグレーテッド・パフォーマンス・プリミティブ (インテル® IPP)、インテル® データ・アナリティクス・アクセラレーション・ライブラリー (インテル® DAAL)、インテル® MPI ライブラリー、インテル® スレッディング・ビルディング・ブロック (インテル® TBB)。インテル® MKL は、密/疎線形代数、フーリエ変換、ニューラル・ネットワーク、ランス生成、基礎統計など向けにチューニングされた並列数学関数を提供します。最新バージョンには、ニューラル・ネットワークの訓練に必要な多くの行列乗算と畳み込みのパフォーマンスを向上する新しい API が含まれています。インテル® IPP では、画像処理、コンピューター・ビジョン、信号処理、圧縮/展開、暗号化、文字列処理の一般的な計算を利用できます [11]。スイートに含まれる最新のライブラリーであるインテル® DAAL は、基礎統計、マシンラーニング (次元縮小、異常検出、分類、回帰、クラスタリングなど) をサポートします [9, 12, 13, 14]

C++ プログラマー向けにインテルは、タスク並列処理に広く使用されているテンプレート・ライブラリーである、インテル® TBB (www.threadingbuildingblocks.org (英語)) を引き続きサポートします [15]。(インテル® TBB は、Apache* 2.0 ライセンスの下に提供されるオープンソース・ライブラリーです。インテルは常に、独自のプログラミング・モデルよりも、オープンでベンダー・ニュートラルな標準規格に推奨してきました。) Intel Parallel Studio XE wordcloud
インテル® TBB は、マルチコア・プロセッサーを最大限に利用しますが、その最も魅力的な新機能はフローグラフ調整レイヤーです。フローグラフを利用することで、プログラマーはインテル® TBB ランタイムが並列化に使用する複雑なワークフローを記述できます。インテル® TBB のフローグラフは、ヘテロジニアス・プロセッサー環境において、推奨される並列プログラミング・モデルになるかもしれません。インテル® Parallel Studio XE 2018 に含まれるインテル® Advisor では、フローグラフ・アナライザーと呼ばれるプレビュー機能が提供され、最適なフローグラフの作成を支援します [16]

コンパイラーとパフォーマンス・ライブラリーに加えて、インテル® Parallel Studio XE 2018 には、命令、スレッド、およびプロセッサー・レベルの並列化のデバッグとチューニングを支援する、強力なコード解析ツールが含まれています。インテル® Inspector は、メモリーリークなどの一般的な不具合だけでなく、スレッド化されたコードの正当性チェックを実行してデータ競合、潜在的なボトルネック、その他の非決定的な並行性エラーを見つける、ユニークなデバッガーです。インテル® VTune™ Amplifier は、パフォーマンス hotspot を見つける基本プロファイルを提供するだけでなく、マイクロアーキテクチャー解析、メモリー解析、I/O 解析などの多くの機能を備えています。最新リリースでは、コンテナーで実行するアプリケーションのプロファイルをサポートしています。また、新しいアプリケーション・パフォーマンス・スナップショットは、MPI、CPU、FPU、メモリーの使用に関するアプリケーションの効率とパフォーマンス特性の概要を提供します。インテル® Advisor もユニークなツールで、並列化可能な領域のプロトタイプを素早く作成し、期待されるスピードアップを予測します。インテル® Advisor の最も注目すべき新機能は、キャッシュを考慮したルーフライン解析です。最適でないループを特定して、チューニングに適した候補をグラフ上に表示し、パフォーマンス・ボトルネックの可能性についてアドバイスします [6, 17]。インテル® Trace Analyzer & Collector は、MPI アプリケーションの正当性チェックと通信プロファイルを実行します。最新バージョンは、区分化大域アドレス空間 (PGAS) の並列処理向けオープン標準 API である OpenSHMEM* (www.openshmem.org (英語)) をサポートします。PGAS は、将来の並列システムにおいて重要なプログラミング・モデルになる可能性があります。最後に、クラスターの状態を解析するツールであるインテル® Cluster Checker に、利便性と診断出力の改善、インテル® Omni-Path アーキテクチャー (インテル® OPA) のチェックなどを含む新機能が追加されました [18]

インテル® Parallel Studio XE ユーザーの中で、この 10 年間、このツールスイートがどれほどの進化を遂げ、一部のコンポーネントがいかに成熟し (20 年以上)、どのように新しいアプローチを推進して、開発者が並列プログラミングのパフォーマンスを大幅に向上できるように支援してきたかを理解しているのは少数でしょう。将来に対応したコードの現代化を可能にするという設計目標は当初から変わっていません。例えば、20 年前のキャッシュの最適化手法 (ブロッキングやタイリングなど) は今でも有用です。しかし、今日のコードの現代化において重要なことは、いかに並列処理を利用するかです。ベクトル化 (命令レベルの並列化) から開始し、スレッド化、そして分散メモリークラスターでのメッセージパッシングを行います。今後はどのような方向に進むのでしょうか? ヘテロジニアス並列処理、PGAS 言語、永続メモリー領域など、あらゆる可能性があります。どのような将来になったとしても、インテル® Parallel Studio XE は新たな展開に応じて進化するでしょう。

関連情報

参考文献

次の記事は、The Parallel Universe に掲載されています。最新号は、こちらから入手できます。

  1. Jackson Marusarz 「コードの現代化によるパフォーマンス、移植性、スケーラビリティーの向上: インテル® Parallel Studio XE 2018 の新機能」The Parallel Universe Issue 30.
  1. Rob Farber「OpenMP* 誕生から 20 年: 並列プログラミングを C/C++ および Fortran プログラマーが利用しやすいものにしエクサスケール計算への道をソフトウェアに提供」The Parallel Universe Issue 28.
  2. Bronis R. de Supinski「OpenMP* 20 周年: 並列プログラミングを C/C++ および Fortran プログラマーが利用しやすいものに」The Parallel Universe Issue 29.
  3. Barbara Chapman「OpenMP* が大人の仲間入り: 20 年を経て関連性をさらに強化」The Parallel Universe Issue 30.
  4. Michael Klemm ほか「現在と将来の OPENMP* API 仕様: 代表的な並列プログラミング言語の各バージョンにおける進化」The Parallel Universe Issue 27.
  5. Robert H. Dodds「ベクトル化が再び重要に: オープンソース・コード WARP3D がベクトル化に新たな関心が寄せられていることを実証」The Parallel Universe Issue 29.
  6. Martyn Corden「インテル® AVX-512 で向上したベクトル化のパフォーマンス: インテル® コンパイラーでループをベクトル化してスピードアップするさまざまな例」The Parallel Universe Issue 27.
  7. Ranjan Anantharaman ほか「Julia: スーパーコンピューティング向け高水準言語 ー 科学計算の新しい壁を乗り越える Julia プロジェクト」The Parallel Universe Issue 29.
  8. Steena Monteiro、Shaojuan Zhu「インテル® DAAL による R の線形回帰の高速化: 高度に最適化されたオープンソース・パッケージを使用してより正確に予測」The Parallel Universe Issue 29.
  9. Drew Schmidt「R を使用した HPC: 基本」The Parallel Universe Issue 28.
  10. Chao Yu、Sergey Khlystov「クラウドおよびエッジ・アプリケーション向けの高速データ圧縮コードのビルド: インテル® IPP を利用した圧縮の最適化」The Parallel Universe Issue 29.
  11. Vadim Pirogov ほか「ビッグデータ解析とマシンラーニングの有効利用: インテル® パフォーマンス・ライブラリーにより実現」The Parallel Universe Issue 26.
  12. Oleg Kremnyov ほか「インテル® DAAL を利用して実際のマシンラーニングの問題を解く」The Parallel Universe Issue 28.
  13. Oleg Kremnyov ほか「外れ値への対応: 実際のデータセットで不正取引を見つける方法」The Parallel Universe Issue 30.
  14. 「Intel Threading Building Blocks celebrates 10 years!」The Parallel Universe, Special Edition.
  15. Vasanth Tovinkere ほか「インテル® Advisor のフローグラフ・アナライザーで自動運転コードのパフォーマンスを向上: 自動運転アプリケーションのパフォーマンスを最適化」The Parallel Universe Issue 30.
  16. Kevin O’Leary ほか「インテル® ADVISOR のルーフライン解析: パフォーマンス最適化のトレードオフを視覚化する新しい方法」The Parallel Universe Issue 27.
  17. Brock A. Taylor「あなたのクラスターは健全ですか?: インテル® Cluster Checker によるクラスター診断の重要性」The Parallel Universe Issue 30.
Henry A Gabb

著者紹介

Henry A. Gabb インテル コーポレーション シニア主席エンジニア。HPC と並列コンピューティング分野で長年の経験があり、並列プログラミング、計算生命科学、ケモインフォマティクスに関する記事を多数出版しています。ソフトウェア革新に関するインテルの季刊誌『The Parallel Universe』の編集者であり、『Developing Multithreaded Applications: A Platform Consistent Approach』の編集者/共著者です。インテルと Microsoft* による Universal Parallel Computing Research Centers のプログラムマネージャーを務めました。

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

関連記事