[cfe-commits] [PATCH] Add __builtin_readcyclecounter
Howard Hinnant
hhinnant at apple.com
Sun Aug 5 06:52:35 PDT 2012
On Aug 4, 2012, at 11:28 PM, Hal Finkel <hfinkel at anl.gov> wrote:
> Hello,
>
> Please review this patch which adds a __builtin_readcyclecounter()
> intrinsic. LLVM provides i64 @llvm.readcyclecounter(), but clang does
> not have a corresponding intrinsic.
>
> Thanks in advance,
> Hal
Just fyi for everyone, here is how to hook such a builtin up to <chrono>, making it very convenient to use, at least if you know at compile time the speed of the machine you're running on:
#include <chrono>
namespace x
{
struct clock
{
typedef unsigned long long rep;
typedef std::ratio<1, 2800000000> period; // My machine is 2.8 GHz
typedef std::chrono::duration<rep, period> duration;
typedef std::chrono::time_point<clock> time_point;
static const bool is_steady = true;
static time_point now() noexcept
{
return time_point(duration(__builtin_readcyclecounter()));
}
};
} // x
Now you can say things like:
auto t0 = x::clock::now();
// do stuff
auto t1 = x::clock::now();
using namespace std::chrono;
std::cout << "That took " << (t1-t0).count() << " clock cycles ("
<< duration_cast<nanoseconds>(t1-t0).count() << " ns).\n";
That took 18 clock cycles (6 ns).
Howard
More information about the cfe-commits
mailing list