微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

测量操作块时间

如何解决测量操作块时间

我正在使用 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

然后,您可以将其适当地转换为秒(或者更好的是,使用 user chris 在评论中提出的默认秒 duration<double> 建议):

Live on Compiler Explorer

#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;
}

顺便说一下,你的方法也有效。请参阅上面的编译器资源管理器链接。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。