gpt4 book ai didi

c++ - 线程构造的性能成本 : missed optimisations and memory allocation

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:50:41 29 4
gpt4 key购买 nike

我们遇到了一种奇怪的现象,其中包含头文件会导致某些内存分配密集型工作负载的性能下降 5-10%。

这个头文件将一个线程池声明为一个全局变量。该线程池从未在应用程序中以任何容量(还)使用过。也就是说,除了在程序启动时创建这个静态线程池外,应用程序完全是单线程的。一旦标题被移除,性能损失就会消失。

从一些研究来看,由于某些编译器优化不再可能,多线程应用程序似乎会导致一些性能损失。每当以任何形式或容量实例化与线程相关的构造时,是否有可能关闭此类优化?

或者,由于在执行大量内存分配时性能损失似乎最为明显,编译器是否有可能在编译/链接阶段意识到线程构造已实例化,因此它切换到线程安全内存分配器?

这发生在 Linux 64 位工作站上,同时具有 GCC 和 clang。正在使用来自 C++11 的标准线程原语。

编辑 我还应该提一下,根据我们的测试,当使用 tcmalloc 分配器而不是默认分配器时,性能差异似乎消失了。

最佳答案

多线程 malloc 和其他一些已检查的函数会产生锁定成本,这与您所看到的一致。我希望 malloc 实现通过线程头文件中的某些指令更改为线程(和锁定)版本。

这是一个合理的成本,并且会导致程序的输出更易于理解,但代价是单线程示例的性能发生奇怪的变化。

关于c++ - 线程构造的性能成本 : missed optimisations and memory allocation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31212943/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com