作者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