C++ 17并行硬件实现

Hum*_*awi 5 c++ parallel-processing c++17

据我所知,C++ 17将带有Parallelism.但是,我无法理解的是它是一种特定的硬件并行性(默认为CPU)?或者它可以扩展到具有多个计算单元的任何硬件?

换句话说,我们会看到类似于"nVidia C++标准编译器"的东西,它将编译要在GPU上执行的并行部分吗?

例如,它是OpenCL的一些标准替代品吗?

注意:当然,我不是在问"nVidia会这么做吗?".我在问C++ 17标准是否允许,以及理论上是否可行.

Pet*_*ker 3

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

有几个要点需要理解。

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

其次,当您尝试并行化算法时存在固有的限制,这就是我添加这两个括号限定条件的原因。例如,仅当应用于输入范围的函数是可交换和关联的时,并行版本std::accumulate才会产生与非并行版本相同的结果。这里最明显的问题是浮点值,其中数学运算不具有关联性,因此结果可能会有所不同。同样,某些算法在并行化时实际上会产生更多开销;您获得了净加速,但完成了更多的总工作,因此这些算法的加速与处理单元的数量不是线性的。是一个例子:每个输出值都取决于前面的值,因此并行化算法并不简单。有多种方法可以做到这一点,但最终您应用组合器函数的次数比非并行算法要多。一般来说,为了反映这一现实,算法的复杂性要求有所放宽。std::partial_sum