如何将cv :: Mat与AVX-512 / AVX2架构对齐?

时间:2017-05-01 10:56:28

标签: c++ opencv parallel-processing alignment vectorization

Disclamer:我是一个新手,所以如果这个肮脏的农民问一些不好的问题。

据我了解,AVX-512架构可以同时处理多达16个浮点变量,而AVX2"仅#34; 4.

为了利用这一点,必须对齐数据。当我发现here时,可以通过以下方式完成:

对于AVX-512:

alignas(32) float a[8];

对于AVX2:

alignas(16) float a[8];

好的,所以我的第一个问题是:,因为16是因子32,为什么我们也不总是将alignas(32)用于AVX2架构?也许(可能)我错过了什么。

然后,我有这个功能:

bool interpolate(const Mat &im, Mat &res, /*...*/){/*...*/}

分配的内容:

cv::Mat im(r, c, CV_32FC1); //similarly res

英特尔编译器报告告诉我这两个矩阵没有对齐。所以我的第二个问题是: 如何分配它们以便它们是16/32对齐?我可以分配一个对齐的指针,并将它传递给cv::Mat构造函数,如:

 float *aligned_ptr = /*allocate r*c 16/32 aligned floating points*/
 cv::Mat m (r, c, CV_32FC1, /* use aligned_ptr somehow*/);

0 个答案:

没有答案