计算机体系结构基础知识介绍之缓存性能的十大进阶优化之非阻塞缓存(四)

news2024/11/22 19:22:24

优化四:非阻塞缓存,提高缓存带宽

对于允许乱序执行的流水线计算机,处理器不需要因数据高速缓存未命中而停止。 例如,处理器可以继续从指令高速缓存获取指令,同时等待数据高速缓存返回丢失的数据。 非阻塞高速缓存或无锁高速缓存允许数据高速缓存在未命中期间继续提供高速缓存命中,从而增强了这种方案的潜在优势。 这种“未命中下的命中”优化通过在未命中期间提供帮助而不是忽略处理器的请求来减少有效的未命中损失。 一个微妙而复杂的选项是,如果缓存可以重叠多个未命中,则可以进一步降低有效未命中惩罚:“多次未命中下的命中”或“未命中下的未命中”优化。 仅当内存系统可以处理多次未命中时,第二个选项才有用。 大多数高性能处理器(例如英特尔酷睿处理器)通常都支持两者,而许多低端处理器仅在 L2 中提供有限的非阻塞支持。

简单来说,非阻塞缓存是一种数据缓存,它可以在处理一个缓存不命中的请求时,继续响应其他缓存命中的请求,从而减少处理器的等待时间。

非阻塞缓存有以下几种优化方式:

  • 命中在不命中下(hit under miss):一种非阻塞缓存优化方式,它允许在处理一个缓存不命中的请求时,同时响应一个缓存命中的请求。
  • 命中在多重不命中下(hit under multiple miss)或不命中在不命中下(miss under miss):一种非阻塞缓存优化方式,它允许在处理多个缓存不命中的请求时,同时响应多个缓存命中或不命中的请求。这种方式需要内存系统能够同时服务多个不命中的请求。

 

  • Farkas和Jouppi (1994) 的研究:他们假设了一个8 KiB的单层次缓存和一个14周期的不命中惩罚,并观察了允许一个命中在不命中下优化时,对于SPECINT92和SPECFP92基准测试程序的有效不命中惩罚(effective miss penalty)的减少情况。他们发现对于SPECINT92程序平均减少了20%,对于SPECFP92程序平均减少了30%。
  • Li等人 (2011) 的研究:他们更新了前一项研究,使用了一个多层次缓存、更现代化的不命中惩罚假设和更大更具挑战性的SPECCPU2006基准测试程序。他们的研究基于一个类似于Intel i7的单核处理器模型。图显示了允许1、2和64个命中在不命中下优化时,数据缓存访问延迟的减少情况。他们发现由于缓存变大和增加了三级缓存,非阻塞缓存的效果有所降低,对于SPECINT2006程序平均减少了约9%,对于SPECFP2006程序平均减少了约12.5%。

 

评估非阻塞缓存性能的难点是,缓存不命中并不一定会导致处理器停顿。在这种情况下,很难判断任何一个不命中的影响,从而计算平均内存访问时间。有效的不命中惩罚并不是所有不命中的时间之和,而是处理器停顿的不重叠的时间。非阻塞缓存的效益是复杂的,它取决于以下几个因素:

  • 当有多个不命中时,不命中惩罚的大小,这决定了处理器能否在等待数据时继续执行其他指令。
  • 内存引用模式,这决定了处理器在一个不命中期间需要访问多少其他数据。
  • 处理器能够同时处理多少个不命中的请求,这决定了非阻塞缓存能够提供多少优化方式。

一般来说,乱序执行的处理器能够隐藏大部分一级数据缓存不命中但在二级缓存命中的惩罚,但是不能隐藏很大一部分低层次缓存不命中的惩罚。决定支持多少个未完成的不命中请求取决于以下几个因素:

  • 不命中流中的时间和空间局部性,这决定了一个不命中是否可以启动一个新的访问到低层次缓存或内存。
  • 响应内存或缓存的带宽,这决定了一个不命中需要等待多长时间才能得到数据。
  • 要允许在最低层次缓存有更多的未完成的不命中请求(因为这里的不命中时间最长),就需要在高层次缓存至少支持同样多的不命中请求,因为一个不命中必须从最高层次缓存开始。
  • 内存系统的延迟,这决定了一个不命中需要等待多长时间才能得到响应。

