c++ - VS 中具有不同矢量化路径的二进制文件?

标签 c++ visual-studio visual-studio-2013

我写了一个浮点密集型 DLL,我想分发给我的同事。

是否可以在 VS 中构建包含不同矢量化的二进制文件,例如在运行时在 SSE 或 AVX2 之间选择相同的二进制文件,以便获得最佳性能?

我目前通过在运行时加载不同的 DLL 来进行分支,但我不喜欢增加的复杂性,而且我确信 cpu 检测逻辑持久。

我认为 ICC 可以做到这一点(并因选择最糟糕的代码路径而被 AMD 起诉......)但我无法在 VS 中找到该功能。存在吗?

最佳答案

您可以拥有模拟 .cpp 文件,每个矢量化设置一个。然后,将其中每一个的编译设置设置为所需的适当矢量化(而不是全局项目设置)。

假设您有一个名为 algs.cpp 的实现文件,模拟文件 avx2_algs.cpp 将只包含:

#include "algs.cpp"

并将使用自己的设置进行编译。

您还需要定义一个宏来区分链接器的函数名称:

#define VECT(func) avx2_##func
#include "algs.cpp"

然后 algs.cpp 会是这样的:

void VECT(add)(.....

或者通过命名空间来区分

namespace avx2 {
  #include "algs.cpp"
}

然后您需要某种类型的动态调度来调用适当的设置函数。

关于c++ - VS 中具有不同矢量化路径的二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27245948/

相关文章:

vb.net - 2010 年的 Visual Basic PowerPack 在 2013 年不起作用?

c++ - Qt C++ 信号槽不能正常工作

c++ - 为什么这个指向结构的指针的 std::queue/list 直到 List.Size() == 0 才释放内存?

const 和常规类型的 C++ 模板规范

c# - 为什么 Visual Studio 在临时文件夹中生成以下文件 .NETFramework,Version=v4.5.AssemblyAttributes.cs

visual-studio - 在 Visual Studio 2013 中禁用设置的云同步?

c++ - 在 Windows 上安装 GLo​​g

c++ - 同时使用 2 个版本的 boost

c# - Visual Studio 程序集与 nuget 包中的 System.Net.Http

c# - 如何为解决方案中的每个项目创建单独的 nuget 包,并将项目引用转换为 nuget 依赖项?