c++ 17并行硬件实现

C++ 17 parallelism hardware implementation

本文关键字:实现 硬件 并行 c++      更新时间:2023-10-16

据我所知,c++ 17将引入并行性。然而,我不能理解的是它是一个特定的硬件并行(CPU默认)?或者它可以扩展到任何具有多个计算单元的硬件上?

换句话说,我们是否会看到类似的东西,例如"nVidia c++标准编译器",它将编译并行部分以在gpu上执行?

它会是一些更标准化的替代OpenCL吗?

注意:当然,我不是问"nVidia会这样做吗?"。我在问c++ 17标准是否允许这样做,以及理论上是否可能。

这个问题提供了一个到提出这个更改的论文的链接,并且,就并行性方面而言,所提出的内容并没有实质性的更改。是的,编译器可以做任何对目标硬件有意义的事情来并行化各种算法的执行,只要它得到正确的答案(有一些保留),并且它不会强加不必要的开销(同样,有一些保留)。

有几个要点需要理解。

首先,c++ 17的并行性是而不是一种通用的并行编程机制。它提供了许多STL算法的并行版本,仅此而已。因此,它不能替代更强大的机制,如OpenCL, TBB等。

第二,当你尝试并行化算法时,存在固有的限制,这就是为什么我添加了这两个括号内的限制。例如,std::accumulate的并行版本将产生与非并行版本相同的结果,只有当被应用于输入范围的函数是交换的和关联的。这里最明显的问题是浮点值,其中的数学运算不是关联的,因此结果可能不同。类似地,一些算法在并行化时实际上会带来更多的开销;你得到了一个净加速,但是完成了更多的总工作量,所以这些算法的加速在处理单元的数量上不是线性的。std::partial_sum就是一个例子:每个输出值都依赖于前一个值,因此并行化算法并不简单。有很多方法可以做到这一点,但是你最终会比非并行算法应用更多的组合函数。一般来说,为了反映这一现实,对算法的复杂性要求有所放宽。