c++ - 测量操作块的时间
问题描述
我正在使用 chrono 库。我的代码如下所示:
auto begin = chrono::high_resolution_clock::now();
// operations
auto end = chrono::high_resolution_clock::now();
auto elapsed = chrono::duration_cast<chrono::nanoseconds>(end - begin);
cout<<”time: „<<elapsed.count()<<endl;
它总是显示0。我做错了什么?
解决方案
要测量两次之间的差异,请根据您想要的精度将差异保存在适当的对象中:
std::chrono::duration<double, std::milli> fp_ms = end - start;//difference in milliseconds
std::chrono::duration<double, std::nano> fp_ns = end - start;//difference in nanoseconds
然后,您可以适当地将其转换为秒(或者更好的是,使用用户 chris在评论中提出的默认秒数duration<double>
建议):
#include <iostream>
#include <chrono>
int main() {
auto V = std::chrono::high_resolution_clock::now();
for(int i = 0; i < 2000; i++)
printf("%d ", i);
printf("\n");
auto Y = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> fp_s = Y - V;
std::chrono::duration<double, std::milli> fp_ms = Y - V;
std::chrono::duration<double, std::nano> fp_ns = Y - V;
auto Zm = fp_ms.count()/1000.;
auto Zn = fp_ns.count()/1000000000.;
std::cout<<"Time from seconds in seconds is " << fp_s.count()<<std::endl;
std::cout<<"Time from milliseconds in seconds is "<< Zm <<std::endl;
std::cout<<"Time from nanoseconds in seconds is "<< Zn << std::endl;
//OP's method:
auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(Y - V);
std::cout<<"time: "<<elapsed.count()<<std::endl;
}
顺便说一句,你的方法也有效。请参阅上面的编译器资源管理器链接。
推荐阅读
- tensorflow - tf.image.yuv_to_rgb 的正确用法是什么?输出失真
- javascript - 如何正确使用 ViewChild
- cmake - “重新运行 cmake 没有构建系统参数”是什么意思?
- c++ - 预期“(”之后?
- reactjs - 在输入字段中键入会为每个字符创建一个新组件
- operating-system - 操作系统 - 进程
- d3.js - 向 D3.JS 决策树路径添加标签
- python-3.x - 替换列中的值
- java - 删除和排序 LinkedList 中的项目 - Java
- reactjs - 有没有办法在 React 中使用状态来动态改变你的风格?