我是第一次玩 pthreads,在我的机器上运行时发现了一些奇怪的东西。
我有一个带有 2 个物理内核和 4 个虚拟内核的 Intel i5。
当使用 2 个线程运行我的程序时,我获得了大约两倍的性能,但是当使用 4 个线程运行时,我获得了与两个线程相同的性能。为什么会这样?
2 个线程的结果: 真正的 0m9.335s 用户 0m18.233s 系统 0m0.132s
4 个线程的结果: 真正的 0m9.427s 用户 0m34.130s 系统0m0.180s
编辑:代码是完全可并行化的,线程在没有任何共享资源的情况下独立运行。
最佳答案
因为您实际上只有 2 个内核。 Hyper-threading不会神奇地为您再创建 2 个核心。超线程可以在 CPU 上运行 4 个线程,但不能同时运行。它仍然会在两个物理内核上分配线程,并在执行管道中来回切换线程。
您预期的性能提升最多可达 30%。
关于c - pthread 在使用虚拟核心时没有提供性能提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14419868/