有多少单词让memcpy值得?

时间:2017-04-18 20:46:41

标签: c performance code-generation memcpy

我正在生成代码,我恰好将n个字词从一个内存位置复制到另一个非重叠的内存位置。 n是静态知道的。

目前,我发出了大量的加载指令,后面跟着大量的商店指令,但我怀疑从某个n值开始,调用memcpy会更快。

是否有一个众所周知的指南,说明您需要复制多少单词才能使memcpy值得一个电话?

1 个答案:

答案 0 :(得分:1)

最优化的代码取决于处理器的体系结构。数据路径,寄存器大小,可用数据寄存器的数量和缓存是决定最优化代码的一些参数。

我不知道您的特定编译器将如何处理memcpy函数,但有一些点可以帮助您编写优化的复制代码:

  • 如果适用,请务必检查生成的汇编代码,以了解当前代码是否是最优化的代码。

  • 如果您有n个数据寄存器空闲,则只加载n值并存储它们以避免需要从堆栈中分配内存。处理寄存器比处理其他存储器要快得多。

  • 如果您的处理器有一些在使用后自动递增地址的寻址模式,如果这是您想要做的,那么请确保生成的程序集正在执行此操作。

  • 读取连续值将提高缓存性能,从而为您提供更多优化。

  • 尽可能尝试使用带有加载和存储指令的完整数据路径,如果有SIMD加载和存储说明,请务必使用它们。