2012-10-12 23 views
6

我不確定。我可以在四個內核上編寫一個大型memset(例如10 MB)以獲得更快的速度嗎?memset可以在4個核心上並行化嗎?

這樣的ram芯片並行化是否可能,以及其他線程的時間成本有多大 - 是超過一毫秒或更少?

+5

這樣的操作可能只會變得更慢,如果你並行化 - 你會有多個核心/ cpus爭取訪問內存總線。 –

+0

也許使用特定的指令移動更多的字節一次會幫助你。只有當數據分佈在不同的存儲器部分時,使用緩和纔有優勢。 – wbao

+4

並行'memset'可能會更快的唯一情況是NUMA體系結構上的非常大的內存塊,其中每個內核都在連接到其處理器的內存上工作。 –

回答

2

你指出了一個正確的問題,同時很難給出一個簡單的答案。涉及幾個方面。

  1. 開始新線程(或從某個緩存中選取它們)的開銷;
  2. 內存總線上的內容。
  3. 上述方面不同,並且對於不同的平臺具有非常不同的成本。

大個人電腦有幾條內存總線。小的只有一個。在一個內存總線系統上,這沒有任何意義。如果您的系統有幾條內存總線(通道),則您的數據陣列可能會在內存條之間進行任意分割。如果將發生整個陣列位於同一個存儲庫中,則parralelisation將無用。確定數組的佈局又是一個開銷。換句話說,在拆分核心之間的操作之前,有必要弄清楚這是否值得做。

簡單的答案是,這些難以預測的間接費用很可能會消耗好處並使整體結果變得更糟。

同時,對於某些架構上非常大的內存區域,這是有道理的。

+0

如果值得對* memset *進行parrallizing並在運行時作出決定,是否值得確定程序啓動? –

+0

這可能應該在操作系統啓動時發生。對於將要啓動的所有應用程序,CPU都是相同的。另一方面,記憶庫之間的分裂將會一直是不同的,並且不容易評估。 –

+1

在現代CPU上,單個CPU內核在寫入零時可以輕鬆飽和所有內存總線。所以即使這樣,並行化也沒有意義。 – MSalters

相關問題