关于共享内存

首先区分一下CPU和GPU之间的共享内存:

  • CPU中的共享内存:更像是一种机制,它利用主内存(DRAM)和多级缓存(L1, L2, L3)来实现多核或多线程之间的数据共享。共享内存的实现依赖于缓存一致性协议和操作系统提供的同步机制,由此确保多核或多线程的正确访问。

  • GPU的共享内存:是一块专门划分出来的高速内存,存在于每个计算单元(如NVIDIA的流多处理器SM或AMD的计算单元CU)中,用于在并行计算线程之间快速传递数据。

因此对于CPU共享内存,一般关注其实现方式和依赖的机制。对于GPU共享内存,则关注其物理划分和用途。下面分别针对CPU和GPU的共享内存做个说明:

CPU中的共享内存机制

  • CPU中的系统主内存(DRAM)由多个CPU核心共享,每个核心都可以通过内存控制器访问这块内存。这是多核CPU共享内存机制实现的前提

  • 为了提高访问速度,CPU设计了多级缓存。缓存系统帮助减少从主内存读取数据的延迟。

  • 单核环境下的共享内存

    • 多进程:在单核CPU上,不同进程仍然可以通过操作系统提供的共享内存机制(如POSIX共享内存、System V共享内存)来共享数据。操作系统管理这些共享内存区域,确保进程之间能够协作。

    • 多线程:多个线程共享同一个进程的地址空间。尽管在单核环境下,线程的执行是通过时间片轮转(时间分片)来实现的,但它们依然能够共享内存。

多核CPU通过缓存一致性协议(如MESI协议)和操作系统提供的同步机制(如互斥锁、信号量)来管理对共享内存的访问。这些机制确保了多个核心或线程能够一致地访问和修改共享数据,具体如下。

  • 缓存一致性协议(如MESI协议):在多核CPU中,每个核心可能会缓存相同的内存数据副本。缓存一致性协议通过维护这些副本的一致性,确保所有核心看到的数据是一致的。

  • 操作系统的同步机制:操作系统提供了各种同步工具(如互斥锁、信号量、条件变量)来防止多个线程或进程在访问共享内存时产生竞争条件。这些工具确保在同一时间只有一个执行单元能够访问共享资源,从而避免数据冲突。

GPU的共享内存

  • 专用高速内存:在GPU中,每个计算单元(如NVIDIA的SM或AMD的CU)都有一块共享内存,这是一种快速、低延迟的存储区域。共享内存用于在同一线程块内的线程之间快速交换数据。
  • 并行计算优化:GPU共享内存的设计是为了优化并行计算性能,允许多个线程高效地访问和共享数据,而无需频繁访问更慢的全局内存。

全是字看了头好痛。贴点图顺便介绍一下CPU和GPU的存储器层次结构吧

CPU的存储器层次结构

CPU的存储器层次结构也被叫做金字塔层次结构,主要有寄存器、缓存、内存、外存。

  • 寄存器(Register):位于CPU内部,是最快速和最小容量的存储器。用于存储指令、操作数和中间计算结果,直接供CPU执行单元使用。
  • 高速缓存(CPU Cache):在 CPU 里,通常会有 L1、L2、L3 这样三层高速缓存。
    • L1 Cache:每个CPU核心拥有自己的L1缓存,用于存储最常用的数据和指令。
    • L2 Cache:通常由多个核心共享的更大容量的缓存,加速对主存的访问。
    • L3 Cache:更大容量的共享缓存,位于多个核心之间和主内存之间,减少对主存的访问延迟。
  • 内存(DRAM):是CPU和GPU共享的主要存储器,存储正在执行的程序和数据。但访问速度比CPU内部的缓存慢得多。
  • 硬盘:如 SSD(固态硬盘)、HDD(硬盘)。这类属于是外存了,外储存器是指除计算机内存及CPU缓存以外的储存器,此类储存器断电后仍然能保存数据。

GPU的存储器层次结构

不同型号的GPU在存储器层次结构上可能会有一些差异,这里以NVIDIA的CUDA为例展开说明。

GPU的存储器层次结构以寄存器最快、最小,接着是共享内存,然后是全局内存,速度逐级递减,容量逐级递增。GPU还可能包括更大容量、速度更慢的设备内存(如NVIDIA的Device Memory)用于长期存储和数据传输。

内容全在图里了。。
在这里插入图片描述

需要注意的是,不同GPU型号的存储器层次结构之间是有差异的,较新的GPU型号通常具有更多的寄存器和更大的共享内存,以及更高效的缓存系统。每一代的新架构通常也会引入改进的存储器层次结构,以提高性能和效率。

例如NVIDIA Turing架构和Ampere架构的比较

  • Turing架构(如GTX 16系列和RTX 20系列):具有标准的L1和L2缓存架构,以及固定大小的共享内存和寄存器分配。
  • Ampere架构(如RTX 30系列):引入了更高效的L1缓存和L2缓存设计,提供了更大的共享内存和更多的寄存器,以支持更复杂和高性能的计算任务。

关于cuda的内存层次结构可以看这篇博文:CUDA精讲(3)-- GPU体系结构之内存层次结构_gpu 什么变量会使用register-CSDN博客

关于CPU的可以看这一篇:存储器 - 金字塔层次结构:越靠近CPU速度越快,容量越小,价格越贵 - binarylei - 博客园 (cnblogs.com)

两个博主写的都很清楚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值