インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
インテル® Cilk™ Plus は古い機能 (非推奨) です。代わりに、OpenMP* またはインテル® TBB を使用してください。詳細は、「インテル® Cilk™ Plus の代わりに OpenMP* またはインテル® TBB を使用するためのアプリケーションの移行」を参照してください。
インテル® Cilk™ Plus を使用することで、C/C++ プログラムに細粒度のタスクを実装し、新規および既存のソフトウェアを簡単に並列化して、マルチプロセッサーおよび新しい CPU で利用可能なベクトル命令を効率良く活用できます。インテル® C++ コンパイラーにより実装される C および C++ 言語にデータとタスクの並列化を表現する簡単な言語拡張を提供します。
インテル® Cilk™ Plus には、3 つの主要な機能があります。
キーワード - タスクの並列化を表現します。提供されるキーワードの詳細は、「キーワードについて」を参照してください。
レデューサー - 各タスクに対して自動で共有変数のビューを作成し、タスクの完了後に共有変数に戻すことによって、タスク間の共有変数の競合をなくします。レデューサーに関する詳細は、「レデューサーについて」を参照してください。
配列表記 - 部分配列または配列全体のデータの並列化を提供します。配列表記についての詳細は、「配列表記 (アレイ・ノーテーション) C/C++ 拡張の概要」を参照してください。
SIMD 対応関数 - 配列やスカラーの全体または部分に適用される、関数全体や演算のデータ並列化を有効にします。SIMD 対応関数は、以前は要素関数と呼ばれていました。SIMD 対応関数の詳細についての詳細は、「SIMD 対応関数」を参照してください。
より多くのループのベクトル化を行うようにコンパイラーに指示するには、simd プラグマを使用します。simd プラグマを使用したベクトル化は、完全に自動化されたアプローチを補完します (ただし、置き換えることはできません)。#pragma simd に関する詳細は、simd を参照してください。
インテル® Cilk™ Plus は、さまざまなアルゴリズムに利用できますが、特に「分割統治」アルゴリズムに適しています。この手法では、問題を独立して処理することができる小さな問題 (タスク) に分割し、結果を結合します。再帰関数は分割統治アルゴリズムでよく使用され、多くの場合良い結果をもたらします。
タスクは独立した関数やループの反復に実装することができ、キーワードにより並列に実行できる関数呼び出しやループを指示します。タスクは効率よく実行するために、ランタイムに利用可能なプロセッサーにスケジュールされます。
以降のセクションで、ワーカーという用語は、オペレーティング・システムのスレッドがプログラムにおけるタスクを実行する、という意味で利用されています。