1. 程式人生 > >“模擬退火演算法的並行化”之“工欲善其事,必先利其器”

“模擬退火演算法的並行化”之“工欲善其事,必先利其器”

孫子曰:“夫未戰而廟算勝者,得算多也,未戰而廟算不勝者,得算少也。多算勝,少算不勝,而況於無算乎!”,孫子又曰:“知己知彼,百戰不殆;不知彼而知己,一勝一負;不知彼,不知己,每戰必殆。”

我們工作時使用的平臺是Linux/GNU系統,公司有個專門給我們軟體組使用的伺服器,名字叫做Blade,看來應該是個刀鋒伺服器啦,大家可以腦補一下刀鋒伺服器陣列的畫面。這個伺服器不賴,用top,然後按1,可以看到她如下:

Blade's top figure

看官可以看到她有十二個核,500+GB記憶體。使用

% cat /proc/cpuinfo | less
...
model name  :   Intel(R) Xeon(R) CPU E5-2643
v2 @ 3.50GHz cpu MHz : 3500.230 cache_size : 25600 KB cache_alignment : 64 ...

可以看到這臺伺服器CPU的具體引數。效能不錯,但是作為多執行緒測試平臺,不行!

為什麼不行?
且聽我慢慢道來。當時大家發現這個平臺上面測得的時間不是穩定的,但主管這個專案的人並不知道問題出在了哪裡,而且一直使用這個平臺進行測試,所以他的測試資料也只具有參考價值了。正巧我們組又搭建了兩個伺服器TM1和TM2,顧名思義,Timing Machine,主要用於測試時間效能的伺服器啦,但這個系統不如Blade,top資料如下:

TM1's top figure

她只有4個核,記憶體也只有30GB左右,使用

$ cat /proc/cpuinfo | less
...
model name  : Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz
cpu MHz     : 4000.112
cache size  : 8192 KB
cache_alignment : 64
...

快取沒有Blade大,但是主頻稍高。