我编写了两个程序,使用黎曼和计算具有一定数量矩形的函数的面积,一个是用 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/