Multithreading 运行并行程序时,硬件上会发生什么

Multithreading 运行并行程序时,硬件上会发生什么,multithreading,process,parallel-processing,openmp,core,Multithreading,Process,Parallel Processing,Openmp,Core,例如,一台机器有两个处理器,每个处理器有两个内核。我使用OpenMP编写了一个并行程序,并用3个线程运行它。硬件上发生了什么?我认为只有一个处理器会处理这个程序(是这样吗?),但我无法想象三个线程是如何分配到两个内核的。请帮忙。谢谢。在所谓的“答案”范围内回答您的问题几乎是不可能的-如果您想得到“真实”的答案,您需要仔细阅读针对特定机器体系结构的并行处理实现。简短的回答是“视情况而定”。但是您的程序可以在两个处理器上运行,在四个内核中的任何一个或所有内核上运行;这里要理解的关键是,您可以通过程序

例如,一台机器有两个处理器,每个处理器有两个内核。我使用OpenMP编写了一个并行程序,并用3个线程运行它。硬件上发生了什么?我认为只有一个处理器会处理这个程序(是这样吗?),但我无法想象三个线程是如何分配到两个内核的。请帮忙。谢谢。

在所谓的“答案”范围内回答您的问题几乎是不可能的-如果您想得到“真实”的答案,您需要仔细阅读针对特定机器体系结构的并行处理实现。简短的回答是“视情况而定”。但是您的程序可以在两个处理器上运行,在四个内核中的任何一个或所有内核上运行;这里要理解的关键是,您可以通过程序的结构在某种程度上控制它,但OMP的巧妙之处在于,通常“您不应该在意”。如果线程同时运行,它们通常每个线程都有一个内核;但是如果他们需要访问相同的内存空间,这可能会降低您的速度,因为“短期数据”喜欢驻留在处理器(核心)的缓存中,这意味着有大量的无序数据正在进行。如果不同的线程不必共享内存,则可以获得最大的性能改进。

我有点困惑,这两个处理器可能都有程序副本。你能给我推荐一些文章或书吗?谢谢大多数指令“活在内存中”。在多线程程序中,调度程序指示“处理器3的核心2,执行从
0x00123400
开始存储的指令。一毫秒后,它可能会说“现在已经足够了,存储到目前为止的状态,然后执行其他操作。”“.没有立即想到的书籍推荐对不起。嗨@Floris,据我所知,如果处理器之间存在通信(这里不是内核,假设内核在处理器内部),那么程序必须使用MPI编写。如果我只使用OpenMP编写程序呢?系统是否只将作业分配给一个处理器或多个不同的处理器?我认为每个处理器都有自己的内存,它们也有一个共享内存,我不认为处理器只需要使用共享内存来处理OpenMP程序。无论如何,我不太确定……用OMP编写的程序可以在所有处理器上使用所有内核。