2

低レベルの C/x64 コードの速度の最適化を書いていますが、どちらの選択が確実に高速であるかを測定する標準的な方法があるかどうか疑問に思っています。

手法 A と手法 B を比較するときの私の現在の手法では、B をほぼ同じ時間繰り返すよりも、A を数百回繰り返して、それぞれにかかった平均時間を比較します。次に、これを数十の例で繰り返し、各手法の平均値を比較します。(私は平均分についても同じことをします)

残念ながら、この方法にはいくつかの問題があるようです。たとえば、テストする 3 番目の手法を検討し、実際には B を使用すると、この 2 回目の B の実行はほぼ体系的に高速になり (キャッシュ効果?)、A よりも十分高速になります。

また、JIT 化されたコードをプロファイリングするためのより適切な手法はありますか?

4

2 に答える 2

1

この関数はうまくいくはずです。

static unsigned long long rdtsctime() {
    unsigned int eax, edx;
    unsigned long long val;
    __asm__ __volatile__("rdtsc":"=a"(eax), "=d"(edx));
    val = edx;
    val = val << 32;
    val += eax;
    return val;
}

1 回呼び出して現在の時間を取得し、次にもう一度呼び出して最初の値を減算し、経過時間 (サイクル単位) を取得します。

于 2013-05-22T18:38:53.483 に答える