プロファイリングを実行できるツールがいくつかあります (特に)。
それらのいくつかは、特定のコンパイル方法または特定のコンパイラを必要とします。それらのいくつかは、特定のプロセッサ アーキテクチャ (AMD/Intel など) のプロファイリングに特に優れています。
あなたはC++ 11にアクセスしているようで、いくつかのタイミングを測定したいだけならstd::chrono
.
#include <chrono>
#include <iostream>
class high_resolution_timer
{
private:
typedef std::chrono::high_resolution_clock clock;
clock::time_point m_time_point;
public:
high_resolution_timer (void)
: m_time_point(clock::now()) { }
void restart (void)
{
m_time_point = clock::now();
}
template<class Duration>
Duration stopover (void)
{
return std::chrono::duration_cast<Duration>
(clock::now()-m_time_point);
}
};
int main (void)
{
using std::chrono::microseconds;
high_resolution_timer timer;
// do stuff here
microseconds first_result = timer.stopover<microseconds>();
timer.restart();
// do other stuff here
microseconds second_result = timer.stopover<microseconds>();
std::cout << "First took " << first_result.count() << " x 10^-6;";
std::cout << " second took " << second_result.count() << " x 10^-6.";
std::cout << std::endl;
}
ただし、実行時間全体の数ミリ秒を最適化してもほとんど意味がないことに注意してください (プログラムの実行時間が 1 秒以上になる場合)。代わりに、コード内で非常に反復的なイベントの時間を計る必要があります (存在する場合、または少なくともボトルネックとなるイベントがある場合)。これらが大幅に改善された場合 (これはミリ秒またはマイクロ秒単位である可能性があります)、全体的なパフォーマンスも向上する可能性があります。