gpt4 book ai didi

c++ - openmp是否有可能在同一个cpu(核心)上运行不同的线程

转载 作者:太空宇宙 更新时间:2023-11-04 02:56:31 25 4
gpt4 key购买 nike

假设我有两个核心。让我们将它们表示为 core1 和 core2。如果我使用 openmp 并行化我的程序,将生成两个线程。 openmp 实现是否有可能在 core1 上分配两个线程来执行而不是在 core1 和 core2 上执行?在第一种情况下,我们将失去并行性。

我正在使用 icc 中包含的 Intel openmp。默认情况下,是否可以在同一个cpu(核心)上运行不同的线程

谢谢。

最佳答案

可以指示 OpenMP 运行时对可用 CPU 内核执行线程的特定绑定(bind)(或 Intel 术语中的固定)。 OpenMP 4.0 提供了以抽象和可移植的方式对此进行指定的规定,而当前的 OpenMP 实现提供了自己的特定机制来执行此操作:

  • KMP_AFFINITY 用于 Intel 编译器 - 参见 here ;
  • GOMP_CPU_AFFINITY 用于 GCC(和兼容模式下的 Intel)- 参见 here .

除非设置了这些,否则两个运行时都默认为无绑定(bind),并且操作系统可以自由地分派(dispatch)它认为合适的线程,例如它可能会在一个核心上分派(dispatch)两个线程。后者不太可能,除非有其他正在运行的进程需要大量 CPU 时间。大多数操作系统调度程序仍然倾向于不断迁移线程和进程,因此建议您使用绑定(bind)机制以获得最佳性能。

关于c++ - openmp是否有可能在同一个cpu(核心)上运行不同的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16747653/

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