Re: [問題] 需要動用 DMA 作記憶體複製嗎 ?

看板LinuxDev作者 (Linux藍海帝國)時間13年前 (2011/05/03 18:21), 編輯推噓3(304)
留言7則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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

05/04 02:23, , 1F
請問是多核心嗎 用multithreaded做memcpy不知有沒有效
05/04 02:23, 1F

05/04 02:28, , 2F
似乎有支援SSE指令集 參考看看 http://0rz.tw/iLRxi
05/04 02:28, 2F

06/16 08:44, , 3F
DMA 的優點是可以讓 hardware 在 background 移動資料,
06/16 08:44, 3F

06/16 08:44, , 4F
同時間 CPU 可以繼續執行程式, 所以只要 overlap 的時間
06/16 08:44, 4F

06/16 08:47, , 5F
算的好的話, DMA 搬動資料的時間可以被藏的很好.
06/16 08:47, 5F

06/16 08:48, , 6F
MPI 的 implementation 大多用到 DMA 來隱藏 comm. cost
06/16 08:48, 6F

06/16 08:50, , 7F
用 memcy 要耗費CPU時間,所以搬動大區塊的效能不會太好
06/16 08:50, 7F
文章代碼(AID): #1DlzSVnf (LinuxDev)
文章代碼(AID): #1DlzSVnf (LinuxDev)