DDR Study - PIM Technical

参考来源:In-memory processing - Wikipedia,What is processing in memory (PIM) and how does it work? (techtarget.com),《Processing-in-memory: A workload-driven perspective》
LPDDR Initial → LPDDR Write Leveling and DQ Training → LPDDR Read and Training → LPDDR Write and Training → LPDDR Clock Switch → PIM Technical

PIM - Processing in Memory Basic

什么是PIM,看下Wiki的定义:
Hardware层面:PIM - Processing in Memory 是一种计算机体系结构,在这种体系结构中,数据操作可直接在DRAM内存中进行,而无需先传输到CPU寄存器中。
Software层面:PIM - Processing in Memory 是一种软件架构,数据库完全保存在随机存取存储器(RAM)或闪存中,因此数据的读取或查询操作,不需要访问磁盘存储。

这里分析的对象是Hardware层面的PIM体系,这种PIM 架构等于是在DRAM附近添加了具备逻辑运算单元的小型通用核心,称之为PIM 内核(PIM Cores)。
这种 PIM 内核往往与 CPU 兼容,可以像CPU一样执行应用程序的任何部分。
PIM

但由于面积、能耗和性能等原因,它们无法承受像 CPU 一样复杂的大型多级缓存层次结构或执行逻辑限制。
PIM 内核通常没有缓存或缓存很小,限制了它们可以利用的时间局部性的数量。
并且PIM没有复杂的激进的乱序或超标量执行逻辑,限制了 PIM 内核提取指令级并行性的能力。
因此对于计算密集型或缓存友好型部分的数据处理应该还是保留在更大、更复杂的 CPU 内核上。

在具备PIM架构的处理器任务设计中,需要根据以下几个条件判断是否需要调用PIM执行相关code:

  • 这个函数是否为整个workload中最耗费energy的部分
  • 这个函数的data movement是否占用了整个workload负载的20%以上
  • 这个函数是否为内存密集型而非计算密集型(每一千指令中就有一次last-level cache misses)
  • 这个函数的data movement是否占据了此函数主要的负载消耗

可以看到满足上述条件的code基本都是充斥着大量的data movement这样简单操作的任务,而这类简单密集的任务就可以让PIM参与协助执行,减少CPU的负担。

PIM in Tensorflow Case

下面基于Tensorflow Case对PIM的实际应用场景进行分析:
PIM in TS
可以看到不同网络之间负载消耗主要在打包Packing,量化Quantization和解包Conv2D。
这几个任务的特点就是矩阵数据需要重新排序为向量数据,从而减少CPU访问数据的缓存未命中Cache Miss,但是会导致大量的data movement。
PIM架构就可以有效优化这类问题。

在神经网络算法设计中,矩阵乘法 (GEMM) 是神经网络的核心构建基础模块,由 2-D 卷积层和全连接层使用,而在不同层级之间都会涉及CPU和Memory数据的搬运。
下面是两种不同架构之间在Data Packing阶段的流程差异:
DP step

相比单独CPU流程:

  1. 获取Matrix Data(Memory -> CPU)
  2. 找到min/max,矩阵数据量化处理(CPU)
  3. CNN卷积(CPU -> Memory)
  4. Loop back to step1

可以看到CPU + PIM流程把除了卷积Conv2D之外的活都交给PIM干了,大幅度减少了CPU工作量:

  1. 找到min/max,矩阵数据量化处理(Memory)
  2. CNN卷积(Memory -> CPU -> Memory)
  3. Loop back to step1

下面是不同架构下的能耗对比图:
Performance diff
图中的PIM-Acc有单独的硬件加速模块。而PIM-Core没有专门的加速设计,只有普通的少量通用逻辑运算单元。

Programming PIM Architectures

在设计程序中,分出单独的Section内容用于给PIM代理执行,这样的行为被称为Offload(卸载)。
那么在设计这部分卸载内容时需要考虑的因素有哪些?

