0

Windows で特定のコードの実行に費やされた CPU サイクルを測定しようとしています。上記のコード (Visual C++ 11) を実行しているときに、実行ごとに CPU サイクルが大幅に異なる可能性があることに気付きました。関連する明示的な I/O がないため、なぜこれが起こっているのかわかりません。

一般に、スレッドが消費する CPU サイクルと実行される命令の量との関係はどのようなものですか? その概算として CPU サイクルを使用できますか?

#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <algorithm>
int _tmain(int argc, _TCHAR* argv[])
{
    unsigned __int64 thread_cycle1;
    unsigned __int64 thread_cycle2;

    HANDLE thread_handle = GetCurrentThread();
    QueryThreadCycleTime(thread_handle, &thread_cycle1);

    // Code for profiling
    int a[] = {1,3,4,5,6,7,23,4,2,6,7,8,9};
    std::sort(a, a + sizeof(a) / sizeof(a[0]));

    QueryThreadCycleTime(thread_handle, &thread_cycle2);

    std::cout << thread_cycle2 - thread_cycle1 << " cycles";
    return 0;
}
4

1 に答える 1

0

Cycles ~= # Instructions execute. と言うには、あまりにも一般化する必要があると思います。命令が異なれば、レイテンシも異なります。

少なくともインテル® 64 および IA-32 の詳細については、次のリンクを参照してください。

http://www.intel.co.uk/content/dam/doc/manual/64-ia-32-architectures-optimization-manual.pdf

付録 C では、そのようなレイテンシについて説明します。

それらが異なる理由については、特にキャッシュミスが動作を大幅に変更するため、他のコメントが適用されます。

于 2013-04-18T15:40:13.847 に答える