给定一个示例函数(示例如下),for 循环可以使用 OpenMP 并行化,也可以使用矢量化进行矢量化(假设编译器进行矢量化)。
例子
void function(float* a, float* b, float* c, int n)
{
for(int i = 0; i < n; i++)
{
c[i] = a[i] * b[i];
}
}
我想知道
- OpenMP 和 Vectorization 在性能上是否会有差异
- 使用一个比另一个有什么优势。
- 是否有可能同时使用 OpenMP 和矢量化。
注意:我没有给出不同的 SSE 版本、处理器/内核的数量(随着 OpenMP 中线程数量的增加)等......我的问题是一般性的。答案也可以更具体。