- 主题:最佳memcpy实现
楼主贴这段,字节对齐的,否则它搞一堆位运算是为什么。
glibc兜底的平台无关memcpy差不多也长这样。
【 在 lushan5436 的大作中提到: 】
: ARM指令,字节不对齐,转int会报错,你不考虑?
: 就算是X86,windows的实现(比早年linux实现好多了)也考虑比这多,不信你调试时去看汇编。
: 没有说不如我:我说的是,如果写C程序,怎么不可能考虑字节对齐的问题?怎么可能还不知道sse2加速?
: ...................
--
修改:ilovecpp FROM 124.78.168.*
FROM 124.78.168.*
中间隔着cache呢,哪能这么比。
这种通用实现也不追求最优。具体平台上用movsq乃至avx512的实现都有。
【 在 javaboy 的大作中提到: 】
: 根据实际硬件不同,也有可能这个是最佳的。
: 如果瓶颈在ddr ram上,比如极端情况用DDR-400搭配主频很高的cpu,那四次*s++=*d++和一次movq很可能是一样快的。movq可以空出一些流水线给超线程用。至于是否用得上那也不保证。反正单线程benchmark很可能看上去差不多。
: intel的cpu对我们程序员来说是个黑盒子。厂家不会公开说它是怎么优化的。没准它的decoder认识连续四条*s++=*d++,会自动翻译成和movq一样的微码。这是完全可以做到,而且很可能已经做了的。唯一确保最佳性能的办法就是做实验测,摸清每个指令的延迟多少,对流水线的影响多大,对cache的影响多大。。。慢慢把黑盒的内部结构给逆向工程出来。(做JIT编译器的人主要就是做这些工作)
: ...................
--
FROM 124.78.168.*
glibc有这个版本,触发条件不清楚。
https://sourceware.org/git/?p=glibc.git;a=commit;h=72276d6e8843db6df5971b06787f0a5e39bda138
【 在 hgoldfish 的大作中提到: 】
: linus 说 avx512 会降频。。真的有人用 avx512 搞 memcpy?
--
修改:ilovecpp FROM 124.78.168.*
FROM 124.78.168.*
dma这个真不太懂
dma可以内存到内存吗?
dma比cpu快吗?内存到内存不影响cpu吗?
允许用户态使用dma吗?
另外glibc留了个口子,对齐到页时可以操作页表作拷贝。如果内核有这个调用,那应该是大块拷贝最快的了。
【 在 javaboy 的大作中提到: 】
: 我觉得就是你总结的:glibc兜底的平台无关memcpy差不多也长这样
: 然后前面wushu查了说这是musl的代码。
: 从编程、汇编角度来说这样就可以结贴啦。再往下挖要不就聊聊总线协议和dma呗。
: ...................
--
修改:ilovecpp FROM 124.78.168.*
FROM 124.78.168.*