假设我有两个核心。让我们将它们表示为core1和core2。如果我使用openmp来并行化我的程序,将生成两个线程。 openmp实现是否可以在core1上分配两个线程来执行而不是在core1和core2上?在第一种情况下,我们将失去并行性。
我正在使用icc附带的Intel openmp。默认情况下,是否可以在同一个cpu(核心)上运行不同的线程
感谢。
答案 0 :(得分:2)
可以指示OpenMP运行时对线程执行特定的绑定(或以英特尔术语固定)到可用的CPU内核。 OpenMP 4.0附带了以抽象和可移植的方式指定它的规定,而当前的OpenMP实现提供了它们自己的特定机制:
除非设置了这些,否则两个运行时默认为无绑定,并且OS可以自由地调度线程,因为它认为合适,例如它可能会在一个核心上调度两个线程。除非有其他正在运行的进程需要大量的CPU时间,否则后者是不太可能的。仍然大多数操作系统调度程序倾向于不断地迁移线程和进程,因此建议您使用绑定机制以获得最佳性能。