You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多线程求和程序在笔记本比台式机运行更快的原因咨询

多线程求和程序的跨设备性能异常分析

问题概述

编写了一个计算1到n总和的多线程程序,出现反常识的性能结果:

  • 搭载Intel i5 1035G7的笔记本,多线程版本运行速度远超性能更强的Ryzen 5 5600G台式机
  • 串行版本程序则是台式机运行更快

核心代码结构

struct threadData
{
    unsigned long long *tempResult;
    long long start;
    long long end;
};

void *calculateTotal(void *arg)
{
    struct threadData *structPtr = (struct threadData *)arg;
    for (long long i = structPtr->start; i <= structPtr->end; i++)
    {
        *(structPtr->tempResult) += i;
    }
    pthread_exit(0);
}

int main(int argc, char *argv[])
{
    ...
    int numThreads = atoi(argv[1]);
    long long input = atoll(argv[2]);
    struct threadData threadDataArray[numThreads];
    unsigned long long result = 0;
    unsigned long long threadResult[numThreads];
    ...
    pthread_t threads[numThreads];

    for (int i = 0; i < numThreads; i++)
    {
        threadDataArray[i].start = i * input / (numThreads) + 1;
        threadDataArray[i].end = (i + 1) * input / (numThreads);
        threadDataArray[i].tempResult = &threadResult[i];
        int threadCreate = pthread_create(&threads[i], NULL, calculateTotal, (void *)&threadDataArray[i]);
        ...
    }
    // 等待所有线程结束
    for (int i = 0; i < numThreads; i++)
    {
        int threadJoin = pthread_join(threads[i], NULL);
        ...
    }
    // 汇总结果
    for (int i = 0; i < numThreads; i++)
    {
        result += threadResult[i];
    }
    printf("(running in parallel)\nsum is: %llu\n", result);
}

实际运行结果

Intel i5 1035G7笔记本

$ time ./ex2parallel 10 4897582469
(running in parallel)
sum is: 11993157022776859215

real    0m9.955s
user    1m0.628s
sys     0m0.010s

Ryzen 5 5600G台式机

$ time ./ex2parallel 10 4897582469
(running in parallel)
sum is: 11993157022776859215

real    0m31.003s
user    4m1.410s
sys     0m0.011s 

原因解析

  1. 编译器优化差异
    若两台机器的编译参数不同,会直接拉开性能差距。比如笔记本使用了-O2/-O3级别的优化,而台式机用默认的无优化编译(-O0),简单加法循环的优化对这类计算密集型任务的性能影响极大。

  2. CPU散热与频率限制
    Ryzen 5 5600G标称性能更强,但多线程满载时,若台式机散热能力不足,CPU会触发降频机制,实际运行频率远低于标称值。而i5 1035G7功耗更低,散热压力小,能在多线程场景下维持稳定频率,反而获得更高的实际执行效率。

  3. 超线程架构的场景适配性
    Intel的超线程技术在这类无依赖的简单计算任务中,线程间资源冲突更少,利用率更高;AMD的SMT技术在线程数量接近逻辑核心数时,可能出现更多资源竞争,导致单线程性能下降,整体执行时间变长。

  4. 操作系统调度开销
    不同系统或同系统不同版本的调度策略差异,可能导致台式机在处理10个线程时出现更频繁的线程切换,额外开销增加;而笔记本的调度器更适配该线程数量的分配,切换损耗更小。

内容的提问来源于stack exchange,提问作者Daniel Roussielle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 11:57:50