Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
gcc矢量化消息_Gcc - Fatal编程技术网

gcc矢量化消息

gcc矢量化消息,gcc,Gcc,我读(http://software.intel.com/en-us/articles/vectorization-writing-cc-code-in-vector-format/)英特尔编译器有一个标志来输出有关矢量化的信息,比如“BLOCK WAS vectoriced.”等等。gcc有类似的标志吗?我只是想看看我是否能知道什么是矢量化的,什么不是。例如,我想做一个如下的演示: #include <vector> class Point3 { public: Point3

我读(http://software.intel.com/en-us/articles/vectorization-writing-cc-code-in-vector-format/)英特尔编译器有一个标志来输出有关矢量化的信息,比如“BLOCK WAS vectoriced.”等等。gcc有类似的标志吗?我只是想看看我是否能知道什么是矢量化的,什么不是。例如,我想做一个如下的演示:

#include <vector>

class Point3
{
public:
  Point3() : Components(3)
  {
    data[0] = 0;
    data[1] = 0;
    data[2] = 0;
  }

  const unsigned int Components;
  float data[3];

private:


};

class Point4
{
public:
  Point4() : Components(4)
  {
    data[0] = 0;
    data[1] = 0;
    data[2] = 0;
    data[3] = 0;
  }

  const unsigned int Components;

  float data[4];
private:


};

template <typename T>
static float Add(const T& a, const T& b)
{
  float sumValues = 0.0f;
  for(unsigned int i = 0; i < a.Components; ++i)
  {
    sumValues += a.data[i] + b.data[i];
  }
  return sumValues;
}

int main()
{
  std::vector<Point3> point3vec(1000);
  for(std::size_t i = 0; i < point3vec.size() - 1; ++i)
  {
    Add(point3vec[i], point3vec[i+1]);
  }

  std::vector<Point4> point4vec(1000);
  for(std::size_t i = 0; i < point4vec.size(); ++i)
  {
    Add(point4vec[i], point4vec[i+1]);
  }

}
#包括
第三类
{
公众:
点3():组件(3)
{
数据[0]=0;
数据[1]=0;
数据[2]=0;
}
常量无符号整数分量;
浮动数据[3];
私人:
};
第四类
{
公众:
点4():组件(4)
{
数据[0]=0;
数据[1]=0;
数据[2]=0;
数据[3]=0;
}
常量无符号整数分量;
浮动数据[4];
私人:
};
模板
静态浮点加法(常数T&a、常数T&b)
{
浮点数=0.0f;
for(无符号整数i=0;i

看看其中一个循环是否得到矢量化,而另一个没有。

请参见
-ftree vectorier verbose=n
at

酷,这就是我要找的。我假设默认值为n=0?嗯,我很惊讶文档没有明确地这么说,但是是的,我假设是这样,因为除非显式使用该选项,否则不会得到任何输出。我使用-ftree vectorizer verbose=8编译了上面的(编辑过的)代码。我得到:60:注意:未矢量化:内部循环计数不不变。第54行:注意:未矢量化:内部循环计数不不变。第44行:注意:未矢量化:不支持的数据类型。你能推荐更好的代码来演示矢量化吗?我的类也包含Components成员,使整个类数据的大小不再是4个浮点数的倍数,这是一个问题吗?或者听起来指向point3vec.size()的循环不允许矢量化,因为它不是常数?我将为此启动另一个线程,并在这里接受您的答案。