我正在生成代码,我恰好将n
个字词从一个内存位置复制到另一个非重叠的内存位置。 n
是静态知道的。
目前,我发出了大量的加载指令,后面跟着大量的商店指令,但我怀疑从某个n
值开始,调用memcpy
会更快。
是否有一个众所周知的指南,说明您需要复制多少单词才能使memcpy
值得一个电话?
答案 0 :(得分:1)
最优化的代码取决于处理器的体系结构。数据路径,寄存器大小,可用数据寄存器的数量和缓存是决定最优化代码的一些参数。
我不知道您的特定编译器将如何处理memcpy
函数,但有一些点可以帮助您编写优化的复制代码:
如果适用,请务必检查生成的汇编代码,以了解当前代码是否是最优化的代码。
如果您有n个数据寄存器空闲,则只加载n值并存储它们以避免需要从堆栈中分配内存。处理寄存器比处理其他存储器要快得多。
如果您的处理器有一些在使用后自动递增地址的寻址模式,如果这是您想要做的,那么请确保生成的程序集正在执行此操作。
读取连续值将提高缓存性能,从而为您提供更多优化。
尽可能尝试使用带有加载和存储指令的完整数据路径,如果有SIMD加载和存储说明,请务必使用它们。