如何比较两段代码的性能

Pou*_*uya 9 c++ optimization flops

我和编程领域的几个人进行了友好的竞争,最近我们对编写高效代码非常感兴趣.我们的挑战是尝试不惜任何代价(可读性,可重用性等)优化代码(在cpu时间和复杂性方面).

问题是,现在我们需要比较我们的代码,看看哪种方法比其他方法更好,但我们不知道任何工具用于此目的.

我的问题是,是否有一些(任何!)工具将一段代码作为输入并计算运行它所需的触发器或CPU指令的数量?有没有工具可以衡量代码的最佳性?

PS目标语言是c ++,但很高兴知道这些工具是否也存在于java中.

Ker*_* SB 11

这是一个小C++ 11秒表,我喜欢在需要时间时推出:

#include <chrono>
#include <ctime>

template <typename T> class basic_stopwatch
{
    typedef T clock;
    typename clock::time_point p;
    typename clock::duration   d;

public:
    void tick()  { p  = clock::now();            }
    void tock()  { d += clock::now() - p;        }
    void reset() { d  = clock::duration::zero(); }

    template <typename S> unsigned long long int report() const
    {
        return std::chrono::duration_cast<S>(d).count();
    }

    unsigned long long int report_ms() const
    {
        return report<std::chrono::milliseconds>();
    }

    basic_stopwatch() : p(), d() { }
};

struct c_clock
{
    typedef std::clock_t time_point;
    typedef std::clock_t duration;
    static time_point now() { return std::clock(); }
};

template <> unsigned long long int basic_stopwatch<c_clock>::report_ms() const
{
  return 1000. * double(d) / double(CLOCKS_PER_SEC);
}

typedef basic_stopwatch<std::chrono::high_resolution_clock> stopwatch;
typedef basic_stopwatch<c_clock> cstopwatch;
Run Code Online (Sandbox Code Playgroud)

用法:

stopwatch sw;
sw.tick();

run_long_code();

sw.tock();
std::cout << "This took " << sw.report_ms() << "ms.\n";
Run Code Online (Sandbox Code Playgroud)

在任何体面的实现中,默认值high_resolution_clock应该给出非常准确的时序信息.