1

反復で動作するプログラムがあります。たとえば、50000 回の反復がある場合、プログラムは 50000 回の反復を実行し、最終的に停止します。1000 回の反復で計算時間を測定すると、(たとえば) 1 秒でしたが、50000 回の反復では 10 秒でした。

反復回数と計算時間の直接比率を期待する必要がありますか? 与えられた例では、50000 回の反復で 50 秒を期待すべきではありませんか? 結果に戸惑っています…</p>

clock()関数を使って計測しています。反復の前に、srand(time(NULL)); から始めます。clock_t startTime を定義するよりも。startTime = 時計 (); .....そして ((double)(clock() - startTime)) / CLOCKS_PER_SEC) で最終的な反復時間を測定します:

4

1 に答える 1

2

たとえば、最新のプロセッサの多くはクロック速度が可変であるため、パフォーマンスの測定は難しい場合があります。

これは、CPU が不要であり、使用するエネルギーと熱の発生が少ないため、通常は遅くなることを意味します。

大量の計算が必要な場合、OS は CPU の作業があることを検出し、クロック速度 (および熱と電流) を上げて結果をより速く得ることができます。

この特定の問題を回避するには、CPU 時間 (または最悪の壁時計時間) の代わりに、計算で使用されるクロック サイクルを測定する必要があります。優れたプロファイラーは、このオプションを提供するはずです (私はoprofileを使用しています)。

于 2013-09-22T14:55:13.503 に答える