为什么在1核VM上运行4线程程序比在4核的相同VM上运行更快?

时间:2019-02-03 22:57:08

标签: c multithreading time parallel-processing pthreads

  • 我使用的i7 CPU具有4个内核(8个逻辑内核),一个debian linux
  • VM也是debian linux
  • 该程序是使用gcc编译的,没有进行特殊优化(默认编译设置)
  • 我循环了1000次程序。当VM具有4个内核时,它花费的时间是原来的2倍以上。为什么?

注意:我运行的程序是C程序,并生成4个线程(pthread),并在进行少量计算后加入它们。它具有并行性(不是并发性)。

2 个答案:

答案 0 :(得分:0)

在I7中,所有内核都共享L3缓存。如果执行的额外行导致L3缓存上的更多缓存未命中,则可以通过添加内核来降低速度。

答案 1 :(得分:0)

有些问题令人尴尬地是并行的;有些是“令人尴尬的序列”。您可能会碰到后者,但是如果不推送代码,我们只能猜测。

BigLock解决方案(例如树)只能通过锁定整个结构来更新列表,而不能从多个CPU中受益。更糟糕的是,多个CPU可能会在锁周围造成一堆颠簸,却一无所获。