インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

用語集

インテル® Cilk™ Plus は古い機能 (非推奨) です。代わりに、OpenMP* またはインテル® TBB を使用してください。詳細は、「インテル® Cilk™ Plus の代わりに OpenMP* またはインテル® TBB を使用するためのアプリケーションの移行」を参照してください。

用語集では、本ガイドで使用されている重要な用語の簡単な説明と定義をリストしています。

アトミック

分割できないもの。任意の時点において、命令シーケンスの命令がまったく実行されていないか、あるいはそのすべての命令が実行されているようにほかのストランドから見える場合、ストランドによって実行されるその命令シーケンスはアトミックです。

チップ・マルチプロセッサー

1 つのマルチコアチップに搭載された汎用マルチプロセッサー。

cilk_for

反復を並列で個別に実行することができる for ループを示すキーワード。

cilk_spawn

指定したサブルーチンを個別に、呼び出し元と並列で実行できることを示すキーワード。

cilk_sync

cilk_sync の後の文を実行する前に、現在の関数内でスポーンされたすべての関数が完了していなければならないことを示すキーワード。

可換演算

型 (T) の演算 (op) は、型 T の 2 つのオブジェクト a と b に対して a op b = b op a の場合、可換であるといえます。整数加算やセットの和集合は可換ですが、文字列結合は可換ではありません。

コンカレント・エージェント

その他同様のコンカレント・エージェントと同時にプログラム命令を実行する可能性のあるプロセッサー、プロセス、スレッド、その他のエンティティー。

コア

マルチコアチップにおけるシングル・プロセッサー・ユニット。"プロセッサー" および "CPU" という用語は、業界によっては、"コア" と同義語として使用されます。

CPU

Central Processing Unit。"コア" と同義語です。マルチコアチップの 1 プロセッサーを指します。

クリティカル・セクション

ロックを保持している間に、ストランドによって実行されるコード領域。

クリティカル・パスの長さ

スパンの説明を参照してください。

データ競合

共通ロックを保持していない 2 つ以上の並列ストランドが同じメモリー位置にアクセスし、そのうちの少なくとも 1 つのストランドが書き込みを行う場合に発生する競合状態。決定性競合と比較してみてください。

デッドロック

2 つ以上のストランドが互いに相手がリソースを解放するのを待機していて、どのストランドも先に進めない状態。

決定性競合

2 つの並列ストランドが同じメモリー位置にアクセスして、そのうちのどちらかが書き込みを行う場合に発生する競合状態。

決定性

同じ入力で複数回実行した際に、どの実行でもプログラムが同じ動作をすること。通常、決定性プログラムは、デバッグが簡単です。

分散メモリー

複数のプロセッサー間で分割されているコンピューターの記憶域。分散メモリー・マルチプロセッサーとは、プロセッサーがリモート・プロセッサーのメモリーにアクセスするために、リモート・プロセッサーにメッセージを送信する必要があるマシンのことです。共有メモリーと対照的です。

実行時間

特定のシステムでプログラムの実行にかかる時間。

フォルス・シェアリング

2 つのストランドが同じキャッシュブロックの異なるメモリー位置にアクセスする場合に発生するキャッシュブロックの競合状態。

グローバル変数

すべてのローカルスコープの外側に属する変数。非ローカル変数も参照してください。

ハイパーオブジェクト

インテル® Cilk™ Plus ランタイムで使用されるオブジェクト。並列ストランドのスポーンと同期に関連するデータ構造の作成、使用、破棄を管理します。ハイパーオブジェクトにはレデューサーとホルダーが含まれます。

命令

プロセッサーにより実行される単一の操作。

直線的なスピードアップ

プロセッサー数に比例したスピードアップ。完全に直線的なスピードアップも参照してください。

ロック

リソースへの同時アクセスを制限することでアトミック操作を提供するための同期メカニズム。ロックに関する重要な操作として、取得 (ロック) と解放 (アンロック) があります。多くのロックは、常に 1 つのストランドだけがロックを保持できる mutex として実装されます。

ロック競合

複数のストランドが同じロックを奪い合う状態。

マルチコア

2 つ以上のプロセッサー・コアを集積した半導体チップ。

マルチプロセッサー

複数の汎用プロセッサーを搭載したコンピューター。

mutex

同時に 1 つのストランドだけが取得できる "相互排他" ロック。同時に 1 つのストランドだけが mutex で保護されたクリティカル・セクションを実行できるようにします。Windows* は、CRITICAL_SECTION を含むいくつかの種類のロックをサポートしています。Linux* は、Pthreads の pthread_mutex_t objects をサポートしています。

非決定性

同じ入力で複数回実行した際に、実行ごとにプログラムの動作が異なること。通常、非決定性プログラムは、デバッグが困難です。

非ローカル変数

使用される関数、メソッド、クラスのスコープの外側に属するプログラム変数。インテル® Cilk™ Plus プログラムでは、cilk_for ループの外側にスコープがある変数を表します。

並列ループ

すべての反復を個別に並列で実行可能な for ループ。並列ループを指定するための cilk_for キーワード。

