VS2013 中的自动矢量化或自动并行器 (/Qpar) 引擎看不到函数模板。
例如,这段代码:
void foo::someFunc(int a)
{
int myArray[1000000];
for (unsigned i = 0; i < 1000000; i++)
{
myArray[i] = i+1;
}
}
似乎已被识别,我从 /Qvec-report:2 和 /Qpar-report:2 获得了适当的输出:
foo.cpp
--- Analyzing function: void __cdecl foo::someFunc(int) __ptr64
c:\visual studio 2013\projects\autovectest\autovectest\foo.cpp(18) : info C5001: loop vectorized
c:\visual studio 2013\projects\autovectest\autovectest\foo.cpp(18) : info C5012: loop not parallelized due to reason '1007'
AutoVecTest.vcxproj -> c:\visual studio 2013\Projects\AutoVecTest\x64\Debug\AutoVecTest.dll
但是,一旦我someFunc()
变成一个函数模板:
template <class T>
void foo::someFunc(T a)
{
int myArray[1000000];
for (unsigned i = 0; i < 1000000; i++)
{
myArray[i] = i+1;
}
}
我从日志中的自动矢量化器或自动并行化器中一无所获:
foo.cpp
AutoVecTest.vcxproj -> c:\visual studio 2013\Projects\AutoVecTest\x64\Debug\AutoVecTest.dll
我没有使用 /GL,如Why would /Qvec-report:2 return nothing 中所述?(MSVC 2012)