OpenMP与矢量化的比较

时间:2012-05-09 04:30:26

标签: openmp vectorization

给定一个示例函数(示例如下所示),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];
      }
}

我想知道

  1. OpenMP之间的性能是否会有任何差异 和矢量化
  2. 使用一个优于另一个是否有任何优势。
  3. 是否有可能同时使用OpenMP和矢量化。
  4. 注意:我没有给出一个关于不同SSE版本,处理器/核心数量(在OpenMP中扩展的线程数量)等等...我的问题一般。答案也可以更具体。

2 个答案:

答案 0 :(得分:5)

OpenMP和矢量化竞争技术,而是互相增强。矢量化可以提高具有矢量功能(SSE / 3DNow!/ Altivec /等)的CPU内核的串行性能,从而使每个线程运行得更快,而OpenMP可以使用多个可用内核以运行多个线程为了并行解决更大的问题。

总结:

  • 矢量化串行应用程序通常比非矢量化串行应用程序运行得更快;
  • 非向量化OpenMP应用程序通常比非向量化串行应用程序运行得更快(如果正确编写并且算法允许并行化);
  • 矢量化OpenMP应用程序通常比非矢量化OpenMP应用程序运行得更快,后者通常比非矢量化串行应用程序运行得更快。

矢量化只是数据并行(对多个数据项应用相同的操作)并且在尽可能最低的硬件级别(核心/ ALU)上工作,而OpenMP可以是数据和/或任务并行,并且是更高的抽象水平。

一如既往存在“依赖”这一论点,因为矢量化或OpenMP或矢量化+ OpenMP的性能可能取决于硬件,内存带宽,缓存使用等等......

关于你的案例功能,它取决于矢量的大小。如果它们太小,使用OpenMP将没有任何好处,甚至由于开销导致执行速度变慢。矢量化可能会缩短执行时间。

答案 1 :(得分:4)

  1. 衡量,不要争辩。
相关问题