我目前正在从事一个混合高性能计算 (HPC) 和交互性的项目。
因此,HPC 部分依赖于 OpenMP(主要是具有大量相同计算的 for 循环),但它包含在具有 GUI 和多线程的更大框架中,目前通过 c++11 线程实现(std::thread
and std::async
).
我读过了 and 为什么使用嵌套 OpenMP 编译指示时,c++11 线程变得不可连接? https://stackoverflow.com/questions/13197510/why-do-c11-threads-become-unjoinable-when-using-nested-openmp-pragmas混合 OpenMP 和 C++11 线程并不是一个好主意,但到目前为止它一直对我有用。
由于不同的原因,我想对此进行改进,但我不确定采取哪种策略。
At OpenMP 与 C++11 线程 https://stackoverflow.com/questions/23258037/openmp-vs-c11-threads,我读到将 OpenMP 替换为std::thread
由于线程的创建和销毁,对性能有相当大的影响,但我找不到任何关于通过基于任务的并行性替换 OpenMP 加速的信息std::async
。在我看来,这应该比std::thread
因为线程管理是由操作系统完成的,但我还不相信这是适用的。我还没有尝试过,因为它会涉及大量的重构,我想先听听其他的意见。
您有协调 HPC 和交互性的经验吗?在你眼里,应该std::async
与 OpenMP 相当快吗?
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)