针对Core 2或Core i7架构进行全面优化的memcpy / memmove?
-
03-07-2019 - |
题
具有DDR3双通道内存的Core 2处理器的理论最大内存带宽令人印象深刻:根据关于体系结构的维基百科文章,每秒10+或20+千兆字节。但是,库存memcpy()调用不会达到此目的。 (3 GB / s是我在这样的系统上看到的最高。)可能,这是由于OS供应商要求memcpy()根据处理器的特性针对每个处理器线进行调整,因此库存memcpy()实现在众多品牌和产品线上应该是合理的。
我的问题:是否有可以在C程序中使用的Core 2或Core i7处理器的免费高度调整版本?我确信我不是唯一需要一个人的人,每个人微量优化他们自己的memcpy()都会浪费大量精力。
解决方案
如果你指定/ ARCH:SSE2到MSVC,它应该为你提供一个调整的memcpy(至少,我的)。
如果不这样做,请自己使用SSE对齐的加载/存储内在函数来复制大块内存,使用Duff的单词读取设备来处理数据的头部和尾部以使其到达对齐的边界。您还需要使用缓存管理内在函数来获得良好的性能。
您的限制因素可能是缓存未命中和南桥带宽,而不是CPU周期。鉴于内存总线上总会有很多其他流量,我通常很乐意在此类操作中获得大约90%的理论内存带宽吞吐量。
不隶属于 StackOverflow