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