gpt4 book ai didi

c++ - 多线程不利用多核?

转载 作者:可可西里 更新时间:2023-11-01 12:09:16 27 4
gpt4 key购买 nike

我的电脑是双核core2Duo。我已经在应用程序的缓慢区域实现了多线程,但我仍然注意到 CPU 使用率从未超过 50%,并且在多次迭代后仍然滞后。这是正常的吗?我希望它能让我的 cpu 达到 100%,因为我将它分成 4 个线程。为什么它仍然可以限制在 50%?

谢谢

参见 What am I doing wrong? (multithreading)

对于我的实现,除了我修复了该代码存在的问题

最佳答案

查看您的代码,您在紧密循环中进行了大量分配——在每次迭代中,您动态分配两个双元素 vector ,然后将它们推回结果 vector (从而复制这些 vector );最后一次推回偶尔会导致重新分配和 vector 内容的拷贝。

堆分配相对较慢,即使您的实现对小块使用快速、固定大小的分配器也是如此。在最坏的情况下,通用分配器甚至可能使用全局锁;如果是这样,它将抹杀您可能从多线程中获得的任何 yield ,因为每个线程将花费大量时间等待堆分配。

当然,分析会告诉您是堆分配限制了您的性能还是其他原因。我会提出两个具体建议来减少您的堆分配:

  • 由于内部 vector 的每个实例都有两个元素,您应该考虑使用 std::array(或 std::tr1::array升压::数组); array“容器”不为其元素使用堆分配(它们像 C 数组一样存储)。
  • 由于您大致知道要将多少元素放入结果 vector 中,因此您可以在插入这些元素之前reserve()足够的空间。

关于c++ - 多线程不利用多核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3191331/

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