当前位置:   iOS > 正文

奇怪的基准测试结果

c++,benchmarking,gcc,ios,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员工具,站长工具

我写了以下基准:

#include  // cout
#include    // pow
#include    // high_resolution_clock    

using namespace std;
using namespace std::chrono;

int64_t calculate(int);

int main()
{
    high_resolution_clock::time_point t1, t2;

    // Test 1
    t1 = high_resolution_clock::now();
    calculate(200);
    t2 = high_resolution_clock::now();

    cout << "RUNTIME = " <<  duration_cast(t2 - t1).count() << " nano seconds" << endl;

    // Test 2   
    t1 = high_resolution_clock::now();
    calculate(200000);
    t2 = high_resolution_clock::now();

    cout << "RUNTIME = " <<  duration_cast(t2 - t1).count() << " nano seconds" << endl;
}

int64_t calculate(const int max_exponent)
{
    int64_t num = 0;

    for(int i = 0; i < max_exponent; i++)
    {
        num += pow(2, i);
    }

    return num;
}

在Odroid XU3上运行此基准测试时,将生成以下输出(8次运行):

RUNTIME TEST 1 = 1250 nano seconds
RUNTIME TEST 2 = 1041 nano seconds

RUNTIME TEST 1 = 1292 nano seconds
RUNTIME TEST 2 = 1042 nano seconds

RUNTIME TEST 1 = 1250 nano seconds
RUNTIME TEST 2 = 1083 nano seconds

RUNTIME TEST 1 = 1292 nano seconds
RUNTIME TEST 2 = 1083 nano seconds

RUNTIME TEST 1 = 1209 nano seconds
RUNTIME TEST 2 = 1084 nano seconds

RUNTIME TEST 1 = 1166 nano seconds
RUNTIME TEST 2 = 1083 nano seconds

RUNTIME TEST 1 = 1292 nano seconds
RUNTIME TEST 2 = 1042 nano seconds

RUNTIME TEST 1 = 1166 nano seconds
RUNTIME TEST 2 = 1250 nano seconds

RUNTIME TEST 1 = 1250 nano seconds
RUNTIME TEST 2 = 1250 nano seconds

第二个指数是第一个指数的1000倍.为什么第二次通话有时会更快完成?

我使用GCC(4.8)作为编译器和-Ofast标志.

更新:我可以在我的i7 4770k上重现类似的行为.



1> Jerry Coffin..:

简短的回答是"死代码消除".编译器发现你从不使用调用函数的结果(并且函数没有副作用),所以它只是取消了调用函数.

打印出函数的结果,事情发生了一些变化.例如:

Ignore: -9223372036854775808    RUNTIME = 0 nano seconds
Ignore: -9223372036854775808    RUNTIME = 23001300 nano seconds

修改后的代码,以防您关心:

#include  // cout
#include    // pow
#include    // high_resolution_clock    

using namespace std;
using namespace std::chrono;

int64_t calculate(int);

int main() {
    high_resolution_clock::time_point t1, t2;

    // Test 1
    t1 = high_resolution_clock::now();
    auto a = calculate(200);
    t2 = high_resolution_clock::now();
    std::cout << "Ignore: " << a << "\t";

    cout << "RUNTIME = " << duration_cast(t2 - t1).count() << " nano seconds" << endl;

    // Test 2   
    t1 = high_resolution_clock::now();
    auto b = calculate(200000);
    t2 = high_resolution_clock::now();
    std::cout << "Ignore: " << b << "\t";

    cout << "RUNTIME = " << duration_cast(t2 - t1).count() << " nano seconds" << endl;
}

int64_t calculate(const int max_exponent) {
    int64_t num = 0;

    for (int i = 0; i < max_exponent; i++) {
        num += pow(2, i);
    }

    return num;
}

从那里你有一个小的细节,你已经超出范围int64_t(很多次)给出未定义的行为 - 但至少有这个是合理的希望打印出来的时间反映了执行指定计算的时间.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/iOS/detail/8769
推荐阅读
  • 如何解决《CordovaiOSApp在LaunchStoryboard和FirstScreen之间获得白色Flash》经验,为你挑选了0个好方法。ios,cordova,ipad,webview,DevBox,在线流程图,编程,编程问答,程... [详细]

  • 如何解决《使用boost::function和boost::bind》经验,为你挑选了1个好方法。c++,boost,ios,linux,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,un... [详细]

  • 如何解决《从推送重置应用程序图标上的徽章》经验,为你挑选了1个好方法。push-notification,apple-push-notifications,ios,parse-platform,swift,DevBox,在线流程图,编程,编... [详细]

  • 如何解决《这个简单的C++程序使用<locale>是否正确?》经验,为你挑选了1个好方法。c++,locale,clang,c++11,ubuntu,ios,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具... [详细]

  • 如何解决《C++sizeofVector是24?》经验,为你挑选了1个好方法。c++,vector,ios,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端... [详细]

  • 如何解决《如何在Google地图目标c上旋转自定义标记图像》经验,为你挑选了1个好方法。google-maps,objective-c,ios,go,服务器,git,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,j... [详细]

  • 如何解决《iOS片段中的Android片段类似于swift》经验,为你挑选了1个好方法。android,ios,android-fragments,swift,容器,ipad,iphone,xcode,DevBox,在线流程图,编程,编程问... [详细]

  • 如何解决《优化Mat通道的OR》经验,为你挑选了2个好方法。c++,opencv,ios,scala,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工... [详细]

  • 如何解决《如何在Mosquitto中同时启用TCP和Web套接字?》经验,为你挑选了1个好方法。sockets,tcp,mqtt,mosquitto,websocket,android,ios,服务器,DevBox,在线流程图,编程,编程问... [详细]

  • 如何解决《隐藏视图不起作用-迅速》经验,为你挑选了1个好方法。ios,swift,go,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员工... [详细]

  • 如何解决《为什么使用这个全局`operator<<`无法编译?》经验,为你挑选了1个好方法。c++,ios,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开... [详细]

  • 如何解决《Xamarin表单ListViewCachingStrategy》经验,为你挑选了0个好方法。ios,xamarin,xamarin.mac,xamarin-studio,xamarin.forms,DevBox,在线流程图,编程... [详细]

  • 如何解决《保留视图之间上载的文件》经验,为你挑选了1个好方法。spring,file-upload,spring-mvc,mvc,https,ios,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维... [详细]

  • 如何解决《如何在Swift中列出符合协议的所有类?》经验,为你挑选了1个好方法。reflection,ios,swift,swift2,xcode,objective-c,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工... [详细]

  • 如何解决《Apple-app-site-association文件不会下载》经验,为你挑选了1个好方法。ios,ios-universal-links,https,服务器,xcode,ruby,json,DevBox,在线流程图,编程,编程... [详细]

  • 如何解决《向UITableViewCellSwift添加渐变背景》经验,为你挑选了1个好方法。iphone,uitableview,ios,swift,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二... [详细]

  • 如何解决《如何开发一个自定义的UICollectionViewLayout,它具有与自定义单元格交错的列?》经验,为你挑选了1个好方法。ios,swift,android,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工... [详细]

  • 如何解决《QmlTextField数字键盘》经验,为你挑选了1个好方法。keyboard,textfield,qml,ios,android,git,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维... [详细]

  • 如何解决《Swiftsortinplace二进制运算符>不能应用于两个nsnumber操作数》经验,为你挑选了1个好方法。ios,swift,scala,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json... [详细]

  • 如何解决《iOS可重用组件》经验,为你挑选了1个好方法。cocoa-touch,ios,注入,cocoa,git,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具... [详细]

相关标签
  

闽ICP备14008679号