【问题标题】:OpenMP 4 simd vectorization for c=c+a*bc=c+a*b 的 OpenMP 4 simd 矢量化
【发布时间】:2016-03-30 17:43:46
【问题描述】:

我不知道 OpenMP 4 是否支持这个 for 循环。有pragma和没有pragma的速度是一样的。

#pragma omp  for simd
for (size_t i = 0; i < col; i++)
{
    C[i] += A[i]* B[i];
}

【问题讨论】:

  • 您使用了哪些编译器选项?什么编译器?什么操作系统?什么硬件。在我看来,omp simd 对于 x86 编译器由于自动矢量化而毫无意义。 GCC 使用带有-O3 的自动矢量化。尝试比较是否使用 SIMD 和 -O2col 的大小是多少。如果它非常大,那么这个操作无论如何都会受到内存带宽的限制。

标签: c++ openmp simd


【解决方案1】:

编译指示无效的原因(我猜)是双重的:

  • 在没有simd 指令的情况下,代码已经向量化;和
  • 代码无论如何都受内存限制,因此添加更多线程来计算它不会产生太大差异,除非它可以让您访问更多内存带宽。有关详细信息,请参阅this excellent answer

【讨论】:

    猜你喜欢
    • 2016-03-20
    • 2015-06-12
    • 2021-10-04
    • 2020-01-27
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 2011-10-19
    相关资源
    最近更新 更多