如何在intel的自动矢量化中允许用户定义的函数?

时间:2014-06-12 10:53:29

标签: user-defined-functions vectorization intel icc

假设我有以下代码:

class Vec3
{
    // ... deleted, not needed...

    public:
        Vec3 operator+(const Vec3 &rh) const;
};

void test(Vec3 *a, Vec3 *b, Vec3 *c, size_t len)
{
    for(size_t i = 0; i < len; i++)
        c[i] = a[i] + b[i];
}

这似乎是矢量化的一个普通示例,但由于operator +()是用户定义的函数,因此该循环不会自动矢量化。我还尝试按照建议here添加__declspec(vector),但这会导致编译错误:

error: return type with class/struct/union is not supported in vector function

也许我错过了这个前缀的作用。如何使函数可矢量化?

提前致谢!

1 个答案:

答案 0 :(得分:1)

传统函数只能在函数的参数属于以下某个类别时转换(这是https://software.intel.com/sites/products/documentation/doclib/iss/2013/compiler/cpp-lin/GUID-42986DEF-8710-453A-9DAC-2086EE55F1F5.htm下记录的当前限制&#34;使用向量声明的限制&#34;) :

  • (联合国)签署了8,16,32或64位整数
  • 32位或64位浮点 64位或128位复数
    指针(C ++引用被认为是 指针数据类型)

您的程序使用的是用户定义的数据类型Vec3,它不属于上述四种类别。