我编写了两个程序,使用Riemann和计算具有一定数量矩形的函数区域,一个用Go编写,另一个用C ++编写。
目标是测量执行时间并查看多线程中哪种语言更快。
我使用bash脚本4在32核服务器(双Intel Xeon)上运行该程序,以使用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
答案 0 :(得分:9)
根据man time
:
U进程直接使用的CPU秒数(在用户模式下),以秒为单位。
您正在测量CPU秒数,即每个CPU累计消耗的时间,而不是“wallclock”秒。这个度量不会随着额外的线程而下降,因为它与工作量是恒定的。另一方面,这可能会增加线程数,因为每个新线程都会产生一些额外的簿记。
如果要列出“实际”时间,请使用%e
说明符。