多线程 (openMP) - 多少个并行线程
multithreading (openMP) - how many parallel threads
我想知道在具有 8 个内核的硬件上是否可以同时运行超过 8 个线程。
如果是这样,使用 openMP 并行化 N 个计算,我可以创建大小的块,比如 N/8,并在每个线程中进一步分叉到 (N/8)/8 个线程,也许还有更多?
嵌套并行化时会发生什么情况? 我还有 8 个可用于嵌套并行的线程吗?
谢谢!!
8 个内核在给定时间点最多只能同时运行 8 个线程。但是,很大程度上取决于您的线程正在做什么。如果它们正在执行 CPU 密集型任务,则不建议生成比内核数多得多的线程(几个可能没问题)。否则,过多的上下文切换和缓存未命中将开始降低性能。但是,如果存在大量 I/O,则线程可能会被大量阻塞,而不使用 CPU,因此您可以并行运行更多线程。
底线是,您需要在特定情况下、在特定环境中衡量性能。
另请参阅此相关线程。
现代 CPU 处理器可以选择超线程。
这意味着管道可以同时运行两个或多个线程。
所以可以同时运行的线程数为:
total_threads = num_procs * 超线程因子
通常,超线程因子 = 2。
对于 CPU 密集型工作负载,必须运行total_threads。对于 io 密集型工作负载,应使用 total_threads * 2 线程。这样,我们可以将某些线程的计算与其他线程的 io 重叠。
这些经验法则是我遵循的。您可以根据工作负载更改它。
首先,您不能运行超过 8 个线程。其次,如果没有其他工作,请诉诸嵌套并行性,因为 openmp 在这方面必须改进很多。
相关文章:
- 并行块(线程清理器)之外的 OpenMP 中的争用条件;误报?
- System Verilog DPI - 在 cpp 中运行并行线程,在 SV 中运行另一个并行线程
- 是否可以限制C++17并行"for_each"的线程数
- 是否可以在并行区域中为共享 2D 数组创建选定元素的线程本地副本?(共享,私有,障碍:OPenMP)
- 在任何地方对C++中所有并行线程中的所有锁定和解锁实例使用相同的 std::mutex 和 lock 对象
- 查找使用并行线程加总数的所有组合
- 如何在for循环(C )中运行并行线程
- 当并行线程访问同一数据结构的其他成员时,正确的方法可以在Visual Studio上的OpenMP上并行循环
- C++STL(ExecutionPolicy)算法如何确定要使用多少并行线程
- 从并行线程在主 Maya 线程上执行代码
- 如何在 WinRT 下的并行线程中执行 c++ 函数
- 英特尔TBB在并行线程中运行函数
- 多线程 (openMP) - 多少个并行线程
- 使用win32 API创建并行线程
- 并行线程执行以实现性能
- 如何在Mac上用c++停止正在运行的并行线程
- openMP没有并行线程
- 中断来自并行线程的阻塞调用
- 在并行线程中访问数据库,可行的选项
- Boost group_threads最大并行线程数