c++ 17并行硬件实现
C++ 17 parallelism hardware implementation
据我所知,c++ 17将引入并行性。然而,我不能理解的是它是一个特定的硬件并行(CPU默认)?或者它可以扩展到任何具有多个计算单元的硬件上?
换句话说,我们是否会看到类似的东西,例如"nVidia c++标准编译器",它将编译并行部分以在gpu上执行?
它会是一些更标准化的替代OpenCL吗?
注意:当然,我不是问"nVidia会这样做吗?"。我在问c++ 17标准是否允许这样做,以及理论上是否可能。
这个问题提供了一个到提出这个更改的论文的链接,并且,就并行性方面而言,所提出的内容并没有实质性的更改。是的,编译器可以做任何对目标硬件有意义的事情来并行化各种算法的执行,只要它得到正确的答案(有一些保留),并且它不会强加不必要的开销(同样,有一些保留)。
有几个要点需要理解。
首先,c++ 17的并行性是而不是一种通用的并行编程机制。它提供了许多STL算法的并行版本,仅此而已。因此,它不能替代更强大的机制,如OpenCL, TBB等。第二,当你尝试并行化算法时,存在固有的限制,这就是为什么我添加了这两个括号内的限制。例如,std::accumulate
的并行版本将产生与非并行版本相同的结果,只有当被应用于输入范围的函数是交换的和关联的。这里最明显的问题是浮点值,其中的数学运算不是关联的,因此结果可能不同。类似地,一些算法在并行化时实际上会带来更多的开销;你得到了一个净加速,但是完成了更多的总工作量,所以这些算法的加速在处理单元的数量上不是线性的。std::partial_sum
就是一个例子:每个输出值都依赖于前一个值,因此并行化算法并不简单。有很多方法可以做到这一点,但是你最终会比非并行算法应用更多的组合函数。一般来说,为了反映这一现实,对算法的复杂性要求有所放宽。
相关文章:
- 如果没有malloc,链表实现将失败
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用简单类型列表实现的指数编译时间.为什么
- 如果编译的源代码是特定于它编译的硬件的,我们如何分发它
- 如何在BST的这个简单递归实现中消除警告
- 实现一个在集合上迭代的模板函数
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 如何正确实现和访问运算符的各种自定义枚举器
- C++Union/Struct位域的实现和可移植性
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 在c++中实现LinkedList时,应出现未处理的错误
- 硬件抽象层 (HAL) 中实现的动态切换
- 在 Directx11 上实现硬件实例化
- 实现通用地图 [来自硬件]
- C++ 堆栈实现硬件错误
- 如何为不同的硬件功能设计具有独特实现的过程
- c++ 17并行硬件实现
- 创建一个类的多个实现,一个用于发送Qt信号,另一个用于直接使用硬件