linux數組長度-九游会j9娱乐平台
a. linux求數組長度為10000的浮點數(精確小數點右4位)計算值
既然題主沒有說要求用什麼語言,那我就用c 11實現了。
#include
#include
#include
#include
#include
#include
usingnamespacestd;
constintsize=10000;
floattable[size];
intmain(){
random_deviceengine;
uniform_real_distribution
floatsum;
for(auto&i:table){
i=dist(engine);
}
autot_start=chrono::system_clock::now();
sum=accumulate(table,table size,0.0);
autot_end=chrono::system_clock::now();
autoration=std::chrono::ration_cast
cout<<"sumofthemainthread:"<
cout<<"timeelapsed:"<
floatsum_child[4];
autofun=[&](intindex){
sum_child[index]=accumulate(table index*size/4,table (index 1)*size/4,0.0);
};
t_start=chrono::system_clock::now();
threadthrd_table[4]={
thread(fun,0),thread(fun,1),thread(fun,2),thread(fun,3)
};
for(auto&thrd:thrd_table){
thrd.join();
}
sum=0;
sum=accumulate(sum_child,sum_child 4,0.0);
t_end=chrono::system_clock::now();
ration=std::chrono::ration_cast
cout<<"sumofchildthreads:"<
cout<<"timeelapsed:"<
return0;
}
編譯:
g -std=c 11test.cc-lpthread-otest
運行:
./test
結果:
sumofthemainthread:4976.8721
timeelapsed:0ms
sumofchildthreads:4976.8721
timeelapsed:0ms
由於隨機性每次加和的數值不同,但是精確到毫秒時,時間測出來妥妥的都是零。就是數據量太小,實際運行時間在微秒量級,當然看不出來。
精度改為微秒以後:
sumofthemainthread:4957.9878
timeelapsed:113microseconds
sumofchildthreads:4957.9878
timeelapsed:560microseconds
多線程反而比單線程慢,因為啟動線程本身也需要時間。
數據量再增大1000倍:
sumofthemainthread:4999892.0000
timeelapsed:25313microseconds
sumofchildthreads:4999892.0000
timeelapsed:8986microseconds
這回看著正常多了吧