我寫了兩個程序,它們用一定數量的矩形使用黎曼和來計算函數的面積,一個用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