Skip to content

Commit

Permalink
fix timer (#120)
Browse files Browse the repository at this point in the history
  • Loading branch information
ei1333 authored Jun 9, 2024
1 parent ea72eb1 commit 6b121a2
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 7 deletions.
34 changes: 32 additions & 2 deletions docs/timer.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
---
title: Timer
documentation_of: //other/timer.hpp
---

## 概要
rdtsc (Read Time Stamp Counter) 命令を用いると CPU クロックごとに加算される 64 bit のタイムスタンプカウンタの値を得ることができる. マラソンするときにタイマーとしてよく用いられるらしい.

CPUのクロック周波数がわかれば, カウンタの値から実行時間を推定することができる. 参考までにAtCoder では 3.00GHz, Codeforces では 3.60GHz, yukicoder では 2.3GHz (2020/06/30現在).
CPUのクロック周波数がわかれば, カウンタの値から実行時間を推定することができる. 参考までにAtCoder では 2.90GHz, Codeforces では 3.60GHz, yukicoder では 2.3GHz (2024/06/09現在).

## ベンチマーク

$10^8$ 回呼び出したときの実行時間の比較. 間違っていたらごめんなさい.

AtCoder:
Expand All @@ -28,3 +29,32 @@ yukicoder:
- `chrono::high_resolution_clock::now()`: 3330 ms
- `rdtsc`: 1020 ms

# コンストラクタ

```cpp
Timer()
```

# reset

```cpp
void reset()
```

タイマーを初期化します。

# get_second

```cpp
inline double get_second() const
```

経過時間を秒数で返します。

# get_cycle

```cpp
inline uint64_t get_cycle() const
```

経過時間をクロック数で返します。
6 changes: 1 addition & 5 deletions other/timer.hpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
/**
* @brief Timer(タイマー)
*
*/
constexpr uint64_t CYCLES_PER_SEC = 3000000000; // AtCoder
constexpr uint64_t CYCLES_PER_SEC = 2900000000; // AtCoder
// constexpr uint64_t CYCLES_PER_SEC = 3600000000; // Codeforces
// constexpr uint64_t CYCLES_PER_SEC = 2300000000; // yukicoder
struct Timer {
Expand Down

0 comments on commit 6b121a2

Please sign in to comment.