2013-06-18 49 views
2

我在我的程序中使用了memcpy()。隨着我增加變量的數量,不幸的是CPU使用率增加。就好像memcpy是通過循環迭代運行的。 Linux中是否還有一個快速的memcpy函數?我應該使用補丁並編譯內核嗎?如何在Linux中通過DMA處理memcpy

+3

咦? Windows使用DMA進行memcpy? :) –

+0

據我所知它是DMA – Sam

+1

DMA假定與其他設備通信;> – matekm

回答

6

有一些架構,CPU和內存之間的總線非常弱;其中一些體系結構添加了一個DMA引擎,以允許複製大塊內存而無需在CPU上運行循環。

在Linux中,您將能夠使用dmaengine子系統訪問DMA引擎,但是它是非常依賴硬件的,無論這種引擎是否真的可用。

X86 CPU具有良好的內存子系統,並且還具有用於複製大塊的特殊硬件支持,因此使用DMA引擎將不太可能實際幫助。 (英特爾增加了一個叫做I/OAT有些服務器主板DMA引擎,但整體results並不比普通CPU副本好多了。)

DMA迫使數據從CPU的緩存,這樣做對你的程序中的變量DMA副本將完全沒有意義,因爲之後的第一個CPU訪問將不得不將它們讀回到緩存中。