Offloading Granularity

设计卸载内容时的最小粒度单位可以是单个指令、批量操作、整个函数或者整个应用程序,不同的卸载粒度对于PIM的要求都是不同的。
实例可以参考 Tesseract/GRIM-Filter。
TESS

如果是单个指令为最小卸载粒度,可以基于现有的ISA单独建立一个PIM执行的CPU指令 PEI(PIM-enabled instruction)
PEI由PCU(PEI Computation Unit)单元执行,每个CPU Core配备一个PCU。
一个PEI指令的执行可能需要多个CPU指令,但实际对于CPU而言只需要执行一个PEI指令。
不同CPU Core之间的PEI指令会被集中送到PMU(central PEI Management Unit),PMU 会在其一个 PCU 上启动适当的 PIM 操作,再获取返回Data/Ins。
这种设计具有以下优点:

  1. 这使得 PEI 和 PIM 操作之间的映射保持简单,并允许逐步引入新指令
  2. 避免了在内存中进行虚拟内存地址转换的需要,因为转换是在将 PEI 发送到内存之前在 CPU 中完成的
  3. PIM 操作仅限于在单个高速缓存行上操作,单个PEI和普通CPU Ins占用的memory fences/Cache Line一样
  4. PEI 有原子性,并使用Memory Barrier来隔离 PEI 和普通 CPU 指令

但是因为要和CPU指令协调,PIM计算的复杂性很低,只能执行一些简单计算。
作为指令,只能携带少量数据,当需要执行大量 PIM 操作时,这可能会产生很高的开销。

如果是批量操作为最小卸载粒度,在内存中执行批量操作有两个要求:

  1. 批量按位操作一次不能对少于一行执行
  2. 由于存储器阵列内可以实现的逻辑功能数量的限制,对批量数据只能进行简单的逻辑运算

如果是整个函数为最小卸载粒度,可以用编译器指令包围Function实现: #PIM_begin 和 #PIM_end 指令包围,编译器可以使用它们来生成在 PIM 上执行的线程。
这种方法需要编译器和/或库支持来将 PIM 内核分派到内存,并且这种方法还需要考虑PIM和CPU之间的缓存一致性和地址转换问题。

如果是整个应用为最小卸载粒度,可以避免与 CPU 进行通信,但是因为PIM资源有限,极大地限制了可以使用 PIM 执行的应用程序类型。

Data Coherency

PIM和CPU之间是共享内存的状态,Cache Coherency是需要考虑的。
而且PIM会占用大量的coherence messages,所以需要设计支持更高带宽的一致性机制CoNDA:
CoDNA
这里简单总结下CoNDA功能:

  1. 周期地推测性地获取给定时间段内多个内存操作的一致性权限
  2. 可以理解为对一块memory region的操作行为归为一次性的PIM Kernel thread task,在Cache一致性机制中被视为单次的data modified
  3. 将来自多个内存操作的一致性请求批处理为一组压缩的一致性签名
  4. 将签名发送给CPU以确定推测是否违反了任何一致性语义

CPU收到签名后,基于Cache Coherency进行一致性检查,如果有dirty line就刷新。
PIM Kernel收到CPU刷新指令就会Roll Back并且重新执行Command,因为之前执行的command用的是未更新前的数据,而不是Cache中存储的最新数据。
下面是不同架构下的性能对比图:
对比图
可以看到CoDNA通过利用各种缓存一致性机制有效优化了数据处理的速度。部分缩写定义如下:

  • NC - noncacheable data regions
  • CG - coarse-grained locks on shared data regions
  • FG - fine-grained coherence per cache line
  • Ideal-PIM - 理想PIM

Virtual Memory

