CPU、GPU、TPU内存子系统架构
文章目录
- CPU、GPU、TPU内存子系统架构
- 概要
- CPU
- GPU
- TPU
- 共同点和差异:
CPU、GPU、TPU内存子系统架构
概要
Memory Subsystem Architecture,图源自TVM

CPU
CPU(中央处理器)的内存子系统:隐式管理
主内存(RAM): CPU通常与主内存进行直接交互,主内存是用于存储程序和数据的地方。CPU通过内存总线访问主内存,用于执行计算任务和存储程序的指令。缓存: CPU还包括多级缓存(L1、L2、L3),这是一种速度更快但容量较小的存储,用于缓存最常用的数据和指令,以提高访问速度。- L1分为L1D与L1I:
在CPU的内存体系结构中,L1D(Level 1 Data Cache)和L1I(Level 1 Instruction Cache)是两个不同类型的缓存,分别用于存储数据和指令。
L1D(Level 1 Data Cache):
作用: L1D缓存用于存储处理器执行过程中使用的数据。这包括从主存中读取的数据以及处理器计算过程中生成的中间结果。L1D缓存的目标是提供对数据的快速访问,以减少因为等待主存数据而引起的计算延迟。
特点: L1D通常是双口(读写同时)的,具有较小的容量但具有很高的访问速度。由于它离处理器核心非常近,可以在一个时钟周期内响应访问请求。
L1I(Level 1 Instruction Cache):
作用: L1I缓存用于存储处理器执行的指令。指令是由处理器执行的操作的二进制表示形式。通过将指令缓存在L1I中,可以更快速地提供给处理器核心,减少从主存中获取指令的时间。
特点: 类似于L1D,L1I也是双口的,但它存储指令而不是数据。L1I通常具有相对较小但非常快速的访问时间,以确保指令的快速提供。
这两个缓存层级(L1D和L1I)都位于处理器核心内部,离核心非常近,以便最小化访问延迟。当处理器执行指令时,首先从L1I缓存中获取指令,然后执行这些指令并在L1D中存储或检索相关的数据。如果在L1缓存中未找到所需的数据或指令,处理器将继续查找更高层级的缓存(如L2、L3缓存)或主内存。
GPU
GPU(图形处理器)的内存子系统:混合管理
全局内存:GPU拥有自己的全局内存,用于存储大量的数据,例如图形、纹理和模型数据。全局内存对于大规模并行计算非常重要,但与主内存相比,它通常具有更高的延迟。共享内存:在GPU中,共享内存是一种高速且共享给同一个工作组(通常是一个线程块)中的线程使用的内存。这种内存形式用于在工作组内进行通信和数据交换。纹理内存:用于存储和处理图形数据的特殊内存。纹理内存通常用于图形渲染,但在深度学习等领域也可以用于特殊用途。
GPU(图形处理器)内部,有一些关键的组成部分和缓存层次,其中一些常见的术语包括:
RF(Register File):
作用: 寄存器文件是GPU中用于存储临时数据和中间结果的地方。GPU中的线程(也称为CUDA核心或着色器)在执行计算时使用寄存器进行临时存储,而RF就是这些寄存器的组织结构。
特点: RF非常快速,但容量有限。它用于存储当前线程的局部变量和中间计算结果。L1 Cache / Texture Cache (L1/TC):
L1 Cache(数据缓存):用于存储处理器核心正在访问的数据。这包括从全局内存读取的数据,以及线程间共享的数据。L1 Cache可以被分为L1D(数据缓存)和L1I(指令缓存)。
Texture Cache(纹理缓存):专门用于处理图形处理中的纹理贴图数据,提供对纹理数据的快速访问。纹理缓存通常用于图形渲染中的纹理映射。SM(Streaming Multiprocessor):
作用: SM是GPU中的一个处理单元,用于执行并行计算任务。每个SM包含多个CUDA核心,可以同时执行多个线程。
特点: SM具有自己的寄存器文件(RF)、共享内存、L1 Cache等资源。多个SM并行工作以实现高度并行的计算。L2 Cache(Level 2 Cache):
作用: L2缓存是GPU中的更大容量、相对较慢但仍然很快的缓存层。它用于存储全局内存的数据,以及L1 Cache之间的数据传输。
特点: L2 Cache能够缓存更多的数据,并提供更大的访问带宽,以支持更高效的数据共享和传输。
这些组成部分在GPU中协同工作,以支持大规模的并行计算,特别是在图形渲染和通用计算任务中。不同的GPU架构和制造商可能有不同的设计和术语,上述描述主要适用于NVIDIA的CUDA架构。
关于GPU架构请参考我的另外一篇文章:
https://blog.csdn.net/qq_47564006/article/details/134579941
TPU
TPU(张量处理单元)的内存子系统:显示管理
高带宽存储(HBM):TPU通常使用高带宽存储,这是一种高速、低延迟的内存,专门设计用于存储大规模的张量数据。这对于深度学习等涉及大量矩阵和张量运算的任务非常重要。缓存:TPU可能还包含一些缓存,用于存储和加速对常用数据的访问。
在谷歌的Tensor Processing Unit(TPU)中,存在一些特定的组成部分和缓存结构,其中包括 Activation Buffer、Weight FIFO(First-In, First-Out)以及 Accumulator Register File。以下是对这些组成部分的简要说明:
Activation Buffer:
作用: Activation Buffer 用于存储神经网络中的激活值(activation values)。激活值是神经网络中每个神经元的输出,是神经网络前向传播的结果。
特点: Activation Buffer 提供了一个快速的临时存储区域,以存储当前层的激活值。这有助于提高处理速度,因为激活值通常在神经网络的不同层之间传递,而无需每次都访问主存。
Weight FIFO(Wgt.FIFO):
作用: Weight FIFO 用于存储神经网络中的权重(weights)。权重是神经网络中连接两个神经元之间的参数,它们在神经网络的训练过程中被学习。
特点: Weight FIFO 提供了一个先进先出的缓冲区,用于暂存权重。这有助于提供对权重的快速访问,以支持神经网络的前向和反向传播。
Accumulator Register File:
作用: Accumulator Register File 用于存储神经网络中的累加器值。在神经网络的计算过程中,累加器用于累积加权和,计算神经元的输出。
特点: Accumulator Register File 提供了一个用于临时存储累加器值的区域,以支持神经网络的前向和反向传播。这有助于加速计算过程。
这些组成部分共同协作,为TPU提供了对神经网络计算所需的各种参数和中间结果的高效访问。TPU旨在针对深度学习任务进行优化,因此这些缓存结构和寄存器文件等组件的设计都考虑了深度学习计算的特殊需求。
共同点和差异:
- 共同点: 所有这三种处理器都具有一些形式的缓存,用于加速对常用数据的访问。
- 差异: 不同之处在于主要设计目标和应用领域。CPU通常用于通用计算,GPU专注于图形处理和大规模并行计算,而TPU专门为深度学习任务设计,通过优化张量计算来提高性能。
总的来说,每种处理器的内存子系统都是根据其设计目标和应用领域进行了优化的,以最大限度地提高性能和效率。
相关文章:
CPU、GPU、TPU内存子系统架构
文章目录 CPU、GPU、TPU内存子系统架构概要CPUGPUTPU共同点和差异: CPU、GPU、TPU内存子系统架构 概要 Memory Subsystem Architecture,图源自TVM CPU CPU(中央处理器)的内存子系统:隐式管理 主内存(…...
R数据分析:集成学习方法之随机生存森林的原理和做法,实例解析
很久很久以前给大家写过决策树,非常简单明了的算法。今天给大家写随机(生存)森林,随机森林是集成了很多个决策数的集成模型。像随机森林这样将很多个基本学习器集合起来形成一个更加强大的学习器的这么一种集成思想还是非常好的。…...
transformers pipeline出现ConnectionResetError的解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...
代码随想录-刷题第九天
28. 找出字符串中第一个匹配项的下标 题目链接:28. 找出字符串中第一个匹配项的下标 思路1:先来写一下暴力解法。 时间复杂度O(n*m) class Solution {public int strStr(String haystack, String needle) {// 暴力解法先来一遍for (int i 0; i <…...
MySQL基本SQL语句(下)
MySQL基本SQL语句(下) 一、扩展常见的数据类型 1、回顾数据表的创建语法 基本语法: mysql> create table 数据表名称(字段名称1 字段类型 字段约束,字段名称2 字段类型 字段约束,...primary key(主键字段 > 不能为空、必须唯一) ) …...
【洛谷算法题】P5715-三位数排序【入门2分支结构】
👨💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5715-三位数排序【入门2分支结构】🌏题目描述🌏输入格式…...
上海亚商投顾:北证50指数大涨 逾百只北交所个股涨超10%
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指11月24日震荡调整,深成指、创业板指盘中跌超1%。北证50指数大涨超6%,北交所个股持…...
设计模式—依赖倒置原则(DIP)
1.概念 依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。 通俗的讲࿱…...
windows下docker环境搭建与运行实战
背景 学习docker使用,需要环境,今天主要的目标是在windows环境下安装docker环境。 为什么要这么搞,主要是企业内部服务器,都是跟公网隔离的,没有访问公网权限,所以镜像什么的,从公网拉取完全没…...
c# EF框架的增删改查操作
查询 /// <summary>/// 查询/// </summary>private void SQLLoad(){//linq查询,方法一//var UserInfoList from u in db.UserInfo//给个变量u,用来接收查询结果对象//select u;//查询结果对象 //db.UserInfo.Find(1);//依据主键查询,方法二…...
Element-UI Upload 手动上传文件的实现与优化
文章目录 引言第一部分:Element-UI Upload 基本用法1.1 安装 Element-UI1.2 使用 <el-upload> 组件 第二部分:手动上传文件2.1 手动触发上传2.2 手动上传时的文件处理 第三部分:性能优化3.1 并发上传3.2 文件上传限制 结语 Ἰ…...
持续集成部署-k8s-配置与存储-存储类:动态创建NFS-PV案例
动态创建NFS-PV案例 1. 前置条件2. StorageClass 存储类的概念和使用3. RBAC 配置4. storageClass 配置5. 创建应用,测试 PVC 的自动配置6. 解决 PVC 为 Pending 状态问题7. 单独测试自动创建 PVC 1. 前置条件 这里使用 NFS 存储的方式,来演示动态创建 …...
jar包不挂断地运行命令
nohup java -jar wpfx.jar com.xiaobai.wpfx.WpfxApplication > ./demo.log 2>&1 &这段命令主要是用来在后台运行一个Java应用程序,并将输出日志写入到demo.log文件中。下面是每个参数的解释: nohup:表示不挂断地运行命令&…...
人工智能-优化算法和深度学习
优化和深度学习 对于深度学习问题,我们通常会先定义损失函数。一旦我们有了损失函数,我们就可以使用优化算法来尝试最小化损失。在优化中,损失函数通常被称为优化问题的目标函数。按照传统惯例,大多数优化算法都关注的是最小化。…...
【开源】基于Vue和SpringBoot的食品生产管理系统
项目编号: S 044 ,文末获取源码。 \color{red}{项目编号:S044,文末获取源码。} 项目编号:S044,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 加工厂管理模块2.2 客户管理模块2.3…...
洛谷P1049装箱问题 ————递归+剪枝+回溯
没没没没没没没没没错,又是一道简单的递归,只不过加了剪枝,我已经不想再多说,这道题写了一开始写了普通深搜,然后tle了一个点,后面改成剪枝,就ac了,虽然数据很水,但是不妨…...
C++通讯录管理系统
目录 系统需求 1、 创建项目 2、 菜单功能设计 3、 退出功能设计 4、 添加联系人功能设计 4.1 设计联系人结构体 4.2 设计通讯录结构体 4.3 在main函数中创建通讯录 4.4 封装添加联系人函数 4.5 添加联系人功能测试 5、 显示联系人功能设计 5.1 封装显示…...
Windows安装Python环境(V3.6)
文章目录 一:进入网址:https://www.python.org/downloads/ 二:执行安装包 默认C盘,选择自定义安装目录 记得勾选add python path 下面文件夹最好不要有 . 等特殊符号 可以创建 python36 如果安装失败Option可以选默认的&#x…...
python 如何调用GPT系列的api接口,实现想要的功能
目录 问题描述: 问题解决: 问题描述: 随着各种LLMs (Large Language Models)的出现,如何调用各种LLMs的api成为了经常会遇见的问题。 问题解决: 下面仅以生成给定sentence的复述句为例,说明…...
JS动态参数arguments与剩余参数
arguments是函数内部内置的伪数组变量,它包含了调用函数时传入的所以实参 让我为大家介绍一下arguments吧 平时我们获取实参: function fun(a, b) {console.log(a) //1console.log(b) //2}fun(1, 2)接下来我们来使用一下arguments动态获取实参 function …...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...
