天天看點

在多核平台下面,你的程式能夠使用到多核能力的幾分之幾

從前程式員隻對實作功能感興趣, 多核平台推出之後,程式員又需要多長一根筋。要不寫出來的程式效率差, 又要被使用多核機器的玩家罵了。誰願意用多花錢買了多核機器,軟體卻是單線程,隻用得到單核的性能。

      “不就是多線程嘛,好辦的不得了。我的程式裡面本來存在幾個線程。調用庫的時候, 庫裡面就implicit的開了幾個線程。這樣不就适合多核了嗎。” 程式員們如是說。

         殊不知少考慮了一個非常重要的問題。一個線程就相當于一個勞工, 是不是勞工越多,生産效率就越高。這是典型的是否人多力量大的命題。 答案自然是否定的。

         線程是多了, 但是如果同一時間裡面隻有一個線程在幹活, 線程多有什麼用!!!  同一時間裡面幹活的線程數量被稱為 concurrency level. 比如同一時間的幹活線程數量是4個,那麼此時的concurrency level 就是4 (在有些分析軟體裡面是以0為concurrency level 計數起點,于是此時concurrency level 是3, 比如cfinder 就是如此計concurrency level 的)。 如果4核機器上,concurrency level為4的時間維持得很久, 比如占整個運作時間的80% , 這樣的多線程程式是真正對多核機器有效的。

          如果concurrency level 為4的時間,  占整個運作時間的1%, 90%的時間concurrency level 為1 , 這樣的多線程程式和單線程有差別嗎!!! 這樣的程式隻能用到單核能力, 多核能力基本沒有用到,是一定是需要性能調優的。

本文轉自Intel_ISN 51CTO部落格,原文連結:http://blog.51cto.com/intelisn/131491,如需轉載請自行聯系原作者

繼續閱讀