我在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;
}
答案 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()
...