【发布时间】:2015-08-26 06:47:10
【问题描述】:
下面的代码不能用 Visual Studio 2013 编译。我得到 mm 函数的链接器错误未解析的外部符号(LNK 2019)。如果我直接使用这些功能,一切都很好。 为什么它不编译?有没有解决办法
#include "emmintrin.h"
#include <smmintrin.h>
#include <intrin.h>
__m128i (*load)(const __m128i*) = NULL;
if (it::isAligned<16>(ucpSrc, iXOffset * sizeof(unsigned char)) )
load = &_mm_load_si128;
else
load = &_mm_lddqu_si128;
【问题讨论】:
-
sizeof(unsigned char)是 1 -
确定这些是普通函数而不是仿函数类?
-
这些内在函数不是函数,而是编译器插入的单个机器指令。
-
在循环中使用加载,如果我将 mm - 指令包装到函数中,是否会产生任何重大开销
-
如果您真的要问这个问题,我怀疑您可能不了解基本的 x86 汇编和/或低级编程。在现代处理器上,函数调用比未对齐的负载要糟糕得多。
标签: c++ simd intrinsics