C++ 17 并行硬件实现
C++ 17 parallelism hardware implementation
据我了解,C++ 17 将附带 Parallelism。但是,我无法理解的是它是特定的硬件并行性(默认为CPU)吗?或者它可以扩展到任何具有多个计算单元的硬件?
换句话说,我们会看到类似 "nVidia C++ standard compiler" 的东西,它会编译要在 GPU 上执行的并行部分吗?
例如,它会是 OpenCL 的一些更标准化的替代品吗?
注意:没错,我不是问"Will nVidia do that?"。我在问 C++ 17 标准是否允许这样做,理论上是否可行。
该问题为提出此更改的论文提供了 link,并且在并行性方面,所提出的内容没有实质性更改。是的,编译器可以做任何对目标硬件有意义的事情来并行执行各种算法,只要它得到正确的答案(有一些保留)并且它不会强加不必要的开销(再次,有一些保留) .
有几点需要理解。
首先,C++17 并行性不是通用的并行编程机制。它提供许多 STL 算法的并行版本,仅此而已。所以它不能替代更强大的机制,如 OpenCL、TBB 等。
其次,当您尝试并行化算法时存在固有的局限性,这就是我添加这两个带括号的限定条件的原因。例如,std::accumulate
的并行版本将产生与非并行版本 相同的结果,仅当 应用于输入范围的函数是可交换和结合的。这里最明显的问题是浮点值,其中数学运算不是关联的,因此结果可能不同。同样,某些算法在并行化时实际上会增加开销;您获得了净加速,但是完成的总工作量更多,因此这些算法的加速不会与处理单元的数量成线性关系。 std::partial_sum
是一个例子:每个输出值都依赖于前面的值,所以并行化算法并不简单。有很多方法可以做到这一点,但您最终会比非并行算法应用组合器函数更多次。总的来说,为了反映这一现实,对算法的复杂性要求有所放宽。
据我了解,C++ 17 将附带 Parallelism。但是,我无法理解的是它是特定的硬件并行性(默认为CPU)吗?或者它可以扩展到任何具有多个计算单元的硬件?
换句话说,我们会看到类似 "nVidia C++ standard compiler" 的东西,它会编译要在 GPU 上执行的并行部分吗?
例如,它会是 OpenCL 的一些更标准化的替代品吗?
注意:没错,我不是问"Will nVidia do that?"。我在问 C++ 17 标准是否允许这样做,理论上是否可行。
该问题为提出此更改的论文提供了 link,并且在并行性方面,所提出的内容没有实质性更改。是的,编译器可以做任何对目标硬件有意义的事情来并行执行各种算法,只要它得到正确的答案(有一些保留)并且它不会强加不必要的开销(再次,有一些保留) .
有几点需要理解。
首先,C++17 并行性不是通用的并行编程机制。它提供许多 STL 算法的并行版本,仅此而已。所以它不能替代更强大的机制,如 OpenCL、TBB 等。
其次,当您尝试并行化算法时存在固有的局限性,这就是我添加这两个带括号的限定条件的原因。例如,std::accumulate
的并行版本将产生与非并行版本 相同的结果,仅当 应用于输入范围的函数是可交换和结合的。这里最明显的问题是浮点值,其中数学运算不是关联的,因此结果可能不同。同样,某些算法在并行化时实际上会增加开销;您获得了净加速,但是完成的总工作量更多,因此这些算法的加速不会与处理单元的数量成线性关系。 std::partial_sum
是一个例子:每个输出值都依赖于前面的值,所以并行化算法并不简单。有很多方法可以做到这一点,但您最终会比非并行算法应用组合器函数更多次。总的来说,为了反映这一现实,对算法的复杂性要求有所放宽。