在之前的CPU Study专栏中提到过,VA->PA需要基于Memory中的Page Table/Cache中的TLB进行。
例如PIM Kernel需要遍历指针时,指针存储地址信息为VA,如果需要CPU协助进行VA→PA,则会浪费PIM优势。
所以在PIM设计中通常采取如下方法:
独立的PIM页表架构
CPU页表与PIM页表解耦,基于IMPCA 开发。
IMPCA 加速器仅对某些可以映射到VA中连续区域的数据结构进行操作,将其称为 PIM 区域。
因此,可以使用更小的基于区域的页表来映射连续的 PIM 区域,而无需为整个地址空间复制页表映射。
其次如果只需要映射 PIM 区域
可以折叠传统的多层次页表结构,相关的PIM region地址转换module设计就会简单很多。
独立的PIM编译器
在编译阶段解决虚拟地址问题,生成基于PIM物理地址的映射表信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/462279.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业如何通过架构蓝图实现数字化转型

数字化转型的关键——架构蓝图的力量 在当今的商业世界,数字化转型已经不再是一个选择,而是企业生存与发展不可回避的战略行动。企业希望通过数字化提高效率、增强灵活性,并为客户提供更好的体验。然而,数字化转型不仅仅涉及技术…

NVR监测软件/设备EasyNVR多品牌NVR管理工具/设备对城市安全有哪些具体益处?

在智慧城市的建设中,各种先进的技术系统正发挥着越来越重要的作用。其中,NVR监测软件/设备EasyNVR作为一种高效的视频边缘计算网关,不仅能够实现视频数据的采集、编码和存储,还能与其他智慧城市系统进行深度集成,共同推…

20241102解决荣品PRO-RK3566开发板刷Rockchip原厂的Buildroot使用荣品的DTS出现

20241102解决荣品PRO-RK3566开发板刷Rockchip原厂的Buildroot使用荣品的DTS出现fiq_debugger问题 2024/11/2 9:46 缘起:给荣品PRO-RK3566开发板刷Rockchip原厂的Buildroot时,DEBUG波特率是1.5Mbps。 但是启动到FIQ阶段,在你使用荣品的DTS的时…

ctfshow文件包含web78~81

