2015-11-26 23 views
0

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

+0

看看这里:http://stackoverflow.com/questions/16964563/why-is-multithreaded-slower – Jerome

+1

取决于你的代码。仅仅因为你使用多线程并不意味着你会得到更快的代码。实际上,多线程代码很容易比单线程版本慢。 这是一个艰难的领域。 :) – Melkon

+0

@Jerome我已经删除了所有打印东西,以加快速度 – Mistermatt

回答

9

根据man time

的该过程直接使用(在用户模式),以秒为CPU-秒ù总数。

您正在测量CPU-秒,即每个CPU累积花费的时间,而不是“wallclock”秒。这项措施不会因为额外的线程而下降,因为它与恒定的工作量成正比。另一方面,这可能会随着线程数量的增加而增加,因为每个新线程都会产生一些额外的簿记。

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

+0

我已经将%U提供的输出除以所使用的内核数量,现在用%e给出了比以前更大的时间 – Mistermatt

相关问题