0

我读到(http://software.intel.com/en-us/articles/vectorization-writing-cc-code-in-vector-format/)英特尔编译器有一个标志来输出有关矢量化的信息 - 比如“块被矢量化了。”等等。 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]);
  }

}

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

4

1 回答 1

1

参阅-ftree-vectorizer-verbose=nhttp://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#index-ftree_002dvectorizer_002dverbose-690

在较新版本的 GCC 中使用-fopt-info-vec -fopt-info-vec-missed.

于 2012-08-28T16:59:25.753 回答