2013-10-09 46 views
0

假設性問題。不同處理器上多線程代碼的時間差異?

我寫了1多線程代碼,它用於形成8個線程並處理不同線程上的數據並完成該過程。我也在代碼中使用信號量。但它給了我不同的機器不同的執行時間。 這是顯而易見的!

執行時間爲相同的代碼:

在Intel(R)核心(TM)13 CPU機器:36秒

在AMD FX(TM)-8350八核處理器的機器:32秒

在英特爾(R)酷睿(TM)i5-2400 CPU機:16.5秒

所以,我的問題是,

有什麼樣的設置/變量/命令/開關我缺少哪些可以在較高的機器啓用,但在較低的機器啓用,這使得更高的機器執行時間更快?或者,它只是處理器,因爲時間差異。

任何形式的幫助/建議/意見將有所幫助。

操作系統:Linux(Centos5)

+0

很明顯它** BOTHERS **你很多。 – LihO

+0

是的。有點。 @LihO,實際上我已經閱讀了一些關於某種線程的啓用或設置或操作系統中的某些東西。我只是想確保我不會錯過任何事情。 –

+0

你如何衡量執行時間? – MYMNeo

回答

1

多線程基準應顯著統計抽樣(前進行:每機約50實驗)。此外,程序運行的「environement」也很重要(例如:firefox是同時運行還是不運行)。

另外,根據資源消耗情況,運行時可能會有所不同。換句話說,如果沒有更完整的實驗條件,不可能回答你的問題。

我從我的personnal實驗進行了一些意見:

  • 巨大的內存消耗可以改變取決於機器上的交換設置的結果。

  • 在相同條件下安裝相同操作系統的兩臺「相同」機器可能會顯示不同的結果。

  • 當總吞吐量比5分鐘小時,結果顯得相當隨機。

+0

謝謝。我會交叉檢查所有提到的要點。並會嘗試找出某些場景。 –

0

我曾經有一個關於時間問題measure.My問題是在多線程的時間比在單個線程大。最後我發現問題在於不要測量每個線程中的時間並對它們進行求和,而是要測量出所有線程。例如:

錯誤措施:

int main(void) 
{ 
    //create_thread(); 
    //join_thread(); 
    //sum the time 
} 

void thread(void *) 
{ 
    //measure time in thread 
} 

右措施:

int main(void) 
{ 
    //record start time 

    //create_thread(); 
    //join_thread(); 

    //record end time 

    //calculate the diff 
} 

void thread(void *) 
{ 
    //measure time in thread 
} 
+0

我明白了你的觀點。但是,最後,總體上應該有時間差異的正當理由。 –

+0

@Vishwadeep,我的時間測量使用CPU時間,所以它有問題。有一個關於這個問題,它是http://stackoverflow.com/questions/2962785/c-using-clock-to-measure-time-in -ulti-threaded-programs – MYMNeo