Ubuntu和Windows的巨大运行时差?

时间:2015-03-08 15:10:08

标签: c++ ubuntu-14.04 windows-7-x64

我在CodeBlocks上运行以下代码。在Windows和Ubuntu平台上,我安装了最新的CodeBlock。

但是当我执行以下代码时,程序的运行时间差别很大。例如,当我设置K = 1000(#Number of inputs)时,则在两个平台上运行时间为2.7秒(由CodeBlocks控制台显示),但是当K更改为10000时,则在Windows上为24秒,在Ubuntu中为257秒。任何人都可以建议可能出现的问题吗?

 #include <iostream>
    #include <cmath>
    #include <cstdlib>
    #include <vector>

    using namespace std;

    #define denominator 2
    #define getDist(a,b) exp(sqrt((a-b)*(a-b))/denominator)

    int main() {
        cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
        int K = 10000;
        int m = 10;
        //float data[4] = {1,2,3,4};
        //float dist[K*(K-1)/2];
        std::vector<float> dist(m*K);
        int count = 0;
        std::vector<float> check(m*K);

        for (int t=0;t<m*K;t++)
        {
            check[t] = (float)(rand() % 5);
            dist[t] = 0;
        }
    cout<<"Generated";
    for(int i=0; i<m*K; i++){
            for(int j =i+1;j<m*K;j++){
                int l = getDist(check[i],check[j]);

            }
        }


        return 0;
    }

1 个答案:

答案 0 :(得分:1)

你没有做任何“错误”。要在Linux上获得与Windows相似的结果,请按照ChronoTrigger的建议启用优化。

请注意,两个操作系统(编译器/库)几乎可以肯定地实现数学函数rand(),exp()和sqrt()。

$ g++ -O3 -pg test.cc ; time ./a.out
!!!Hello World!!!
Generated
real    0m31.878s

gprof output:
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  ms/call  ms/call  name    
 41.31      0.96     0.96                             main
 23.67      1.51     0.55 200000000     0.00     0.00  std::vector<float, std::allocator<float> >::operator[](unsigned long)
 23.67      2.07     0.55 49995000     0.00     0.00  std::sqrt(float)
  5.16      2.19     0.12 49995000     0.00     0.00  std::exp(float)
  1.94      2.23     0.05        2    22.56    22.56  std::vector<float, std::allocator<float> >::~vector()
...