假设我有以下代码:
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
也许我错过了这个前缀的作用。如何使函数可矢量化?
提前致谢!
答案 0 :(得分:1)
传统函数只能在函数的参数属于以下某个类别时转换(这是https://software.intel.com/sites/products/documentation/doclib/iss/2013/compiler/cpp-lin/GUID-42986DEF-8710-453A-9DAC-2086EE55F1F5.htm下记录的当前限制&#34;使用向量声明的限制&#34;) :
您的程序使用的是用户定义的数据类型Vec3,它不属于上述四种类别。