インテル® C++ コンパイラー 14.0 ユーザー・リファレンス・ガイド
__cilkrts_get_pedigree(void);
この関数は、現在のぺディグリー (系図) の最下位ノードを返します。
インテル® Cilk™ Plus は、ぺディグリー (そのストランドになる計算のスポーンと同期の履歴を反映する 64 ビット整数のシーケンス) における実行ストランドを識別します。 2 つのストランドには常に別々のぺディグリーが含まれます。ストランドの現在のぺディグリーは cilk_spawn、cilk_sync、または cilk_for で変更され、cilk_for ループの粒度が異なります。 現在のぺディグリーは __clkrts_bump_worker_rank() の呼び出しの後にも変更されます。
ぺディグリーは、ぺディグリー・ノード (型 __cilkrts_pedigree) のリンクリストで表現されます。 このリストはシングルリンクで、ぺディグリー・ノードを逆順 (つまり、最下位のノードから最上位のノード) にストアします。各ぺディグリー・ノードは、64 ビット整数ランクと次の (より上位の) ぺディグリー・ノードへの const "親" ポインター (ノードがリストの最後の場合は null) が含まれる構造体です。 この関数の戻り値は、現在のぺディグリーの最下位ノード (つまり、リストの先頭) のコピーです。
プログラムのシリアル実行では、ぺディグリーはストランドの移行ごとに辞書順で増加します。シリアル実行と同じストランド群を生成するプログラムの並列実行では、それぞれの実行で対応するストランドのぺディグリーが一致する必要があります。
以下は、__cilkrts_get_pedigree() のガイドラインです。
ぺディグリーを検査するアプリケーションは、__cilkrts_pedigree ノードのリンクリストを調べてランク値を保存してください。
アプリケーションで __cilkrts_pedigree リストのエントリーを修正しないでください。 リストは __cilkrts_get_pedigree() を呼び出した関数の最後まで有効です。
アプリケーションで __cilkrts_pedigree エントリーへのポインターを保存しないでください。 ぺディグリーを保存するには、ぺディグリーのランク値を自身の構造体にコピーします。
インテル® Cilk™ Plus ランタイム以外で生成された複数の OS スレッドを実行するインテル® Cilk™ Plus プログラムでは、異なる OS スレッドで実行するストランドは最上位ぺディグリー・ノードが異なります。ランタイムは、このようなプログラムの実行で最上位ぺディグリー・ノードが同じになることを保証しません。
アプリケーションは、ぺディグリーの特定のランク値ではなく、2 つのぺディグリーを比較した結果にのみ依存すべきです。異なるフラグを利用してプログラムをコンパイルすると、冗長または暗黙の cilk_sync 文が最適化中に削除され、ぺディグリーのランク値が変わることがあります。