首页 > 其他分享 >存内计算(Processing in Memory,PIM)的由来

存内计算(Processing in Memory,PIM)的由来

时间:2024-06-16 13:32:32浏览次数:9  
标签:Processing PIM L1 cache 内存 Memory 数据 CPU

存内计算(Processing in Memory,PIM)的由来

前言

  今天漫无目的浏览2024年HPCA收录的文章,第一眼看到的自然是best paper,它是讲关于PIM的性能优化的,恰好我对PIM不是很了解,于是今天就选定PIM进行介绍吧!

一、PIM介绍

1、什么是PIM

  PIM是指将处理器嵌入到内存中形成存内计算芯片的一种架构。其允许在计算机、服务器或类似设备的内存中执行计算和处理。

2、PIM出现的背景

冯诺依曼瓶颈

  冯诺依曼瓶颈就是PIM出现的背景。在冯诺伊曼架构下,计算机主要包括中央处理器(CPU),内存单元和输入输出设备。其中CPU包括控制单元、计算单元和寄存器。由此可知,CPU和内存是互相独立存在的组件,它们之间需要依靠系统总线进行数据传输,这就引来了一定的数据传输延迟。后来,随着各种各样应用的出现,伴随着各种变化的工作负载,引入了冯诺依曼架构的第一个小瓶颈,即执行效率不够高。因此大家通过提高CPU的处理速率去提高执行速度,通过增加内存密度去扩大内存容量以存储更多数据,减少从磁盘读IO数据时产生的延迟。这虽然在很大程度上去提升了IO请求的执行效率,但是,CPU处理器还是会陷入等待,原因就是内存和CPU之间总是不可避免地会产生一定的数据传输延迟时间。当CPU需要处理某些数据时,需要进入等待时间,直到数据从内存中经过数据总线完整地传输到CPU中,这就是现在的冯诺伊曼瓶颈,也称为内存墙。

Cache

  伴随着这个问题,cache出现了,即L1、L2和L3 cache。cache诞生的原因是利用局部性原理(数据的时间局部性空间局部性)来提升数据访问的性能。再啰嗦一点,时间局部性就是指如果一个数据近期被访问,那么在不久的将来会被再次访问;空间局部性是指如果一个数据被访问,那么它附近的数据也很有可能被访问。于是CPU通过将这些相关数据存储到cache中,以提升其数据访问性能。
  这三个cache介于CPU和内存之间,通过缩短距离来降低传输时间带来的延迟。这三个cache的主要区别是容量和传输速度(与CPU距离的远近,如下图所示,注意,其中),其中L1 cache最小、最快,L2稍微慢一些,但容量增加了;而L3 cache最慢也最大。这三个cache本质上都是SRAM(static random access memeory,静态随机访问内存存储器),它每个存储单元需要由六个晶体管构成,集成度较低,但不需要不断刷新电路进行数据保存,而又由于CPU管芯面积不能太大,因此这三个cache的容量相对受限。
  其中L1 cache和L2 cache是嵌在CPU里面的,L1 cache大小为64KB,一个CPU core 对应一个L1 cache和一个L2 cache,多个CPU core共享一个L3 cache,因此如果当前CPU是四核CPU,则该CPU总共有4个L1 cache 、 4 个L2 cache 和 1 个L3 cache。而为什么L1 cache容量这么小,不做得大一些呢?这是由于为了让L1 cache能够提供高速的查找能力而做的tradeoff,试想以下,在小盒子里找东西快还是在大盒子找东西快?
cache

NDP(Near-data processing)-- PIM

  NDP原理就是直接将处理单元放在数据附近,直接进行计算,摆脱了传统冯诺依曼架构 — 将数据传输到处理器之后才能进行处理,从根源上解决了数据传输导致数据处理延迟的问题。其中,PIM就是这个这个原理的一种类型。通过在内存中嵌入计算单元,为CPU分担一些计算任务。

个人总结

  由于今天还有别的任务要做,所以今天先讲到这里啦,今天的介绍可能有点简单,后面我会继续深入讲解的!好啦,祝大家周末愉快~

