如何防止vc ++向memcpy发出调用?

时间:2016-04-05 11:15:11

标签: c++ visual-studio vectorization

我正在编写一个基准程序,比较对齐访问和未对齐访问的性能。

void do_access(int *dest, const int* src, size_t n)
{
  while(n--) {
    *dest++ = *src++;
  }
}

问题在于代码会自动向量化并更改为调用memcpy,因此我无法比较对齐/未对齐访问的差异。

GCC-fno-tree-loop-distribute-patterns,但我在Visual Studio中没有看到任何相关选项。

我仍然想要自动矢量化,但不想调用memcpy。如何阻止MSVC ++这样做?

我想我需要在这里提供一些背景故事。我就像'未对齐访问是UB,因此应该始终避免。',并且有人说'未对齐访问可能比对齐访问更快,尝试编写memcpy并进行比较。'我从未见过任何建议使用未对齐访问性能的文章,因此我决定使用对齐/未对齐访问来编写memcpy并进行比较。

我认为编译器会生成一个需要对齐并且无法运行的指令,而gcc使用-O3就像我预期的那样。它是段错误的。不幸的是,他坚持认为MSVC中的未对齐访问速度更快,但VC将所有内容替换为单个memcpy,因此我无法将性能与VC进行比较。我唯一需要的是禁用用memcpy替换代码。

0 个答案:

没有答案