2009-06-08 48 views
1

你如何找出基於其代碼大小是否值得並行特定代碼塊?以下計算是否正確?成本/效益上的代碼大小?

假設:由每個CPU有一個線程的

  • 線程池。
  • CPU結合的代碼塊具有X毫秒執行時間。
  • Y = min(number of CPUs, number of concurrent requests)

因此:

  • 費用:代碼的複雜性,潛在的錯誤
  • 效益:(X * Y)毫秒

我的結論是,這是不值得的並行對於小數值Xÿ,其中「小」取決於你的請求必須如何響應是。

回答

4

一兩件事,這將有助於你找出答案是Amdahl's Law

使用多個處理器並行計算程序的加速是通過所需程序的順序部分的時間限制。例如,如果一個程序使用單個處理器內核需要20個小時,並且1小時的特定部分不能並行化,而19小時(95%)的剩餘有前途部分可以並行化,那麼無論我們投入多少處理器這個程序的並行化執行,最小執行時間不能小於臨界1小時。因此加速限制在20倍以內。

找出你想要達到的速度,以及你實際可以達到多少平行度,然後看看它是否值得。

1

這取決於很多因素,如代碼並行化的難度,從中獲得的加速(在分解問題和加入結果時存在開銷成本)以及代碼在那裏花費的時間量(Amdahl's法)

0

好了,好處是真多:

(X *(Y-1))* TC * Pf的

其中,tc是您正在使用的線程架構的成本。沒有線程架構擴展完美,所以使用2個線程將可能是,在最好的,1.9倍的速度。

Pf是一個完全依賴於算法的並行化因素(即:是否需要鎖定,這會降低進程速度)。

另外,它是Y-1,因爲單線程基本上假設Y == 1。

至於決定,這也是用戶沮喪/期望的問題(如果用戶在等待某件事情時感到煩惱,那麼它比用戶不介意的任務有更大的好處 - 這不是總是由於等待時間等原因 - 這部分是期望)。