标签:Processing,PIM,L1,cache,内存,Memory,数据,CPU
From: https://blog.csdn.net/weixin_46129187/article/details/139715115

相关文章

  • COMP20008 - Elements of Data Processing
    COMP20008- Elements of Data Processing, Semester 1,2024Assignment2–Whoelse likesthis book?1. OverviewIn thisproject, you willundertake an analysis of a collection of datasets containing detailed informationaboutbooksandt......
  • C# get TotalVisibleMemorySize FreePhysicalMemory TotalVirtualMemorySize FreeVirt
    1.InstallSystem.ManagementinNuget;2usingSystem.Management;namespaceConsoleApp37{internalclassProgram{staticvoidMain(string[]args){System.Timers.Timertm=newSystem.Timers.Timer();tm.......
  • 腾讯冷启动论文阅读《Enhancing User Interest based on Stream Clustering and Memor
    背景用户冷启动一直是推荐系统中的一个难题,新用户(或非活跃用户)由于缺少行为数据,模型预估不准确。为了改善用户冷启动,腾讯提出了UserInterestEnhancement(UIE)模型(论文中提到也可以用于item的冷启动)。基本思想是先对用户聚类,然后用userembedding检索最相似的k个聚类中心来表示......
  • 程序员学习Processing和TouchDesigner视觉编程相关工具
     ProessingProcessing是一种用于视觉艺术和创意编程的开发环境和编程语言。它最初是为了帮助非专业程序员学习编程,特别是那些对于创意编程和视觉表达感兴趣的人。Processing提供了简单易用的API,使得绘制图形、创建动画和交互式应用变得相对容易。在前端应用Processing......
  • 【报错解决】深度学习模型训练时cuda内存足够但测试时反而报错cuda out of memory
    报错描述报错的代码如下:model=reader(config=args,encoder=encoder)#初始化模型model.to('cuda')#把模型放到gpu上model.load_state_dict(torch.load(join(args.checkpoint_path,'best_ckpt_model1.pkl')))#加载模型参数model=torch.nn.DataParallel(model)#并行化......
  • Unity Memory Profiler 内存分析
    参考:UnityMemoryProfiler从入门到精通-CSDN博客 UnityMemoryProfiler是一个用于分析和调试Unity游戏或应用程序内存使用情况的工具。它帮助开发者了解应用程序的内存分配和使用情况,从而识别和解决潜在的内存问题,如内存泄漏、过度的内存分配和不必要的内存消耗。Unity......
  • 聊聊如何理解MySQL引擎--Innodb和MyISAM和Memory
    mysql的常见的引擎有许多比如,MYISAM、Innodb、Memory、MERGE。可以通过mysql>showengines;查看数据库提供的引擎:我们今天聊聊如何理解Innodb和MyISAM,Memory,这是面试时会问的问题。首先是Innodb:先上概念:Innodb:行级锁,提供了具有提交、回滚和崩溃回复能力的事务安全,支......
  • HiPPO: Recurrent Memory with Optimal Polynomial Projections
    目录概Motivation代码GuA.,DaoT.,ErmonS.,RudraA.andReC.HiPPO:Recurrentmemorywithoptimalpolynomialprojections.NIPS,2021.概看下最近很火的Mamba的前身.本文其实主要介绍的是一个如何建模历史信息在正交基上的稀疏的变化情况.Motivation对于......
  • TCP_FLAGS_PROCESSING_09: [close-wait| closing | last-ack] FIN -> ignore
    测试目的:验证TCP在CLOSE-WAIT、CLOSING或LAST-ACK状态下,接收到FIN段时是否能够保持当前状态不变。描述:TCP在CLOSE-WAIT、CLOSING或LAST-ACK状态下,当接收到一个FIN段时,不应改变其状态。这是确保TCP连接能够按照正常的关闭序列进行,避免状态的意外变化。测试拓扑:具体步骤......
  • AI大模型探索之路-实战篇15: Agent智能数据分析平台之整合封装Tools和Memory功能代码
    系列篇章......