热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Cache与Scratchpadmemory(spm)的区别

目录Cache1、cache的三种相联方式2、cache中数据的替换策略3、更新cache内容时的写策略Scratch-pad-memory1、spm的定义2、spm

目录

Cache

1、cache的三种相联方式

2、cache中数据的替换策略

3、更新cache内容时的写策略

Scratch-pad-memory

1、spm的定义

2、spm与cache相比的不同之处




Cache


1、cache的三种相联方式

假设内存地址空间是0—31,cache地址的空间是0—7,现在需要将内存中地址16的数据存放在cache中。

如图所示


内存

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

直接相联:

直接相联方式将内存中的数据按地址映射到cache中的固定位置


直接相联

0

1

2

3

4

5

6

7

全相联:

全相方式将内存中的数据映射到cache中的任何位置


全相联

0

1

2

3

4

5

6

7

组相联:

组相联有两路组相联、四路组相联等。以两路组相联为例, 每个数据有两个位置可以存放,例如内存地址中地址16的数据可以放到cache中0,1两个位置,内存地址0.8.24的数据也可以放到cache中0,1位置。Cache中位置0处存放发数据到底是哪个内存地址数据,需要用cache标签来记录。


组相联

0

1

2

3

4

5

6

7


2、cache中数据的替换策略

随机替换:随机选取一个位置进行替换。

FIFO(FIRST IN FIRST OUT,先进先出):把最先进来的数据替换出去。

LRU(LEAST RECENTLY USED,近期最少使用):将最近最少使用的数据替换出去,因为最早进来的数据不一定的最没用的数据。


3、更新cache内容时的写策略

整体来说,处理器在更新cache内容时,需要分别考虑写命中和写失效两种情况下的写策略。

写命中时,即要写的地址在cache中,有写回和写穿两种策略。写穿策略,既写cache也写内存;写回策略,只写cache,并用dirty标志位记录cache是否修改过,当被修改的cache块被替换时,才将修改后的内容写回内存。

当写失效时,即要写的地址不在cache中,有写分配和写不分配两种策略。写分配策略。把要写的地址所在的块从内存调入cache中,再写cache;写不分配策略,把要写的内容直接写回内存。


Scratch-pad-memory


1、spm的定义

Scratch-pad-memory简称SPM中文叫遍笺(jian)式存储器。它可以把数据放在不同的片上存储器上(可解耦性),几个存储器是可以独立被访问的,从而达到较高的访问效率。


2、spm与cache相比的不同之处

(1)是否有硬件来管理存放的数据

Cache是通过硬件来管理每个位置上存放的数据;

spm没有硬件管理的替换策略,由程序员来管理数据的存放位置。因此,spm的控制逻辑比较简单,能耗也比较低,。

(2)根据访存行为的复杂程度cache与spm的选取不同

当访存行为不规则时,cache中的硬件管理机制可以有效的管理数据,比如Windows中的数据很多,访存行为难以分析清楚,于是cache是很好的选择;

当程序中的访存行为可以很容易的描述出来时,程序员可以根据程序的访存行为设计spm的数据存取方式,从而提高访存效率。

(3)cache与spm在存储容量和片外访存量上面也有很大差距。

如上图所示

Cache存储量越大,命中率越高,失效率越低,内存访问(片外访存)量越少。

        当spm用于深度学习应用时,如全连接层,spm的内存访问量有两个拐点。全连接层的输入和输出神经元是可以重用的,而权重是不可重用的。Spm上可以优先存放输入神经元和输出神经元,当spm容量足够大时,能够放下所有的输入、输出神经元时,片外访存量就会降下来。但随着spm的容量的增加,权重也可以放到spm上,但权重没有重用,因此片外访存量会保持在一个阈值。当spm容量足够大,能够放下所有的输入、输出神经元以及权重时,片外访存会出现拐点,片外访存量极低。此时,整个计算过程除了输入图片需要访存,没有其他片外访存,片外访存量会很低。此时整个计算过程除了输入图片需要访存,没有其他片外访存,片外访存量会很低。

       实践上可以根据神经网络应用的特点来制定spm的大小,以提高片上存储的利用率,同时减少非必要的片上利用存储面积。


推荐阅读
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • window下的python安装插件,Go语言社区,Golang程序员人脉社 ... [详细]
  • 【图像分类实战】利用DenseNet在PyTorch中实现秃头识别
    本文详细介绍了如何使用DenseNet模型在PyTorch框架下实现秃头识别。首先,文章概述了项目所需的库和全局参数设置。接着,对图像进行预处理并读取数据集。随后,构建并配置DenseNet模型,设置训练和验证流程。最后,通过测试阶段验证模型性能,并提供了完整的代码实现。本文不仅涵盖了技术细节,还提供了实用的操作指南,适合初学者和有经验的研究人员参考。 ... [详细]
  • 能够感知你情绪状态的智能机器人即将问世 | 科技前沿观察
    本周科技前沿报道了多项重要进展,包括美国多所高校在机器人技术和自动驾驶领域的最新研究成果,以及硅谷大型企业在智能硬件和深度学习技术上的突破性进展。特别值得一提的是,一款能够感知用户情绪状态的智能机器人即将问世,为未来的人机交互带来了全新的可能性。 ... [详细]
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 本文详细介绍了如何在PHP中记录和管理行为日志,包括ThinkPHP框架中的日志记录方法、日志的用途、实现原理以及相关配置。 ... [详细]
  • 专业人士如何做自媒体 ... [详细]
  • 本文详细介绍了从Windows 7 升级到 Windows 10 的步骤和注意事项,帮助用户顺利完成系统升级。 ... [详细]
  • Ping 命令的高级用法与技巧
    本文详细介绍了 Ping 命令的各种高级用法和技巧,帮助读者更好地理解和利用这一强大的网络诊断工具。 ... [详细]
  • 在Windows系统中安装TensorFlow GPU版的详细指南与常见问题解决
    在Windows系统中安装TensorFlow GPU版是许多深度学习初学者面临的挑战。本文详细介绍了安装过程中的每一个步骤,并针对常见的问题提供了有效的解决方案。通过本文的指导,读者可以顺利地完成安装并避免常见的陷阱。 ... [详细]
  • 阿里巴巴终面技术挑战:如何利用 UDP 实现 TCP 功能?
    在阿里巴巴的技术面试中,技术总监曾提出一道关于如何利用 UDP 实现 TCP 功能的问题。当时回答得不够理想,因此事后进行了详细总结。通过与总监的进一步交流,了解到这是一道常见的阿里面试题。面试官的主要目的是考察应聘者对 UDP 和 TCP 在原理上的差异的理解,以及如何通过 UDP 实现类似 TCP 的可靠传输机制。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
author-avatar
我从不在乎O心痛
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有