实现非阻塞缓存有以下两个主要的问题:

  • 如何在命中和不命中之间进行仲裁,解决冲突。在一个阻塞缓存中,不命中会导致处理器停顿,不会有更多的访问发生,直到不命中处理完毕。在一个非阻塞缓存中,命中可能与从下一级存储器返回的不命中发生碰撞。如果允许多个未完成的不命中,这种碰撞就更有可能发生。这些碰撞必须被解决,通常的方法是先给予命中优先于不命中,其次是对碰撞的不命中进行排序(如果可能的话)。
  • 如何跟踪未完成的不命中,知道何时可以让加载或存储继续执行。在一个阻塞缓存中,我们总是知道哪个不命中正在返回,因为只有一个可以未完成。在一个非阻塞缓存中,这种情况很少成立。考虑一下在一级缓存发生的一个不命中。它可能在二级缓存产生一个命中或不命中;如果二级缓存也是非阻塞的,那么返回到一级缓存的不命中的顺序就不一定和它们最初发生的顺序相同。多核和其他多处理器系统由于有非均匀缓存访问时间也会引入这种复杂性。当一个不命中返回时,处理器必须知道哪个加载或存储导致了这个不命中,以便这条指令可以继续执行;并且必须知道数据应该放在缓存的哪个位置(以及这个块的标记位的设置)。

在非阻塞高速缓存中,命中可能与从内存层次结构的下一级返回的未命中发生冲突。如果我们允许多个未完成的未命中,则未命中甚至有可能发生冲突。

为什么?

因为非阻塞缓存需要在有限的缓存空间和带宽内处理多个请求,而这些请求可能访问相同或相邻的缓存块。例如:

  • 如果一个命中请求和一个未命中请求访问同一个缓存块,那么它们就会发生冲突,因为它们需要同时读写这个块。通常的解决方法是让命中请求优先于未命中请求,以减少处理器的等待时间。
  • 如果一个未命中请求和另一个未命中请求访问同一个缓存组(set),那么它们就会发生冲突,因为它们需要同时占用这个组的一个空闲位置。通常的解决方法是对未命中请求进行排序,以保证一定的顺序和公平性。
  • 如果多个未命中请求返回的数据量超过了缓存到处理器的总线带宽,那么它们就会发生冲突,因为它们需要同时传输数据给处理器。通常的解决方法是增加总线带宽或使用压缩技术,以减少数据量。

非阻塞缓存需要额外的逻辑,因此在能量上有一些代价。然而,很难准确地评估它们的能量消耗,因为它们可能减少停顿时间,从而降低执行时间和能量消耗。除了上述问题之外,多处理器内存系统(无论是在单个芯片上还是多个芯片上)还必须处理与内存一致性和一致性相关的复杂实现问题。而且由于缓存不命中不再是原子性的(因为请求和响应被分开并且可能被多个请求交错),还有死锁的可能性。

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

23家企业推出昇腾AI系列新品 覆盖云、边、端智能硬件

[中国,上海,2023年7月6日] 昇腾人工智能产业高峰论坛在上海举办。论坛现场,大模型联合创新启动,26家行业领军企业、科研院所与华为将共同基于昇腾AI进行基础大模型与行业大模型应用创新。同时,华为携手伙伴联合发布昇腾…

Java虚拟机(JVM)、垃圾回收器

