Colderleo's blog Colderleo's blog
首页
Linux
C++
Python
前端
工具软件
mysql
索引
关于
GitHub (opens new window)

Colder Leo

热爱代码的打工人
首页
Linux
C++
Python
前端
工具软件
mysql
索引
关于
GitHub (opens new window)
  • bug定位的一些情形
  • c++性能调优,可能的情况
  • total-编程知识点集锦
  • hpc_common.hpp
  • memory order 内存模型
  • 类型推导之auto-template-decltype
  • 完美转发forward源码分析
  • 左值和右值,右值引用、重载 std-move,引用折叠
  • cmake用法
  • alignas、alignof、sizeof实现内存对齐分配
  • 通过宏定义控制debug打印
  • 程序耗时性能测试
    • RDTSC
    • c++ chrono三种时钟
    • C语言 clock_gettime()
  • 线程池开源项目阅读
  • C++类中包含没有默认构造函数的成员
  • C++可变参数模板
  • C++属性继承 public protected private
  • C++智能指针
  • C++导出so的方法,以及extern C 注意事项
  • 四种spin lock
  • condition_variable和unique_lock
  • dpdk、kernel bypass
  • 智能网卡solarflare、Mellanox、X10等
  • 汇编寄存器和常见指令
  • c++ 类的静态成员变量未定义
  • C++获取类成员函数地址
  • preload示例
  • C++异常安全和RAII
  • C++11单例模式
  • C++歪门邪道
  • boost-program-option用法
  • c++17通过模板获取类成员的个数
  • 通过模板实现结构体成员拷贝-按成员名匹配
  • STL学习路径
  • boost库安装使用方法
  • C++文件读写
  • linux下socket通信demo,server和client
  • makefile写法
  • RxCpp
  • C++
gaoliu
2021-10-23
目录

程序耗时性能测试

# RDTSC

  • 使用rdtsc指令: http://blog.chinaunix.net/uid-24774106-id-2779245.html (opens new window)
  • 多核时代不宜再用 x86 的 RDTSC 指令测试指令周期和时间 https://blog.csdn.net/wh8_2011/article/details/52965538 (opens new window)

# c++ chrono三种时钟

参考: http://www.cplusplus.com/reference/chrono/ (opens new window)

  • steady_clock 是单调的时钟,相当于教练手中的秒表;只会增长,适合用于记录程序耗时;为了保证只会增长,开销会大一点。

  • system_clock 是系统的时钟;因为系统的时钟可以修改;甚至可以网络对时; 所以用系统时间计算时间差可能不准。

  • high_resolution_clock 是当前系统能够提供的最高精度的时钟, 是 steady_clock 或 system_clock 的 typedef 。不同的机器上实现不一样。 using high_resolution_clock = system_clock;

# steady_clock

#include <chrono>
#include <iostream>
using namespace std;

int main() {
    using namespace chrono;
    steady_clock::time_point t1 = steady_clock::now();
    // do something
    for(int i=0; i<test_size; ++i){
        cout<<"*";
    }
    cout<<endl;
    steady_clock::time_point t2 = steady_clock::now();

    duration<double, micro> time_span = (duration<double, micro>)(t2 - t1);
    cout<<"cost us:" << (time_span).count()/test_size <<endl;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# C语言 clock_gettime()

参考: https://blog.csdn.net/qq_33706673/article/details/79039217 (opens new window)

clock_gettime(获取指定时钟的时间值)

#include <time.h>

int clock_gettime( clockid_t clock_id, struct timespec * tp );

// 获取数据的结构体定义如下:
struct timespec {
    time_t tv_sec;        /* seconds */
    long  tv_nsec;       /* nanoseconds 纳秒*/
};
1
2
3
4
5
6
7
8
9

说明:clock_id指定要获取时间的时钟,根据Posix的指定可以是以下值:

  • CLOCK_REALTIME 0 Systemwide realtime clock. 系统实时时间,随系统实时时间改变而改变,即从UTC1970-1-1 0:0:0开始计时,中间时刻如果系统时间被用户该成其他,则对应的时间相应改变。

  • CLOCK_MONOTONIC 1 Represents monotonic time. Cannot be set. 从系统启动这一刻起开始计时,不受系统时间被用户改变的影响。

  • CLOCK_PROCESS_CPUTIME_ID 2 High resolution per-process timer. 本进程到当前代码系统CPU花费的时间

  • CLOCK_THREAD_CPUTIME_ID 3 Thread-specific timer. 本线程到当前代码系统CPU花费的时间

  • CLOCK_REALTIME_HR 4 High resolution version of CLOCK_REALTIME.

  • CLOCK_MONOTONIC_HR 5 High resolution version of CLOCK_MONOTONIC.

建议使用CLOCK_MONOTONIC或者CLOCK_REALTIME来测量时间。

编辑 (opens new window)
上次更新: 2023/05/07, 17:27:54
通过宏定义控制debug打印
线程池开源项目阅读

← 通过宏定义控制debug打印 线程池开源项目阅读→

最近更新
01
通过模板实现结构体成员拷贝-按成员名匹配
05-07
02
c++17通过模板获取类成员的个数
05-01
03
avx-sse切换惩罚
04-30
更多文章>
Theme by Vdoing | Copyright © 2019-2023 Colder Leo | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×