有糖跟我走吗 2022-03-10 19:01
浏览 29
已结题

关于I7 11800H效率不如R7 5800H

问题遇到的现象和发生背景

单纯的想测试一下多线程程序需要开几个线程能够多少的效率,但是在11800H和5800H上测试,发现5800H的计算速度远快于11800H,该程序只涉及到计算,应该与内存、硬盘没有过多关系,这是我测试的结果,显然5800H的平均速度更快。

img


不知道有没有大犇能解释一下,理论上应该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;
}
运行结果及报错内容

img

我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 3月18日
    • 创建了问题 3月10日

    悬赏问题

    • ¥15 软件定义网络mininet和onos控制器问题
    • ¥15 微信小程序 用oss下载 aliyun-oss-sdk-6.18.0.min client报错
    • ¥15 ArcGIS批量裁剪
    • ¥15 labview程序设计
    • ¥15 为什么在配置Linux系统的时候执行脚本总是出现E: Failed to fetch http:L/cn.archive.ubuntu.com
    • ¥15 Cloudreve保存用户组存储空间大小时报错
    • ¥15 伪标签为什么不能作为弱监督语义分割的结果?
    • ¥15 编一个判断一个区间范围内的数字的个位数的立方和是否等于其本身的程序在输入第1组数据后卡住了(语言-c语言)
    • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
    • ¥15 android 集成sentry上报时报错。