一、Java简介 1、Java开发及运行版本 JRE(Java Runtime Environment,运行环境) 所有的程序都要在JRE下才能够运行。包括JVM和Java核心类库和支持文件。JDK(Java Development Kit,开发工具包) 用来编译、调试Java程序的开发工具包。包括Java工具(javac/…

【LNMP】架构及应用部署 搭建电影网站

准备环境 一台虚拟机192.168.108.67 关闭防火墙 systemctl stop firewalld iptables -F setenforce 0 检查光盘 查看yum仓库 安装nginx依赖 [rootlocalhost ~]# yum -y install pcre-devel zlib-devel 创建管理nginx用户(用来运行nginx) [rootlocalh…

picard安装时报错“Exception in thread “main“ java.lang.UnsupportedClassVersionError”

最近在通过GATK所介绍的best practice流程来call SNP流程 1.流程 1.1 BWA比对,获得sam文件 1.2 准备用picard来压缩排序sam文件为bam文件,并对bam文件进行去重复(duplicates marking) 这是就需要用到picard软件 按照教程网页上…

go-zero的rpc服务案例解析

go-zero的远程调用服务是基于gRpc的gRPC教程与应用。 zero使用使用gRpc需要安装protoc插件,因为gRpc基于protoc插件使用protocol buffers文件生成rpc服务器和api的代码的。 gRPC 的代码生成还依赖 protoc-gen-go,protoc-gen-go-grpc 插件来配合生成 Go…

机器学习笔记 - 局部敏感哈希简介

一、算法简述 局部敏感散列 (LSH) 技术,可显著加快对数据的邻居搜索或近似重复检测。例如,这些技术可用于以惊人的速度过滤掉抓取网页的重复项,或者从地理空间数据集中对附近点执行近恒定时间查找。 让我们快速回顾一下其他类型的哈希函数,哈希函数的传统用途是…

青岛大学_王卓老师【数据结构与算法】Week04_13_案例分析与实现3_学习笔记

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享,另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–…

漏洞检测01:DNS域传送漏洞

DNS域传送漏洞 文章目录 DNS域传送漏洞漏洞描述检测方法修复建议 DNS域传送漏洞 该漏洞当下已经非常少了 DNS服务器分为:主服务器、备份服务器和缓存服务器。在主备服务器之间同步数据库,需要使用“DNS域传送”。域传送是指备份服务器从主服务器拷贝数…

多目标下改进NSGA-II算法并使用ZDT测试函数验证matlab

目标优化机械臂轨迹,不知道NSGA-II算法改进后到底有没有效果,需要用测试函数进行验证,附matlab代码 参考多目标优化NSGA-II的实现(MATLAB完整代码)_nsga2 matlab_羽丶千落的博客-CSDN博客 目录 1.复制所有matlab代码…

STM32速成笔记—低功耗模式

文章目录 一、STM32低功耗模式介绍二、睡眠模式2.1 进入睡眠模式2.2 退出睡眠模式 三、停止模式3.1 进入停止模式3.2 退出停止模式 四、待机模式五、程序设计 一、STM32低功耗模式介绍 STM32提供了一些低功耗模式。默认情况下,系统复位或上电复位后,微控…

html中表格

一、table标签 参数说明 实例 <body><table border"1" align"center" width"300" height"200" cellspacing"10"><tr><td>1.1</td><td>1.2</td><td>1.3</td></t…

把labelme得到的json文件转换成yolov8需要的格式,划分数据集

使用labelme打标&#xff0c;得到json文件把所有json文件放到一个单独的文件夹&#xff0c;里面只有json文件使用脚本&#xff0c;把json里面的label,标注框的中心坐标、宽、高提取出来&#xff0c;注意这里的4个值都按照图像大小压缩了。 脚本如下&#xff1a; import json…

【网页设计】基于HTML的湖南渔鼓文化宣传网页的设计

1.引言 随着文化交流的不断深入&#xff0c;湖南渔鼓文化作为湖南省的非物质文化遗产&#xff0c;逐渐引起了人们的关注和研究。为了更好地推广和宣传湖南渔鼓文化&#xff0c;我们设计了一款基于HTML的湖南渔鼓文化宣传网页。 该网页旨在向广大用户介绍湖南渔鼓文化的深厚底…

第四章:SSD网络详解

(目标检测篇&#xff09;系列文章目录 第一章:R-CNN网络详解 第二章:Fast R-CNN网络详解 第三章:Faster R-CNN网络详解 第四章:SSD网络详解 第五章:YOLO v1网络详解 第六章:YOLO v2网络详解 第七章:YOLO v3网络详解 文章目录 系列文章目录技术干货集锦前言一、摘要二、正…

FME之发布全局变量和接收全局变量

1.发布变量用VariableSetter转换器&#xff0c;其中DH是全局变量名称&#xff0c;它的值是从上一步产生的数据中某个字段提取。发布之前我们一般都会用Sampler抽样保留一条记录即可。 2.接收全局变量用VariableRetriever转换器&#xff0c;其中变量名称用之前发布的全局变量名称…

Redis下载和安装(Windows系统)

本套教程中采用 Windows 系统对 Redis 数据库进行讲解。 虽然 Redis 官方网站没有提供 Windows 版的安装包&#xff0c;但可以通过 GitHub 来下载 Windows 版 Redis 安装包&#xff0c;下载地址&#xff1a;点击前往。 注意&#xff1a;Windows 安装包是某位民间“大神”根据 …

小白到运维工程师自学之路 第四十七集 (LNMP部署电影网站)

一、概述 Linux&#xff1a;作为操作系统&#xff0c;提供服务器的基本功能和稳定性。通常使用常见的Linux发行版&#xff0c;如Ubuntu、CentOS等。 Nginx&#xff1a;作为Web服务器和反向代理服务器&#xff0c;处理HTTP请求和传递数据。Nginx具有高性能、稳定性和并发处理能…

Java链式编程与Builder(建造者)设计模式

一、链式编程 1.1.释义 链式编程&#xff0c;也叫级联式编程&#xff0c;调用对象的函数时返回一个this对象指向对象本身&#xff0c;达到链式效果&#xff0c;可以级联调用。 1.2.特点 可以通过一个方法调用多个方法&#xff0c;将多个方法调用链接起来&#xff0c;形成一…

Mysql数据NULL避坑指南

NULL空值是mysql中一种特殊的数据值&#xff08;即"缺少的未知值"&#xff09;,NULL和字符串空值不是一回事&#xff0c;处理NULL与其他值不同&#xff0c;下面具体阐述相关差异&#xff1a; 一、NULL运算符 1、普通数据使用 > 、 < 、即可做常用的逻辑运算如…

Linux随机生成数

简介 在某些情况下&#xff0c;我们需要随机产生一个数来在一些场景中使用&#xff0c;例如验证码、ssh反向代理随机数的产生&#xff0c;又或者在一些shell脚本设计中需要用到随机数&#xff0c;下面以随机产生一个30000-40000之间的随机数为例。 使用shuf shuf 命令在一些 Li…