【问题标题】:shared memory vs distributed memory and multithread vs multiprocess共享内存与分布式内存和多线程与多进程
【发布时间】:2023-04-14 16:06:02
【问题描述】:

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

【问题讨论】:

    标签: shared-memory distributed-computing parallel-processing


    【解决方案1】:

    是的,是的,“在某种意义上是的”

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

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

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

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

    【讨论】:

    • 谢谢!通过多进程,我的意思是一个父进程,它产生了子进程。我不是指多个处理器。
    • 好吧,在那种情况下,通常不会,因为分布式内存多处理器不太可能运行单个内核,因此运行在其他 CPU 单元上的进程可能创建在单独的内核,由单独的服务器,以响应来自某个主 CPU 或任何软件系统的消息发起该作业。当然可以制造一个运行单个内核的连贯分布式内存机器,在这种情况下“是”,但这是多处理的疯狂边缘,你不会经常看到它。跨度>