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我没有使用Why would /Qvec-report:2 return nothing ? (MSVC 2012)中声明的/GL
发布于 2018-08-25 07:02:19
正如退役忍者所指出的那样,确保你的函数模板被实际调用,或者instantiated.
/O2或/O2 /GL可以工作。另一个用户发现/GL对他们不起作用(Why would /Qvec-report:2 return nothing ? (MSVC 2012))。使用#pragma("gt", on)为我启用了自动向量化器。https://stackoverflow.com/questions/51995886
复制相似问题