gpt4 book ai didi

c++ - 使用 movsd 使编译器复制字符

转载 作者:可可西里 更新时间:2023-11-01 18:27:00 28 4
gpt4 key购买 nike

我想在时间关键函数中复制一个相对较短的内存序列(小于 1 KB,通常为 2-200 字节)。在 CPU 方面最好的代码似乎是 rep movsd。但是我不知何故无法让我的编译器生成这段代码。我希望(我隐约记得看到过)使用 memcpy 会使用编译器内置的内在函数来做到这一点,但基于反汇编和调试,编译器似乎正在使用对 memcpy/memmove 库实现的调用。我还希望编译器能够足够聪明地识别以下循环并单独使用 rep movsd,但它似乎没有。

char *dst;
const char *src;
// ...
for (int r=size; --r>=0; ) *dst++ = *src++;

除了使用内联汇编之外,还有什么方法可以让 Visual Studio 编译器生成 rep movsd 序列?

最佳答案

我想到了几个问题。

首先,您怎么知道 movsd 会更快?你查过它的延迟/吞吐量吗? x86 架构充满了不应该使用的笨拙的旧指令,因为它们在现代 CPU 上的效率不是很高。

其次,如果您使用 std::copy 而不是 memcpy 会发生什么? std::copy 可能更快,因为它可以在编译时专门针对特定数据类型。

第三,您是否在项目属性 -> C/C++ -> 优化下启用了内部函数?

当然,我假设其他优化也已启用。

关于c++ - 使用 movsd 使编译器复制字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1137341/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com