インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス
ここでは、コードの並列化に役立つ特定の C++ 言語機能について説明します。
次のように、関数に宣言を付けると、より多くのループと直列型コードを並列化するようにコンパイラーに指示できます。
// (Windows®)
__declspec(concurrency_safe(cost(cycles) | profitable))
または
// (Linux*)
__attribute__(concurrency_safe(cost(cycles) | profitable))
より多くのループと直列型コードを並列化するようにコンパイラーに指示します。
concurrency_safe 属性の使用は、アノテーション付けした関数の複数の呼び出し間、またはこの関数とプログラムの別の文 (同時に実行されていれば) の間で、影響を受けない副作用はないこと、不正な (または不適切に同期化された) メモリー・アクセス・インターフェイスはないことをコンパイラーに示します。
concurrency_safe 属性を付けた各関数について、副作用 (ある場合) を許容範囲 (または想定範囲) 内に抑え、メモリー・アクセス・インターフェイスを適切に同期化することは開発者の責任です。
cost 節は、アノテーション付けした関数の実行サイクルを指定して、その囲まれたループやブロックのコンパイル中にコンパイラーが並列化の有効性解析を実行できるようにします。 profitable 節は、アノテーション付けした関数への呼び出しを含むループまたはブロックの並列化が有効であることを示します。
cycles の値は 2 バイトの符号なし整数 (unsigned short) で、最大値は 2^16-1 です。 サイクルカウントが 2^16-1 を超える場合、profitable 節を使用してください。
次の例は、この宣言の使用方法を示します。
__declspec(concurrency_safe(cost(cycles) | profitable)) の使用例 |
---|
|