并行计算中处理器和进程的区别?

Difference between processor and process in parallel computing?

每次我遇到类似“process 0 does x task”这样的东西时,我倾向于认为它们的意思是处理器

多读了一点,我发现有两种内存分类,共享内存和分布式内存: 共享内存执行类似于线程的操作(意味着所有处理器都可以使用相同的数据 - 因此 将其称为进程是有意义的 )但是,即使对于分布式内存,它也被称为 process 而不是处理器。例如:"Process 0 is computing the partial dot product"

为什么会这样?为什么叫进程而不叫处理器呢?

PS。我希望这个问题不是微不足道的:)

对我来说,处理器是指负责计算操作的机器。进程是某个程序的单个实例。 (我希望我明白你的意思)。

我会说他们模糊地使用了这些术语,因为大多数情况下上下文允许它并且差异在某种程度上可能是微妙的。也就是说,由于每个进程(当它是单线程时)都在处理器上执行,人们通常不想区分物理实体(处理器)和逻辑实体(进程)。

在考虑具有多线程功能的处理器时,这种假设可能是错误的(SMT, and Hyper-Threading for Intel processors) and/or executing multi-threaded applications because processes run on any available processor (or thread). In those situations, people should be stricter when making this affirmations. Still, since it is possible to bind one process (and even one thread) to a processor (or processor thread) using affinity 命令,在这种情况下它们可能会模糊地使用这两个术语。

区别在于硬件与软件。

进程是您程序的逻辑实例。处理器是运行进程的硬件实体。大多数时候,您并不关心实际的处理器,只关心正在执行的进程。

例如,OS 可能会决定暂时让您的进程进入休眠状态,以便为其他应用程序提供运行时间,稍后它可能会在不同的处理器上唤醒它们。只要您的过程产生了预期的结果,您就不会对此感兴趣:您只关心计算,而不是它发生的地方。

这些其他答案都非常准确。处理器是物理的,进程是软件的。因此,四核 CPU 将有 4 个处理器,但可以 运行 更多进程。

不过,您对分布式术语的混淆是正常的。在分布式计算中,通常 X 数量的进程将被执行,等于硬件处理器的数量。在这种情况下,每个进程都会在软件中获得一个 ID,通常称为等级。 Rank 独立于处理器,不同的 Rank 有不同的任务。因此,当您报告状态时,信息是相对于进程等级的,而不是物理处理器。

换句话说,在分布式计算中,每个处理器上通常会有一个进程 运行ning。该进程将有一个唯一的 ID,该 ID 在软件中比 运行 所在的物理处理器更重要,因此会提供有关该进程的状态信息。由于进程和处理器的数量相等,这种区别可能会变得有点模糊。