我正在编写一些针对各种平台的 C++ 代码。这包括 x86、x64 和 ARM。我目前在 x64 上使用 Intel IPP 和 MKL(用于 SSE),并希望为 ARM 添加一个 NEON 库。有没有一种标准的方法来围绕特定的库进行分支并且具有最小的依赖和大惊小怪?我目前正在使用 Visual Studio 2008 或 2012。
我最初的想法是围绕特定调用进行#ifdef 并测试 X86、X64、ARM 等。例如:
void addVectors(int * a, int * b, int n)
{
#ifdef INTELIPP
ippsAdd_32s_I(...);
#elif ARMNEON
neonAdd_32s_I(...);
#else
for(int k = 0; k < n; k++)
a[k] += b[k];
#endif
}
但这可能会变得非常混乱。我想知道标准方法是什么。例如,我希望 IPP 和 NEON 代码的单独项目更干净,并且只针对其中一个构建主项目?
除了支持之外,IDE 并不是非常重要——而且我怀疑我们将改用 Eclipse 之类的东西来进行 ARM 工作。