【问题标题】:Why openMP does not support reduction for arrays in C?为什么 openMP 不支持 C 中数组的归约?
【发布时间】:2014-05-15 15:15:16
【问题描述】:

在 Fortran 中的 OpenMP 3.0 中,特殊构造支持缩减,而在 C/C++ 中,它被委托给程序员。我想知道这是否有特殊原因,因为 OpenMP 3.0 于 2008 年问世,所以我认为现在也有足够的时间为 C/C++ 实现它。是否有任何与 C/C++ 相关的特定技术原因,为什么 C/C++ 仍然不支持它?

【问题讨论】:

  • 为什么人们还在使用 Fortran?以及为什么很多人在 2014 年仍然使用 ANSI C89 限制,即使大多数 C 编译器使用的 GNU89 比 C89 更接近 C99?
  • @Zboson 太讽刺了 :) 我想我的问题还不清楚。我的意思是是否有任何特定的技术原因导致 C/C++ 不支持它,而不是哲学问题。
  • Fortran 始终知道其数组的大小,无论是静态分配的还是动态分配的。 C/C++ 只知道静态数组的大小。
  • @romantsegelskyi,我猜 Hristo Iliev 回答了你的问题。顺便说一句,我没有对你投反对票。但无论如何,自己做一个数组缩减是很容易的。无论如何,我经常手动减少。
  • @HristoIliev 非常感谢,这是我一直在寻找的答案。

标签: parallel-processing openmp


【解决方案1】:

正如 cmets 中提到的,OpenMP 默认不支持数组缩减的原因是它不知道数组的大小。 Fortran 默认支持对数组进行归约,因为它始终知道其数组的大小,无论是静态分配的还是动态分配的。 C/C++只知道静态数组的大小。

【讨论】:

  • 附带说明:OpenMP 3.1 版之前不允许在 C 和 C++ 的归约操作中使用聚合对象,包括数组。 OpenMP 4.0 引入了在 C++ 中使用具有重载运算符的类的能力,因此现在可以使用实现数组的类来减少数组,并重载 operator+() 以执行元素求和和 operator=() 以从标量执行数组初始化.
猜你喜欢
  • 2011-07-06
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
相关资源
最近更新 更多