スレッド化されたアプリケーションで、パフォーマンスが高いと思われるコードのすべてのセクションにタイミング ブロックを配置しています。これらのセクションは十分な長さであり、最終的なプロダクション ランでもタイミング コードがアクティブな状態を維持できます。アプリケーションには、タスク プールから作業をプルするワーカー スレッドが多数あります。
現在のカスタム プールの実装では、ワーカー スレッドごとに 2 つの余分な時間を計算します。(1) ジョブが到着するのを空のプールで待機するのに費やされたアイドル時間の量と、(2) 考慮されていない「欠落した」時間の量です。アイドリングまたはタイミングブロックのいずれかによって(私が見逃したパフォーマンス集約型の領域を示しています)。
現在、コードを Intel Thread Building Blocks に切り替えることを検討しています。TBB タスクを使用しているときにアイドル時間を測定することはできますか? アイドル時間と欠落時間の合計は、壁時計間隔の合計から各タイミングセクションを差し引くことで簡単に計算できますが、それぞれを個別に取得するには、特別なサポートが必要です (または、優先度の低い特別なアイドルタスクがスピンして、自分自身を横取りしようとしますか?) .
注: http://software.intel.com/en-us/forums/showthread.php?t=107203でもこの質問をして、回答を同期します。