インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
このトピックは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。
コンパイラーには、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーで実行するセクションをオフロードできる、並列プログラムを単純に記述する言語拡張が含まれています。
実行はホスト CPU で開始し、ユーザー定義コードに基づいて、セクションがコプロセッサーにオフロードされます。
ヘテロジニアス・プログラミングは、従来の CPU プログラミングと異なる 2 つの点に対処する必要があります。
ホスト CPU とコプロセッサーの命令セットは似ていますが同一ではありません。
ホスト CPU とコプロセッサーは共通のシステムメモリーを共有しません。
コンパイラーは、次のプログラミング・モデルをサポートします。共有システムメモリーの不足に対処するアプローチはモデルによって異なります。
非共有メモリーモデル。
このモデルは、プラグマ offload およびプリフィクス offload_ のプラグマを使用します。
このモデルは、ビット単位でコピー可能なスカラー、配列、構造体のような、フラットなデータ構造を扱う場合に適しています。
このモデルのデータはオフロードコードの前後で CPU とコプロセッサー間でコピーされます。転送のために選択されるデータは、(オフロード構造内で字句的に参照されるために) 暗黙で転送される変数と、プラグマの節で明示的にリストされる変数の組み合わせです。
仮想共有メモリーモデル。
このモデルは、_Cilk_shared および _Cilk_offload キーワードを使用します。インテル® Cilk™ Plus は古い機能 (非推奨) です。
このモデルは、リンクリストやツリーのような、複雑なポインターベースのデータ構造を扱う場合に適しています。
このモデルは、CPU とコプロセッサー間で共有されるソフトウェア実装の仮想メモリーを使用します。オフロード中に交換されるデータを共有として宣言します。または、データがダイナミックの場合、特殊な alloc および free 呼び出しを使用して割り当てます。
単一プログラムで両方のオフロードモデルを使用してもかまいません。ただし、2 つのモデルで扱うデータは別々に処理する必要があります。
両方のモデルで、構造がコプロセッサーで実行するように指定しても、その動作は保証されません。インテル® MIC アーキテクチャー・ベースのサブシステムが存在し、そのサブシステムをオフロードに利用できる場合にのみ、オフロードは成功します。オフロードに失敗すると、プログラムはエラーメッセージを出力して終了します。
最適化に関する注意事項 |
---|
インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミング SIMD 拡張命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。 注意事項の改訂 #20110804 |