クロックを用いた時間計測
クロックを用いた時間計測のライブラリを作りました。
サポート対象
C言語規格
- C11
コンパイラ
- Clang
- GCC
OS
- Linux
- macOS
あとは知らん
ロジック
- Clang の時は
__builtin_readcyclecounter()
を用いる
- GCC でかつ x86 アーキテクチャの時には,
__rdtsc()
を用いる
- GCC でかつ Linux の時には,
timespec_get()
を用いる
__builtin_readcyclecounter()
を用いる__rdtsc()
を用いるtimespec_get()
を用いるあとは知らん
ソースコード
clockcycle.h
#ifndef CLOCKCYCLE_H
#define CLOCKCYCLE_H
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
#ifdef __clang__
static inline uint64_t now() {
return __builtin_readcyclecounter();
}
#elif defined(__GNUC__)
#if defined(__i386__) || defined(__x86_64__) || defined(__amd64__)
#include <x86intrin.h>
static inline uint64_t now() {
return __rdtsc();
}
#elif defined(__linux__)
#include <time.h>
static inline uint64_t now() {
struct timespec ts = {0, 0};
timespec_get(&ts, TIME_UTC);
return (uint64_t)(ts.tv_sec) * 1000000000 + ts.tv_nsec;
}
#else
#error unsupported architecture
#endif
#endif
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // CLOCKCYCLE_H
おわりに
clockcycle.h
#ifndef CLOCKCYCLE_H
#define CLOCKCYCLE_H
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
#ifdef __clang__
static inline uint64_t now() {
return __builtin_readcyclecounter();
}
#elif defined(__GNUC__)
#if defined(__i386__) || defined(__x86_64__) || defined(__amd64__)
#include <x86intrin.h>
static inline uint64_t now() {
return __rdtsc();
}
#elif defined(__linux__)
#include <time.h>
static inline uint64_t now() {
struct timespec ts = {0, 0};
timespec_get(&ts, TIME_UTC);
return (uint64_t)(ts.tv_sec) * 1000000000 + ts.tv_nsec;
}
#else
#error unsupported architecture
#endif
#endif
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // CLOCKCYCLE_H
本当は ARM についても下記を参考にクロックを読み取る命令のコードに書き換えたい。
Author And Source
この問題について(クロックを用いた時間計測), 我々は、より多くの情報をここで見つけました https://qiita.com/zacky1972/items/3dcb4b06fa6541344aaa著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .