为什么我的程序在分配更多线程的情况下需要更长的时间来执行?

我编写了两个程序,它们使用黎曼和来计算具有一定数量矩形的函数的面积,一个是用 Go 编写的,另一个是用 C++ 编写的。

目标是测量执行时间并查看哪种语言在多线程上更快。

我使用 bash script4 在 32 核服务器(双英特尔至强)上运行该程序,以使用 1、2、4、8、16 和 32 个线程运行它。该脚本用于time --format %U获取执行时间。

但是正如您在使用 1 个内核运行 Go 版本的结果中所看到的那样,使用 32 个内核运行 Go 版本需要 1.69 秒!我认为使用更多内核会使计算速度更快......

我在编写程序时出错了吗?时间的测量准确吗?或者也许结果很好,但如何?

预先感谢您的回答!


猛跑小猪
浏览 268回答 1
1回答

慕尼黑5688855

根据man time:U 进程直接(在用户模式下)使用的 CPU 秒总数,以秒为单位。您正在测量 CPU 秒,即每个 CPU 累计花费的时间,而不是“挂钟”秒。此度量不会因附加线程而下降,因为它与恒定的工作量成正比。另一方面,这可能会随着线程数量的增加而增加,因为每个新线程都会产生一些额外的簿记。如果要列出“实时”时间,请使用%e说明符。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go