共享内存 vs 分布式内存 和 多线程 vs 多进程

4

我正在自学并行编程。我想知道分布式内存是否总是多进程,而多线程是否总是共享内存?如果多进程可以同时用于分布式内存和共享内存吗? 谢谢和问候!

1个回答

5

是的,是的,以及“某种程度上的是”

在分布式内存系统中,不同的CPU单元有自己的内存系统。从另一个CPU访问可能会更慢或具有更有限的一致性模型,如果可能的话。这更典型地适用于消息传递多处理器。

使用多个线程进行并行编程更多地是一个软件范例而不是硬件问题,但您是正确的,使用术语线程基本上指定正在使用单个共享内存,它可能包括实际的多个处理器,也可能不包括多个内核线程,在这种情况下,线程将不会并行执行。

我不完全清楚最后一个问题的含义。当然,通过说“分布式内存”或“共享内存”,它意味着“分布在处理器之上”和“由处理器共享”,因此我想这些术语仅合理适用于多处理器系统或潜在的多处理器系统。如果我们在谈论软件意义上的多个进程,则我认为这基本上是分布式内存系统的要求,并且对于共享内存系统而言(它们可能被称为线程),基本上是一个要求。

我应该补充说明,分布式内存但具有缓存一致性的系统确实存在,并且是称为NUMA的共享内存多处理器设计类型。仅几年前,这些机器是并行计算的疯狂边缘,但现在英特尔Core i7处理器已将NUMA带入主流。


谢谢! 我所说的多进程是指从父进程中衍生出来的子进程。我不是指多个处理器。 - Tim
在这种情况下,通常不会,因为分布式内存多处理器不太可能运行单个内核,因此在其他CPU单元上运行的进程可能是由单独的服务器上的单独内核创建的,以响应来自某个主CPU或任何软件系统发起的作业的消息。当然,有可能制造一个运行单个内核的连贯分布式内存机器,那么答案就是“是”,但这是多处理的疯狂边缘,你很少见到它。 - DigitalRoss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接