並列性

ワークとスパンの比率。プロセッサー数が無制限な場合に、アプリケーションで可能な最大のスピードアップを示します。

ペディグリー

最大ストランドを一意に識別するための 64 ビット整数のシーケンス。

完全に直線的なスピードアップ

プロセッサー数とスピードアップが同じ。直線的なスピードアップも参照してください。

プロセス

自身のアドレス空間を持ち、オペレーティング・システムにより管理されるコンカレント・エージェント。メモリーは、明示的なオペレーティング・システムの呼び出しによってのみプロセス間で共有できます。

プロセッサー

プロセッサーは、プログラムの命令をシーケンシャルに実行するためのロジックを実装します。同義語として "コア" が使用されます。

競合状態

非決定性の原因。それぞれのストランドの命令を実行するタイミングや順序によって、同時に実行した計算の結果が異なります。

レシーバー

関数呼び出しの結果を受け取る変数。

レデューサー

通常の変数の代わりに使用されるハイパーオブジェクト。データ競合を引き起こすことなく、算術和、文字列結合、リスト作成などの結合操作を並列に行えるようにします。

応答時間

ユーザーが入力してから結果を取得するまでの計算の実行にかかる時間。

特定のシステムでプログラムの実行にかかる時間。

スケールダウン

並列アプリケーションが 1 つまたは少数のプロセッサー数でも効率的に実行できること。

スケールアウト

アプリケーションの複数のコピーを多数のプロセッサーで効率的に実行できること。

スケールアップ

並列アプリケーションが多数のプロセッサー数でも効率的に実行できること。直線的なスピードアップも参照してください。

順序一貫性

共有メモリーにおけるコンカレント・エージェントによる操作が、エージェントがそれぞれ実行された場合と矛盾しないような形で、全体的な秩序を保ちながら相互に実行される、並列処理におけるメモリーモデル。

シリアル実行

インテル® Cilk™ Plus プログラムのシリアル化の実行。

シリアル・セマンティクス

シリアル化と同じ結果になる決定性のあるインテル® Cilk™ Plus プログラム。"シリアル・セマンティクス" と呼ばれます。

シリアル化

インテル® Cilk™ Plus プログラムからインテル® Cilk™ Plus キーワードを除いた C/C++ プログラム。cilk_spawncilk_sync は取り除かれ、cilk_for は通常の for ループに置換されます。シリアル化はデバッグに使用できます。また、変換された C/C++ プログラムは、オリジナルの C/C++ プログラムと同じ動作になります。一部の文献では、"シリアライズ" という用語が使用されています。

共有メモリー

複数のプロセッサー間で共有されているコンピューターの記憶域。共有メモリー・マルチプロセッサーとは、各プロセッサーが任意のメモリー位置に直接アクセスできるマシンのことです。分散メモリーと対照的です。

スパン

無制限のプロセッサー数で並列プログラムを実行した場合の理論上の最小実行時間です (通信とスケジュールにかかるオーバーヘッドは考慮されません)。通常、文献では T と表されます。クリティカル・パスの長さとも呼ばれます。

スポーン

通常の呼び出しのように関数が戻るのを待たずに、関数を呼び出すこと。呼び出し元は、呼び出した関数と並列で実行を継続できます。cilk_spawn も参照してください。

スピードアップ

プログラムを並列で実行した際に、1 つのプロセッサーで実行した場合よりもどれだけ速く実行されるかを示す値。スピードアップは、プログラムを P 個のプロセッサーで実行したときの実行時間 T P を 1 個のプロセッサーで実行したときの実行時間 T1 で割った値です。

ストランド

spawn やその他の並列制御からのスポーン、同期、リターンが含まれていない一連のシリアル命令。

同期

続行する前に、スポーンされた関数のセットがリターンするのを待機すること。現在の関数は、スポーンされた関数に依存していて、それらと並列に続行することができません。cilk_sync も参照してください。

スレッド

アドレス空間を同じプロセス内のほかのスレッドと共有するコンカレント・エージェント。通常、スレッドのスケジュールは、オペレーティング・システムによって管理されます。

スループット

単位時間あたりに実行される演算の数。

ビュー

特定のストランドから見たハイパーオブジェクトの状態。

ワーク

シングル・プロセッサーでプログラムを実行した場合の実行時間。T1 と表されることもあります。

ワークスチール

それぞれのプロセッサーでローカルに並列作業を行い、ローカルの作業がなくなったら、別のプロセッサーから作業を移動してくるスケジュール手法。ワーク・スチール・スケジューラーは、並列処理が十分にある場合、通信や同期にオーバーヘッドがかからないため効率的です。インテル® Cilk™ Plus のランタイムシステムは、ワーク・スチール・スケジューラーを使用します。

ワーカー

別のワーカーが並列ストランドで命令を実行するのと同時に 1 つのストランドの命令を実行する可能性のあるコンカレント・エージェント。ワーカーは、インテル® Cilk™ Plus ランタイムシステムのワーク・スチール・スケジューラーにより管理されます。ワーカーは、オペレーティング・システム・スレッドとして実装されます。