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