目录 web78 方法一:filter伪协议 方法二:input协议 方法三:data协议 web79 方法一:input协议 方法二:data协议 web80 方法一:input协议 方法二:日志包含getshell web81 web78 if(isset($_GET[file]…

电能表预付费系统-标准传输规范(STS)(30)

6.5.3.2 CONTROLBlock construction The 1 6 digit CONTROLBlock is constructed from the data elements in the APDU as defined in Table 36 and Table 37.The most significant digit is in position 1 5 and the least significant digit in position 0. APDU中的数据元素…

基于YOLO11/v10/v8/v5深度学习的维修工具检测识别系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

人工智能基础-opencv-图像处理篇

一.图像预处理 图像翻转 cv2.flip 是 OpenCV 库中的一个函数,用于翻转图像。翻转可以是水平翻转、垂直翻转或同时水平和垂直翻转。这个函数接受两个参数:要翻转的图像和一个指定翻转类型的标志。 img cv2.imread(../images/car2.png) #翻转 0&#xf…

Hive学习笔记

1 Hive基本概念 1.1 Hive定义 Hive:由 Facebook 开源用于解决海量结构化日志的数据统计工具。 Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并 提供类 SQL 查询功能。 利用MapReduce去查询数据文件中的某些内…

用图说明 CPU、MCU、MPU、SoC 的区别

CPU CPU 负责执行构成计算机程序的指令,执行这些指令所指定的算术、逻辑、控制和输入/输出(I/O)操作。 MCU (microcontroller unit) 不同的 MCU 架构如下,注意这里的 MPU 表示 memory protection unit MPU (microprocessor un…

HTML 语法规范——代码注释、缩进与格式、标签与属性、字符编码等

文章目录 一、代码注释1.1 使用注释的主要目的1.2 使用建议二、标签的使用2.1 开始标签和结束标签2.2 自闭合标签2.3 标签的嵌套2.4 标签的有效性三、属性四、缩进与格式4.1 一致的缩进4.2 元素单独占用一行4.3 嵌套元素的缩进4.4 避免冗长的行五、字符编码六、小结在开发 HTML…

虚拟现实与增强现实:重塑娱乐和教育的边界!

内容概要 在这个瞬息万变的时代,虚拟现实(VR)和增强现实(AR)正如两位魔法师,腾云驾雾间掀起了一场教育与娱乐的革命。虚拟现实带我们飞跃平凡,进入一个充满奇迹的数字宇宙,仿佛我们…

中仕公考:上海市25年公务员考试今日报名

2025年上海市公务员考试于今日开始报名 考试报名采取网络报名方式进行,报考者可在2024年11月2日0:00至11月8日12:00期间登录专题网站进行报名。 年龄在18周岁以上,35周岁以下(1988年11月至2006年11月期间出生),应届硕士、博士研究生报考的&…

Diving into the STM32 HAL-----HAL_GPIO

1、怎么看待外设: 从总线连接的角度看,外设和Core、DMA通过总线交换数据,正所谓要想富先修路。要注意,这些总线中的每一个都连接到不同的时钟源,这些时钟源决定了连接到该总线的外设操作的最大速度。 从内存分配的角度…

【表格解决问题】EXCEL行数过多,WPS如何按逐行分别打印多个纸张中

1 问题描述 如图:我的表格行数太多了。打印在一张纸上有点不太好看 2 解决方式 Step01:先选中你需要打印的部分,找到【页面】->【打印区域】->【设置打印区域】 Step02:先选中一行,找到【插入分页符】 Step0…

提升安全上网体验:Windows 11 启用 DOH(阿里公共DNS)

文章目录 阿里公共 DNS 介绍免费开通云解析 DNS 服务Windows 编辑 DNS 设置配置 IPv4配置 IPv6 路由器配置 DNS 阿里公共 DNS 介绍 https://alidns.com/ 免费开通云解析 DNS 服务 https://dnsnext.console.aliyun.com/pubDNS 开通服务后,获取 DOH 模板&#xff0…

如何在Linux下部署自己的ZFile开源网盘

ZFile 项目介绍 ZFile是一个功能强大、灵活的开源网盘系统,为用户提供安全便捷的文件存储和共享方案。 项目概述 ZFile由ZFile, Inc.开发和维护,基于Docusaurus构建。其用户友好的界面支持多种文件存储和共享功能,并具备高度的可定制性和扩…

Spring AI : 让ChatGPT成为你构建应用的核心亮点

本文是一篇介绍spring ai的文章,主要介绍了生成文本内容,以及读取图片中内容两个能力。 之所以介绍这两个能力,是因为 大模型目前最适合做的事情有两个: 1) 非结构化数据的结构化(图片转文字,…

Windows 命令提示符(cmd)中输入 mysql 并收到错误消息“MySQL不是内部或外部命令,也不是可运行的程序或批处理文件?

目录 背景: 过程: 1.找到MySQL安装的路径 2.编辑环境变量 3.打开cmd,输入mysql --version测试成功 总结: 背景: 很早之前安装了Mysql数据库,想查询一下当前安装的MySQL客户端的版本号,我在命令行界面输入mysql --verion命令回…

履带式排爆演习训练机器人技术详解

履带式排爆演习训练机器人是现代反恐、救援及危险环境处理领域中的重要工具。它们结合了先进的机械设计、智能感知、精确控制及高效算法,能够在复杂、危险的环境中执行排爆、侦察、取样等多种高风险任务,极大地保障了人员安全。 技术特点 1. 卓越的地面…

基于SSM医院门诊互联电子病历管理系统的设计

管理员账户功能包括:系统首页,个人中心,用户管理,医生管理,项目分类管理,项目信息管理,预约信息管理,检查信息管理,系统管理 用户账号功能包括:系统首页&…