天天看點

C#版本的CPU性能測試

本文不講c#開發技巧,隻測試同樣的代碼在不同cpu的機器上的運作速度。結果包括普通版本和并行版本的對比,友善大家選配電腦,對“性能”有個感性的認識。

    字元串相關度計算是文本處理和資料挖掘中一個不可或缺的方法,例如論文查重等。levenshtein distance可以用來比較兩個字元串的相似度,即兩個字元串之間的“距離”。這個“距離”其實就是從源字元串變換到目标字元串需要進行的删除、插入和替換的次數。

  有不少該算法的改進版本,可大幅度提升效率,不過這不是本文的目的。我們的目的就是看看該算法在不同的機器下到底能跑多快,再看并行優化後又能跑多快。該算法基本隻對cpu性能敏感,很适合做測試。

   我們随機生成1000個1000長度的字元串,并比較字元串相關度。示例工程可在文末找到,由于需要并行計算,需要vs2010,.net4.0支援。

  代碼如下:

  廢話不說,上測試結果。

      以上四種環境對應不同開發階段的軟體性能,對開發的性能調優有指導價值。

      電腦組態如下:

C#版本的CPU性能測試

測試結果如下,數值為執行時間,機關為ms

C#版本的CPU性能測試
C#版本的CPU性能測試

    值得注意的是,在不同代碼下四種環境的結果是很不相同的。一般情況下軟體直接運作要比調試快很多。release模式比debug模式快幾倍。但在這個示例下,直接運作和調試卻沒有特别明顯的差別,希望大神能給予解答。

   另外,并行算法比普通的串行算法快了四倍。符合四核cpu的實際情況。

   接下來,我們來看不同cpu下的性能差別。為簡化測試,以下所有結果都采用release運作模式。對比不同cpu在串行/并行下的速度差別。

  結果都是以執行時間ms表示的,值越小越好。

C#版本的CPU性能測試

難得找到amd的筆記本電腦,該cpu已經停産很久了,三年前的cpu不負衆望,成績還不錯,當然并行成績比伺服器慢了十幾倍。

C#版本的CPU性能測試
C#版本的CPU性能測試

   雖然比t8100的頻率低,但新一代酷睿i3還是完虐t8100的。

C#版本的CPU性能測試

回想06年底,能買到酷睿e6300是剛上高三的我最大的夢想,現在看來是在不敢恭維,并行速度和i7比差了四倍不止。這款當時很牛的桌面cpu連現在低端的筆記本cpu都不如。

C#版本的CPU性能測試

  超級本的性能還是不錯的,也展現出了雙核的優勢。在“節能模式”下,cpu不會自動睿頻,隻有1.7ghz。結果慘不忍睹。超級本一般情況下做開發足夠了。

C#版本的CPU性能測試

不得不說,标壓筆記本的i5都可以完虐超低壓的i7.  誰讓超級本必須做到那麼薄呢? 價格還死貴。如果考慮性能和成本效益,還是選标壓cpu吧。

C#版本的CPU性能測試

雖然是i3,但在串行下與同頻的i7幾乎無差別,當然由于是雙核的,并行速度正好是串行的一半。

C#版本的CPU性能測試

實在沒有找到2600k的超頻結果,就先用2600默頻湊數吧,單核性能中規中矩。

C#版本的CPU性能測試

寝室桌上型電腦的跑分,看來頻率是王道啊,在4.2g輕松秒殺i7 2600。

C#版本的CPU性能測試

伺服器六核心cpu看似高端,但在這個程式下,還是無法與2600甚至2130抗衡,并行加速比4.66, 六核心有點小吃虧。

C#版本的CPU性能測試

  這幾乎是我目前看到的最好結果, 該cpu在串行模式下就達到了11.657s的水準,并行加速比達到了可喜的7.32。可是與2500k這樣的cpu不對等的是它的售價,一萬三四夠買10個2500k了。

  下圖是不同cpu串行速度的對比圖:

C#版本的CPU性能測試

   我們看到基本上同平台,同架構的cpu間,頻率是王道。而目前i3新酷睿都可以幹掉當年桌面的老酷睿經典,不得不說技術發展迅速。而伺服器核心雖然核心多,甚至是雙cpu,但頻率一般,是以在這種普通應用下甚至抗不過桌面的i5 2500k。 能多核優化的程式還是占少數,大家能超就超一點吧,超頻帶來的性能提升真心不是一點點。

下圖是并行下速度對比圖:

C#版本的CPU性能測試

并行計算下,核的數量是王道!在非伺服器核心上,加速比幾乎就是cpu核心數。四核的速度就是比雙核的快。在八核的頂級伺服器cpu上,它的速度幾乎是amd ql-62的13倍!但若算是這台機器有雙cpu16個核心的話,加速比和16還是差很多的。難道.net并行庫對多cpu支援不好?我怎麼記得它可以支援最多64個cpu?

       咱不是專業的硬體測評師,隻是好奇之下跑了幾個分數看了他們的性能而已,花了整整一晚上時間,是以若有不足之處還請海涵。

       總體來說,單核性能頻率和架構決定一切,多核性能上核心數決定了加速比。 桌面級應用完全沒必要買伺服器的多核心(e3 1230這類除外)。大部分程式最多隻對四核cpu做過優化。更多核心甚至雙cpu會造成各種不相容性問題,連遊戲都打不了(嘿嘿),程式設計都卡。

       現在覺得,i5 2500k還是要比e3 1230成本效益高很多,超頻超出來的性能不是蓋的。别擔心壽命,它隻會在需要的時候睿頻到更高的頻率,平時都是乖乖的二點幾吉赫茲。而且非常簡單!enjoy it!

       程式并行的優勢還是非常明顯的,.net的并行庫可比intel并行庫友善多了(雖然效率不能比),但它可以很好的幫助你挖掘多核cpu的潛力。大家可以多學習一下.net并行庫。

繼續閱讀