多线程性能问题

Posted

技术标签:

【中文标题】多线程性能问题【英文标题】:Multi-threaded performance issues 【发布时间】:2016-10-14 15:54:12 【问题描述】:

我有一个多线程程序。我们使用自己的线程池实现。首先,项目的负载足够。压缩成单线程,两个线程的程序更快。

当我们增加大于 2 的线程数时,性能开始变得糟糕。显然,我们遇到了多线程的性能问题。

然后,我们开始使用 Intel® VTune™ Amplifier XE 2017 进行性能分析,我们把这个工具集成到 VS2013 中。然后当我点击英特尔® VTune™ Amplifier XE 的星形按钮时发生了一件令人惊讶的事情,项目开始运行,插件收集数据。我们发现,当我们通过插件启动这个项目时,随着线程数的增加,性能变得更高,运行时间也缩短了。我们最多可以打开 20 个线程。而且时间缩短了20倍

那么,我们想知道,英特尔® VTune™ Amplifier XE 2017 能否改变多线程程序的运行模式?为什么会发生这种情况。 这个问题困扰我很久了。

【问题讨论】:

您认为在哪种分析类型下应用程序性能有所提高?要分析线程问题,请使用并发或锁和等待。 您不是在移动平台(例如笔记本电脑)上运行您的应用程序吗? 我的项目只能在windows上运行。它是一个win控制台应用程序。是的,所有分析类型都显示性能提高。一切都近乎完美。没有锁定和等待,很少有上下文切换,很少有核心交叉,CPU 得到充分利用。我们还使用了 Microsoft 的并发可视化工具。同样的事情发生了。即使我使用clock()函数重新计算时间,时间也缩短了! 如果你在移动平台上运行,CPU可以在监控下以更高的频率运行。 VTune 可以显示 CPU 频率,例如在高级热点中(查看平台选项卡)。您还可以使用平台的电源设置以在最高性能模式下运行。 【参考方案1】:

终于解决了这个问题,答案很简单,问题的原因是我运行程序是带debug的因为 VTune 直接从调用 *.exe 开始。

【讨论】:

以上是关于多线程性能问题的主要内容,如果未能解决你的问题,请参考以下文章

性能问题:比较多线程和多处理的案例研究

Faiss使用多线程出现的性能问题

.NET Core多线程通关 常见性能问题

QtConcurrent 与多线程 QThread 的多线程性能

多进程 MPI 与多线程 std::thread 性能

将多线程合并到 C++ 中如何提高性能,为啥?