此示例code在四核處理器上將串行方法與線程方法進行了比較。該代碼僅使用GetPixel()從4張圖像中讀取所有像素。 我發現加速度大概在65%左右,爲什麼它不等於75%,因爲我有4個內核,並且它們都被充分利用了?在四核上使用線程加速代碼65%?
PS:
可以檢查代碼,因爲我沒有做任何I/O,並沒有其他進程在機器上工作(正常的Windows進程)
此示例code在四核處理器上將串行方法與線程方法進行了比較。該代碼僅使用GetPixel()從4張圖像中讀取所有像素。 我發現加速度大概在65%左右,爲什麼它不等於75%,因爲我有4個內核,並且它們都被充分利用了?在四核上使用線程加速代碼65%?
PS:
可以檢查代碼,因爲我沒有做任何I/O,並沒有其他進程在機器上工作(正常的Windows進程)
它可以是任何數量的東西。一個想到的夫婦
我確定沒有其他進程正在使用處理器 – 2010-05-12 12:50:12
線程管理導致預期性能下降的可能性仍然很大。 – kemiller2002 2010-05-12 12:58:35
很可能它必須與某些數據結構或文件上的其他線程競爭,以免得到100%的並行執行。
例如,如果您要在四核上以4路並行方式運行網頁下載網頁類型的操作,並且服務器一次只允許同一個IP地址同時下載1次,你根本不會得到任何加速。
另外,還有一些與旋轉線程和維護它們有關的開銷,所以當你開始並行執行時,你不會得到完整核心的使用,儘管在這種情況下它很可能不是一個大的因素。
因爲還有其他因素需要考慮。像內存和I/O帶寬/爭用,線程上下文切換開銷等。
總體而言,我的並行編程經驗,如果你得到的少65%流逝的時間,這是非常好。
線程有開銷,並不是所有東西都能並行運行。
大量的RAM被觸及,CPU將開始通過總線進行戰鬥。 – 2010-05-12 17:56:48