Multithreading 使用openMP进行多核处理与多线程

Multithreading 使用openMP进行多核处理与多线程,multithreading,multiprocessing,openmp,multicore,Multithreading,Multiprocessing,Openmp,Multicore,这个问题听起来很基本,但我找不到任何具体的答案。现在假设我们有一个多核处理器,比如corei5 680(2个物理核,操作系统支持HT的4个可用核)。 我的问题是openMP在图中的确切位置是什么? 1-当我们说使用openMP进行多线程时,它是否会自动利用所有可用的内核(本例中为4个虚拟内核),并根据可用的CPU周期执行线程? 2-openmp是否控制如何使用物理/虚拟内核?或者它是抽象的,并提供了多线程环境,比如java 请原谅,如果这听起来很基本,但我试图在网上找到答案,但没有找到任何令人满

这个问题听起来很基本,但我找不到任何具体的答案。现在假设我们有一个多核处理器,比如corei5 680(2个物理核,操作系统支持HT的4个可用核)。 我的问题是openMP在图中的确切位置是什么? 1-当我们说使用openMP进行多线程时,它是否会自动利用所有可用的内核(本例中为4个虚拟内核),并根据可用的CPU周期执行线程? 2-openmp是否控制如何使用物理/虚拟内核?或者它是抽象的,并提供了多线程环境,比如java

请原谅,如果这听起来很基本,但我试图在网上找到答案,但没有找到任何令人满意的


谢谢

这取决于您正在考虑的OpenMP版本/功能,因为我相信更高版本可能会为您提供更多功能,但原始库是围绕的数据并行
构建的。一般来说,OpenMP和其他数据并行编程模型试图抽象出底层硬件,程序员将其计算声明为一系列对数据的操作,然后由OMP调度

要回答第一个问题,OS调度器将跨内核调度线程,OMP调度器将跨可用线程调度工作

#pragma omp parallel for
for (i = 0; i < N; i++)
    a[i] = 2 * i;
还可以在某种程度上控制多处理器(多个套接字)系统中不同处理器之间的工作调度方式


您还可能会发现以下指南很有用。

如果在投反对票后能有一些评论,我们将不胜感激+1,“OMP调度程序将根据多个因素选择要使用的内核(real或HT),包括它们的负载、给它的工作量以及您可能提供的任何提示。”您是否有关于这方面的详细信息来源?我真的很想知道更多这方面的情况。如果你看到这个问题,我想猜测OpenMP在做什么,了解更多会有所帮助。我不认为这是OMP标准的一部分。它特定于操作系统调度器和由您使用的OMP版本实现的调度器。
#pragma omp parallel num_threads(3)
#pragma omp for
for (i = 0; i < N; i++)
    a[i] = 2 * i;