gpt4 book ai didi

c++ - 没有 ExecutionPolicy 的 std::transform 或 std::generate 可以并行吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:39:37 25 4
gpt4 key购买 nike

在 C++17 中引入了并行标准算法(使用 ExecutionPolicy 参数重载),其中定义了执行顺序、交错和并行化的严格规则,例如([algorithm.parallel.exec/3]):

The invocations of element access functions in parallel algorithms invoked with an execution policy object of type execution::sequenced_policy all occur in the calling thread of execution. [ Note: The invocations are not interleaved; see 4.6. — end note ]

(current draft 中的相同内容)

问题是我找不到对这些算法的旧的、非并行重载的任何此类要求。

问题:这是否意味着自 C++11 引入执行线程术语后,库实现者可以实现 std::transform 和 std::generate使用 SIMD/多线程/其他(?)?这是有原因的吗?

最佳答案

[res.on.data.races]/8 Unless otherwise specified, C++ standard library functions shall perform all operations solely within the current thread if those operations have effects that are visible (4.7) to users.

这排除了涉及任何用户定义实体的任何类型的幕后多线程。

我想,原则上,类似 std::sort 的东西正在研究 vector<int>可以证明不涉及用户定义的类,将工作发送到多个线程。这是相当牵强的,很难想象任何实现在实践中这样做。

关于c++ - 没有 ExecutionPolicy 的 std::transform 或 std::generate 可以并行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48153641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com