首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >共享内存与分布式内存的主要区别

共享内存与分布式内存的主要区别
EN

Stack Overflow用户
提问于 2016-04-15 08:46:16
回答 2查看 34.2K关注 0票数 10

我有点困惑于共享内存和分布式内存之间的区别。你能澄清一下吗?

  1. 是为一个处理器共享内存,还是为多个处理器(网络)分配共享内存?
  2. 如果我们有共享内存,为什么我们需要分布式内存?
EN

回答 2

Stack Overflow用户

发布于 2016-04-16 03:50:26

简短回答

共享内存和分布式内存是与某些类型的并行编程一起使用的低级编程抽象。共享内存允许多个处理元素共享内存中的相同位置(即看到彼此之间的读写),而无需任何其他特殊指令,而分布式内存需要显式命令将数据从一个处理元素传输到另一个处理元素。

详细答复

对于共享内存和分布式内存这两个术语,需要考虑两个问题。一种是这些作为编程抽象意味着什么,另一种是它们在硬件实际实现方面的含义。

在过去,有真正的共享内存缓存-相干多处理器系统。这些系统通过共享总线彼此通信,并与共享的主内存通信。这意味着从任何处理器到主存的任何访问都有相同的延迟。今天,这些类型的系统没有被制造出来。相反,在处理元素和内存元素之间有各种各样的点对点链接(这就是用于非统一内存访问,即NUMA。的原因)。然而,直接通过内存进行通信的想法仍然是一种有用的编程抽象。因此,在许多系统中,这是由硬件处理的,程序员不需要插入任何特殊指令。使用这些抽象的一些常见编程技术是OpenMP丝线

分布式内存传统上与在本地内存上执行计算的处理器相关联,然后使用显式消息与远程处理器传输数据。这增加了程序员的复杂性,但简化了硬件实现,因为系统不再需要维护所有内存实际上都共享的错觉。这种类型的编程传统上用于具有数百或数千个处理元素的超级计算机。一种常用的技术是MPI

然而,超级计算机并不是唯一具有分布式内存的系统。另一个例子是GPGPU编程,它适用于今天销售的许多台式机和膝上型计算机系统。库达OpenCL都要求程序员显式地管理CPU和GPU之间的共享(或者在OpenCL情况下使用其他加速器)。这很大程度上是因为当GPU编程开始时,GPU和CPU内存是由PCI总线分隔的,与在本地连接的内存上执行计算相比,PCI总线的延迟非常长。因此,在内存分离(或分布)和两个处理元素(CPU和GPU)之间的通信需要显式通信的情况下,开发了编程模型。现在许多系统在同一个芯片上都有GPU和CPU元素,有一些建议允许GPGPU编程有一个更像共享内存的接口。

票数 23
EN

Stack Overflow用户

发布于 2016-04-15 09:21:39

例如,在现代x86术语中,一台物理计算机中的所有CPU共享内存。例如,4个18核心CPU的4套接字系统.每个CPU都有自己的内存控制器,但它们之间相互通信,因此所有CPU都是一个一致性域的一部分。系统是NUMA共享内存,而不是分布式的。

一间满是这些机器的房间形成了一个分布式内存集群,通过网络发送消息进行通信。

实际的考虑是分布式内存的一个主要原因:让成千上万或数百万CPU核心与任何类型的一致性语义共享相同的内存,这是不现实的,因此值得将其称为共享内存。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36642382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档