c++ - 建议将 std::execution 和 OpenMP 结合起来吗?
问题描述
我使用 OpenMP 已经有一段时间了。最近,在一个新项目上,我选择使用c++17,用于一些功能。
因此,我一直担心允许并行化算法的 std::execution 。这看起来非常强大和优雅,但是它们是 OpenMP 的许多功能非常有用,但不容易与算法一起使用(屏障、SIMD、关键等)。
所以我认为将std::execution::par
(or unseq_par
) 与 OpenMP 混合。这是个好主意,还是我应该只使用 OpenMP?
解决方案
不幸的是,这不是官方支持的。它可能工作也可能不工作,具体取决于实现,但它不是可移植的。
只有最新版本 OpenMP 5.0 甚至定义了与 C++11 的交互。一般来说,使用 C++11 和转发的任何内容“可能会导致未指定的行为”。虽然 OpenMP 规范的未来版本预计将解决以下功能,但目前它们的使用可能会导致未指定的行为。
- 对齐支持
- 标准布局类型
- 允许移动构造投掷
- 定义移动特殊成员函数
- 并发
- 数据依赖排序:原子和内存模型
- 标准库的补充
- 线程本地存储
- 并发动态初始化和销毁
- C++11 库
虽然没有提到 C++17 及其特定的高级并行性支持,但从这个列表中可以清楚地看出,它不受支持。
推荐阅读
- python - 用 Beatifulsoup 试吃
- sql - 在where子句中的SQL错误未知列?
- c# - 聊天框不工作 c#,Visual Studio,Winforms,Bunifu UI
- javascript - 来自后端的 Vue.js 图像数组作为对象数组返回到前端
- python - 为什么在 Python 中使用 Ray 并行化任务时会出现 PicklingError?
- node.js - AWS DynamoDB 条件获取
- python-3.x - 数值作为字符串并转换为实际数值
- shell - awk:解析文件时丢失数据
- microservices - 对于基于 Spring 的微服务,我们如何从数据湖中推送和拉取数据。.如何使用微服务与数据湖中的数据进行交互
- php - 使用 PHP MySQL 选择和更新多个 id 的单选选项