OpenMP 4 SIMD向量化,用于c=c+a*b的C语言代码

3

我不知道OpenMP 4是否支持这个for循环。使用pragma和不使用的速度是相同的。

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

2
你使用了哪些编译器选项?用的是哪个编译器?操作系统是什么?硬件是什么?在我看来,对于x86编译器而言,“omp simd”相当无意义,因为它具有自动向量化功能。GCC使用“-O3”进行自动向量化。尝试使用“-O2”与不使用SIMD进行比较。如果“col”的大小非常大,则此操作无论如何都会受到内存带宽的限制。 - Z boson
1个回答

3

我猜pragma无效的原因有两个:

  • 代码已经向量化,没有需要使用simd指令;
  • 代码受到内存限制,因此增加更多线程计算不会有太大的差别,除非可以让您使用更多的内存带宽。请参见这个优秀的答案了解更多详情。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接