oLe*_*Len 5 c++ multithreading hpc openmp c++11
我目前正在从事一个混合高性能计算 (HPC) 和交互性的项目。
因此,HPC 部分依赖于 OpenMP(主要是具有大量相同计算的 for 循环),但它包含在具有 GUI 和多线程的更大框架中,目前使用 c++11 线程(std::thread和std::async)实现。
我已阅读OpenMP 与 C++ promises 和 futures 一起玩得好吗?以及为什么在使用嵌套的 OpenMP pragma 时 c++11 线程变得不可连接?混合使用 OpenMP 和 C++11 线程并不是一个好主意,但到目前为止它一直对我有用。
出于不同的原因,我想对此进行改进,但我不确定采用哪种策略。
在OpenMP vs C++11 线程中,我读到std::thread由于线程的创建和销毁,替换 OpenMP对性能有相当大的影响,但我找不到任何关于通过基于任务的并行性替换 OpenMP 加速的内容std::async。在我看来,这应该比std::thread因为线程管理是由操作系统完成的要快,但我还不相信这是适用的。我还没有尝试过,因为它会涉及大量的重构,我希望先听听其他意见。
您有协调 HPC 和交互性的经验吗?在你眼里,应该std::async比 OpenMP 快吧?