作者jeremy007 (Linux藍海帝國)
看板LinuxDev
標題Re: [問題] 需要動用 DMA 作記憶體複製嗎 ?
時間Tue May 3 18:21:16 2011
※ 引述《jeremy007 (Linux藍海帝國)》之銘言:
: 標題: [問題] 需要動用 DMA 作記憶體複製嗎 ?
: 時間: Mon May 2 16:28:46 2011
:
: 大家好, 小弟想改善手邊程式的執行時間
: 分析後, 發現兩塊 buffer 的複製: src -> dst 花了太多時間...
:
: 原始程式的寫法採用 memcpy,
: 但 survey 了其他做法 (ex: 網路上找到的 fast memcpy), 其效能的增進不顯著.
:
: 使用的環境為 x86 平台, CPU 為 intel core 2 duo 等級,
: 想請教前輩們, 若改用硬體 DMA 幫忙作資料搬移,
: 是否能縮短 資料在記憶體之間 搬移的時間嗎 ?
: (已知 buffer size 為 page 的整數倍, 且起始位置也為 page align)
:
: 小弟想知道怎麼作, 才能讓 src 的資料 "盡量快速" 複製到 dst buffer..
: 謝謝!!
:
: --
:
※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 114.32.244.203
: 推 alongalone:我的想法是你可能要往精簡資料為主.萬一你的資料大到 05/02 19:44
: → alongalone:DMA也搬不動(不確定會不會),那你的程式碼不就浪費了 05/02 19:45
buffer size 約 5~6 MBytes, 資料無法再精簡, 也不考慮資料壓縮.
不過您提到的這點, 我確實忽略了...@_@..
: 推 askacis:不懂x86的硬體,請問上面的DMA Controller可以做到 05/03 10:39
: → askacis:memory to memory的搬移嗎? 05/03 10:41
小弟先前的 survey, 古早時代的 intel 8237 這顆 chip,
就已經可以作到 memory to memory 了. 不過那時候的 dma 速度比不上用 CPU 搬移.
不確定 intel core 2 系列有沒有類似功能
一兩年前看過大陸牛人, 實作一個 dma device driver,
掛上去後可讓 user program 來作 memory to memory move.
不知道效能如何, 而且那篇網頁現在我也找不到了...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.236.205
1F:推 yuskeb:請問是多核心嗎 用multithreaded做memcpy不知有沒有效 05/04 02:23
3F:推 callisto2:DMA 的優點是可以讓 hardware 在 background 移動資料, 06/16 08:44
4F:→ callisto2:同時間 CPU 可以繼續執行程式, 所以只要 overlap 的時間 06/16 08:44
5F:→ callisto2:算的好的話, DMA 搬動資料的時間可以被藏的很好. 06/16 08:47
6F:→ callisto2:MPI 的 implementation 大多用到 DMA 來隱藏 comm. cost 06/16 08:48
7F:→ callisto2:用 memcy 要耗費CPU時間,所以搬動大區塊的效能不會太好 06/16 08:50