问题遇到的现象和发生背景
单纯的想测试一下多线程程序需要开几个线程能够多少的效率,但是在11800H和5800H上测试,发现5800H的计算速度远快于11800H,该程序只涉及到计算,应该与内存、硬盘没有过多关系,这是我测试的结果,显然5800H的平均速度更快。
不知道有没有大犇能解释一下,理论上应该11800H更快,至少不会慢这么多,11800H是机械革命的Z3PRO,5800H是联想的thinkbook14P。
关于测试代码只是单纯的计算,看完成计算的次数
问题相关代码,请勿粘贴截图
#include<thread>
#include<chrono>
#include<iostream>
#include<atomic>
#include<cstdlib>
#include<ctime>
#include<vector>
#include<unistd.h>
#include<string>
//#define thread_num 4
#define sec 10
std::vector<std::thread> vec;
std::vector<int> vec_state;
std::atomic<int64_t> tot{0};
typedef std::chrono::high_resolution_clock Clock;
int32_t thread_num=0;
std::string getTime()
{
time_t timep;
time (&timep); //获取time_t类型的当前时间
char tmp[64];
strftime(tmp, sizeof(tmp), "%Y-%m-%d %H:%M:%S",localtime(&timep) );//对日期和时间进行格式化
return tmp;
}
void task(int id)
{
int x=0;
int mod=rand();
while(1)
{
for(int i=1;i<=100000;i++)
{
x=x+i;
x%=mod;
}
if(vec_state[id]==1) return;
++tot;
}
}
int main(int argc,char* argv[])
{
srand((unsigned)time(NULL));
thread_num=atoi(argv[1]);
std::cout<<thread_num<<'\t'<<'\t';
for(int i=0;i<thread_num;i++)
{
vec.emplace_back(std::thread(task,i));
vec_state.emplace_back(0);
}
auto t1=Clock::now();//计时开始
tot=0;
sleep(60);
double _tot=tot;
auto t2=Clock::now();//计时结束
std::cout<<(std::chrono::duration_cast<std::chrono::nanoseconds>(t2-t1).count()/1e9)<<'\t'<<'\t'<<_tot<<'\t'<<'\t';
double avg=_tot/(std::chrono::duration_cast<std::chrono::nanoseconds>(t2-t1).count()/1e9);
std::cout<<avg<<std::endl;
for(int i=0;i<thread_num;i++)
{
vec_state[i]=1;
vec[i].detach();
}
return 0;
}