c++ - 为什么我的程序在分配更多线程的情况下执行时间更长?

标签 c++ multithreading bash c++11 go

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

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

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

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

我的程序写错了吗?时间的计量准确吗?或者也许结果不错,但如何?

预先感谢您的回答!

来源:

代码:https://github.com/Mistermatt007/Benchmark-go-vs-cpp/blob/master/CalculGo/Calcul.go

C++ 代码:https://github.com/Mistermatt007/Benchmark-go-vs-cpp/blob/master/CalculCpp/Calcul.cpp

启动脚本:https://github.com/Mistermatt007/Benchmark-go-vs-cpp/blob/master/script/Launch.sh

黎曼和:http://mathworld.wolfram.com/RiemannSum.html

第一个结果:https://github.com/Mistermatt007/Benchmark-go-vs-cpp/blob/master/results/GoVSCpp.txt

最佳答案

根据人工时间:

U Total number of CPU-seconds that the process used directly (in user mode), in seconds.

您测量的是 CPU 秒数,即每个 CPU 累计花费的时间,而不是“挂钟”秒数。这个度量不会随着线程的增加而减少,因为它与恒定的工作量成正比。另一方面,这可能会随着线程数量的增加而增加,因为每个新线程都会产生一些额外的簿记。

如果您想列出“实时”时间,请使用 %e 说明符。

关于c++ - 为什么我的程序在分配更多线程的情况下执行时间更长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33934841/

相关文章:

java - 使用仅设置了第二个的日历对象启动任务

java - 使用线程以不同间隔输出消息

linux - 如何在 expect 中设置 bash 变量或将变量从 expect 返回到 bash

sqlite - 如何知道sqlite文件中有什么表?

c++ - libcurl (curlpp) 中的换行符问题

c++ - std::this_thread::sleep_for sleep 时间过长

C++ 全局对象

iphone - 打开持久连接

在c中为linux创建一个新线程?

bash - Awk:将输出格式化为 json