インテル® MIC アーキテクチャー向けの高度な最適化 - ヘテロジニアス・プログラミング・モデル
この記事は、インテル® ソフトウェア・サイトに掲載されている「The Heterogeneous Programming Model」の日本語参考訳です。
はじめに
ここでは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャー向けのインテル® Composer XE 2013 によるヘテロジニアス・オフロード・プログラミング・モデルを検証します。
トピック
インテル® Composer XE 2013 は、”ヘテロジニアス・オフロード” として知られているプログラミング・モデルをサポートします。このモデルでは、インテル® MIC アーキテクチャーのターゲットデバイス上で実行するコード領域をプログラマーが指定します。オフロードするコード領域とデータの指定には、簡単なプラグマ/指示句とオプションで C++ 言語拡張を使用します。特別なプログラミング API などは必要ありません。
すべてのセットアップ/後処理、データ転送、同期は、コンパイラーとランタイムによって管理されます。アプリケーションは、ホスト・プラットフォームで開始され、オフロード領域に到達すると、利用可能なインテル® MIC アーキテクチャーのターゲットが検出された場合は、(必要に応じて) オフロード領域とデータが転送され、ターゲットデバイスで実行されます。該当するターゲットが検出されない場合は、コード領域はホスト CPU で実行されます。
ヘテロジニアス・モデルでは、ホスト・アプリケーションとインテル® MIC アーキテクチャーのターゲットデバイスはメモリーを共有しません。独立したメモリー空間の処理には、次の 2 つの手法が使用されます。
- ヘテロジニアス・アプリケーションでオフロードプラグマ/指示句を使用して、ホストとターゲットデバイスのデータ移動を指示します。このモデルは、大きな連続したデータブロックを使用するアプリケーションに適しています。
- 連続していないデータブロックとポインターを使用する複雑なデータ構造では、インテル® C++ コンパイラーは、仮想共有メモリーをエミュレートして、ホストとターゲットデバイス間のデータ構造を同期する言語拡張をサポートします。これは、連続したデータブロックとして転送するのが難しい、複雑なデータ構造を持つ既存の C++ アプリケーションに向いています。
このモデルは、仮想共有メモリーの維持に必要なオーバーヘッドと同期により、最適なパフォーマンスを引き出せないため、最良の選択肢にはならないでしょう (また、そうあるべきではありません)。ただし、複雑な C++ コードの最初の移植を容易にします。このモデルは、Fortran アプリケーションではサポートされません。Fortran は、前述のように、連続したデータの移動にコンパイラー指示句を使用します。
ヘテロジニアス・オフロード入門:
「インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャー向けヘテロジニアス・オフロード・モデル」(英語) では、ヘテロジニアス・オフロード・モデルの概要を分かりやすく紹介しています。
チュートリアル: コンパイラーに付属する「インテル® C++ Composer XE 2013 Linux* 版入門チュートリアル」では、Fortran と C++ のサンプルコードを使用して、ヘテロジニアス・オフロードを紹介しています。入門チュートリアルを開いて、「チュートリアル」セクションにある「インテル® MIC アーキテクチャーの使用」のリンクをクリックすると、チュートリアルを表示できます。コンパイラーに付属するサンプルを使用して、このチュートリアルをお試しください。コンパイラーの付属ドキュメントおよびサンプルコードの場所が分からない場合は、「コンパイラーの基本的な使用法」を参照してください。
サンプル: コンパイラーには、さまざまなヘテロジニアス・オフロードのサンプルが含まれています。Samples ディレクトリーの場所が分からない場合は、「コンパイラーの基本的な使用法」を参照してください。
オフロードの使用法と構文: ヘテロジニアス・オフロード・モデルの使用法と構文は、コンパイラーとともにマシンにインストールされる「インテル® コンパイラー XE ユーザー・リファレンス・ガイド」で説明されています。このガイドの目次から、「主な機能」 > 「インテル® MIC アーキテクチャー」 > 「インテル® MIC アーキテクチャー向けプログラミング」 > 「概要: ヘテロジニアス・プログラミング」を開いてください。コンパイラーの付属ドキュメントおよびサンプルコードの場所が分からない場合は、「コンパイラーの基本的な使用法」を参照してください。
最新の追加/変更: コンパイラーのリリースノートを確認してください。このドキュメントは、 https://registrationcenter.intel.com にログインして、ダウンロードすることができます。また、コンパイラーとともにインストールされます (「コンパイラーの基本的な使用法」を参照)。
さらに、https://www.izzz.us/article/idz/mic-developer/ でも、最新情報を確認できます。
サポート: 質問がある場合、ドキュメントでアプリケーションの使用モデルが見つからない場合、またはアプリケーションに関する支援が必要な場合は、デベロッパー・コミュニティー・フォーラム (アクセスにはユーザーアカウントが必要) を参照してください。
まとめ
インテル® Composer XE 2013 は、”ヘテロジニアス・オフロード” として知られているプログラミング・モデルをサポートします。このモデルでは、インテル® MIC アーキテクチャーのターゲットデバイス上で実行するコード領域をプログラマーが指定します。オフロードするコード領域とデータの指定には、簡単なプラグマ/指示句とオプションで C++ 言語拡張を使用します。
このモデルに関する資料は多数用意されています。コンパイラー製品には、次のものが含まれています。
- チュートリアル
- テンプレートとして使用可能なサンプルコード
- 使用法と構文に関する製品ドキュメント
- 最新の追加/変更内容を含むリリースノート
- プログラミングに関する支援が受けられる デベロッパー・コミュニティー・フォーラム (アクセスにはユーザーアカウントが必要) と豊富なドキュメントが利用可能な MIC-DEV オンライン・ポータル
次のステップ
この記事は、「Programming and Compiling for Intel® Many Integrated Core Architecture」(英語) の一部「The Heterogeneous Programming Model」の翻訳です。インテル® Xeon Phi™ コプロセッサー上にアプリケーションを移植し、チューニングを行うには、本ガイドの各リンクのトピックを参照してください。アプリケーションのパフォーマンスを最大限に引き出すために必要なステップを紹介しています。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。