首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么MSVC12的自动向量器不能分析函数模板?

为什么MSVC12的自动向量器不能分析函数模板?
EN

Stack Overflow用户
提问于 2018-08-24 08:16:32
回答 1查看 40关注 0票数 0

VS2013中的自动向量化或自动并行化(/Qpar)引擎看不到函数模板。

例如,下面的代码:

代码语言:javascript
复制
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得到了适当的输出:

代码语言:javascript
复制
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()转换为函数模板:

代码语言:javascript
复制
template <class T>
void foo::someFunc(T a)
{
    int myArray[1000000];

    for (unsigned i = 0; i < 1000000; i++)
    {
        myArray[i] = i+1;
    }
}

我没有从日志中的自动向量器或自动并行器得到任何东西:

代码语言:javascript
复制
foo.cpp
AutoVecTest.vcxproj -> c:\visual studio 2013\Projects\AutoVecTest\x64\Debug\AutoVecTest.dll

我没有使用Why would /Qvec-report:2 return nothing ? (MSVC 2012)中声明的/GL

EN

回答 1

Stack Overflow用户

发布于 2018-08-25 07:02:19

正如退役忍者所指出的那样,确保你的函数模板被实际调用,或者instantiated.

  • Make确保启用了正确的优化编译标志(
  1. flag)。YMMV在这里,但Visual Studio 2012's Auto-Vectorization Cookbook/O2/O2 /GL可以工作。另一个用户发现/GL对他们不起作用(Why would /Qvec-report:2 return nothing ? (MSVC 2012))。使用#pragma("gt", on)为我启用了自动向量化器。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51995886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档