我写了两个程序,它们用一定数量的矩形使用黎曼和来计算函数的面积,一个用Go编写,另一个用C++编写。为什么我的程序在分配更多的线程时花费更长的时间执行?
目标是测量执行时间,并查看多线程中哪种语言更快。
我使用bash脚本4在32核心服务器(双Intel Xeon)上运行程序,以1,2,4,8,16和32线程运行它。该脚本使用time --format %U
来获取执行时间。
但是正如你在运行Go版本的结果中看到的那样,使用1个核心的时间是1.19秒,而32个核心的时间是1.69秒!我认为使用更多的内核会使计算速度更快...
我编写我的程序时发生了错误吗?时间的衡量准确吗?或者,也许结果是好的,但如何?
非常感谢您的回答!
来源:
Go代码: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
看看这里:http://stackoverflow.com/questions/16964563/why-is-multithreaded-slower – Jerome
取决于你的代码。仅仅因为你使用多线程并不意味着你会得到更快的代码。实际上,多线程代码很容易比单线程版本慢。 这是一个艰难的领域。 :) – Melkon
@Jerome我已经删除了所有打印东西,以加快速度 – Mistermatt