タイミング

タイミング#

並列プログラムのパフォーマンスを測定する場合、通常は CPU 時間ではなくウォールクロック時間が重要になります。その理由は、並列化が進むと通常、より多くの CPU を使用することになり、総 CPU 時間が増加するためです。プログラムを並列化する目的は、通常、プログラムをリアルタイムでより高速に実行することです。

oneAPI スレッディング・ビルディング・ブロック (oneTBB) の tick_count クラスは、ウォールクロック時間を測定するシンプルなインターフェイスを提供します。tick_count の値は、現在の絶対時間を表す静的メソッドtick_count::now() から取得されます。2 つの tick_count 値を減算すると tick_count::interval_t に相対時間が生成され、次の例のように秒単位に変換できます。

tick_count t0 = tick_count::now(); 
... 何かワークを実行 ... 
tick_count t1 = tick_count::now(); 
printf("work took %g seconds\n",(t1-t0).seconds());

一部の時間計測インターフェイスとは異なり、tick_count は複数のスレッドで使用しても安全であることが保証されています。異なるスレッドによって作成された tick_count 値を減算することは有効です。tick_count の差は秒数に変換できます。

Tick_count の解像度は、同一プロセス内の複数のスレッド間で有効な、プラットフォームで最も高い解像度の時間計測サービスに対応します。一部のプラットフォームでは、CPU タイマーレジスターがスレッド間で有効ではないため、tick_count の解像度がプラットフォーム間で一貫していることは保証されません。

Linux* では、oneapi::tbb::tick_count クラスを使用するときに、リンカーコマンドに -lrt を追加する必要がある場合があります。コマンドの詳細は、http://fedoraproject.org/wiki/Features/ChangeInImplicitDSOLinking (英語) を参照してください。