线程数量的增加会降低CPU性能

时间:2019-03-24 22:30:09

标签: multithreading

我写了一个程序,试图做一些计算。它可以运行任意数量的内核。

下面是在1,2,3,4核(在4个逻辑处理器笔记本电脑上)上运行时要执行的计算量的细分。括号中的数字显示每个线程/核心的计算。我的问题是为什么性能会迅速下降,然后线程/核数却增加?我不希望性能提高一倍,但会大大降低。当运行同一程序的4个实例在一个线程上运行时,我也观察到相同的问题,因此我知道这与程序本身无关。 最大的改进是从1线程变为2为什么是这样?

# Threads | calculations/sec
1         | 87000
2         | 129000 (65000,64000)
3         | 135000 (46000,45000,44000)
4         | 140000 (34000,34000,34000,32000)

有趣的是,我在Compute Engine的Google Cloud Platform上看到的问题完全相同,当我在16个虚拟内核平台上的16个线程上运行程序时,每个内核的性能都会下降每秒喜欢8K个状态。但是,如果我运行同一个程序的16个实例,则每个实例执行大约100K状态/ s。当我执行相同的测试但在家用笔记本电脑上的4个核上时,无论运行4个核的4个单独的.exe,我仍然可以看到相同的性能下降,我期望在GCP上看到相同的行为,但不是情况是否是因为虚拟核心?他们的行为不同吗?

重现此问题的示例代码,只需将其粘贴到控制台应用程序中,但需要将统计信息刷新20次才能使性能稳定下来,不确定其波动为何如此之大。 code example可以看到,如果使用4个线程运行该应用程序,则与4个实例(每个线程只有1个线程)相比,性能将受到显着影响。我希望启用gcServer可以解决问题,但是没有看到任何改善

0 个答案:

没有答案