g ++和omp simd虚函数

时间:2018-01-18 14:09:51

标签: g++ openmp simd

我几乎没有成功迫使g ++生成对虚函数的向量(aka omp simd)调用。考虑基类

class vecclass_v {
 public:

#pragma omp declare simd simdlen(4)
  virtual double vecf(double v1, double v2) = 0;
}

和实现(应该)矢量化vecf

的派生类
class vecclass : public vecclass_v {
 public:

#pragma omp declare simd simdlen(4)
  double vecf(double v1, double v2);
};

实施位于cxx文件中。查看目标文件,我可以看到g ++正确地为派生类生成矢量化函数的实例。但调用虚函数并未解析为向量化调用。它使用标量成员实例,例如,在像这样的用例中

vecclass_v *ob = [get an instance of vecclass somewhere]
ob->vecf(a, b); // this should be vectorized, but is not

英特尔编译器支持矢量化虚拟功能(https://software.intel.com/en-us/articles/virtual-vector-function-supported-in-intel-c-compiler-170)。 g ++是否支持这一点,但我不能使用它,或者这还没有实现?

0 个答案:

没有答案