cache合并
linux下分卷压缩,合并解压的3种方法

linux下分卷压缩,合并解压的3种⽅法我们上传东西的时候,由于⽂件过⼤⽽不能上传,或者不给上传,最明显的就是发邮件了,附件最⼤5M,有的10M。
如果超过了就郁闷了。
这个时候,如果能把压缩的东西,分割开来就⽐较爽了,windows下⾯我想⼤家知道怎么分割,利⽤winrar,winzip图型化设置压缩出来的块的⼤⼩。
但是在linux下⾯有没有这样的⽅法了,linux下⾯有rar命令,有zip命令,windows下⾯这⼆种⽅式可以分割压缩,我想linux下⾯绝对也是可以的。
下⾯是我尝试过程的记录:⼀,rar分卷压缩和合并解压rar -h我们会发现以下参数,要创建多⼤的卷。
v Create volumes with size autodetection or list all volumesv<size>[k,b] Create volumes with size=<size>*1000 [*1024, *1]查看复制打印?1. [zhangy@BlackGhost awksed]$ rar a -v5m google.rar Google_Maps_API.doc //-v和5m之间不要有空格2.3. RAR 3.92 Copyright (c) 1993-2010 Alexander Roshal 10 Feb 20104. Shareware version Type RAR -? for help5.6. Evaluation copy. Please register.7.8. Creating archive google.rar9.10. Adding Google_Maps_API.doc11. Calculating the control sum12.13. Creating archive google.part2.rar14.15. ... Google_Maps_API.doc16. Calculating the control sum17.18. Creating archive google.part3.rar19.20. ... Google_Maps_API.doc OK21. Calculating the control sum22. Done23. [zhangy@BlackGhost awksed]$ unrar x google.part1.rar //合并并解压24.25. UNRAR 3.90 freeware Copyright (c) 1993-2009 Alexander Roshal26.27. Extracting from google.part1.rar28.29. Extracting Google_Maps_API.doc30.31. Extracting from google.part2.rar32.33. ... Google_Maps_API.doc 76%34.35. Extracting from google.part3.rar36.37. ... Google_Maps_API.doc OK38. All OK⼆,zip分卷压缩和合并解压zip -h2你会发现,分卷参数-s,意思是说分割成多⼤的卷Splits (archives created as a set of split files):-s ssize create split archive with splits of size ssize,where ssize nmn number and m multiplier (kmgt, default m), 100k -> 100 kB下⾯的意思是说如果是分卷的了,⽤ -s 0 --out把分卷合成⼀个If input is split, output will default to same split sizeUse -s=0 or -s- to turn off splitting to convert split to single file:zip in_split_archive -s 0 --out out_single_file_archive⽤zip来分卷压缩时,他必须是.zip的形势,他的流程是这样的,先把⼀般⽂件压缩成.zip的⽂件,然后在将.zip的⽂件分成多少块,如果你不这样坐呢,会提⽰错误的。
cache创建数据库

cache创建数据库cache创建数据库引⽤⽂档是:cache⾯向对象软件开发教程(版本1.1).pdf由于⽂档上⾯的教程是按照cache旧版本来写的,有些地⽅不⼀致,⾃⼰摸索了⼀下,我把如今cache⽐较新版本和旧版本做⼀个对⽐。
主要是创建数据库这块开始,之前的基础知识应该没有什么区别。
旧版本在这⾥简称V1,新版本是ensemble2010,这⾥简称V2。
教程⽂档上(P32)给出的cache cube和V2版有所不同。
V1 cache cube V1 cube菜单⽽在V2 cube(ensemble2010)⾥如下V2 ensemble V1 cube说明⼤家可以看到,主要区别就是第三栏中,V1版本中的Explorer.exe,SQL manager,Control Panel,Configuration manager现在合并成了V2版本中的System Management Portal(SMP)了。
菜单中带下划线的字母为菜单快键键。
过去这些分开的菜单如今集成到了⼀块,打开SMP后,相互跳转更加⽅便,维护使⽤起来提⾼了效率,这点⼉还是不错的。
V2 SMP基本上关于配置类的都在System Administration⾥⾯。
就不⼀⼀讲了,现在说创建数据库。
V1版本中步骤是在Windows中,选择⽴⽅体->Configuration Manager ,打开配置管理器 (Configuration Manager),以后我们可以通过配置管理器添加/删除数据库⽂件。
新版本中我们进⼊SMP,点击System Administration下的Configuration,然后点击SYStem Configuration下的Local DATAbases。
then可以看到,Caché 中已经存在了⼏个数据库,这是在安装时就已经⾃动默认配置好的。
接下来的操作和⽂档上基本⼀致。
hint用法

1. /*+ALL_ROWS*/表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化.2. /*+FIRST_ROWS*/表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化.3. /*+CHOOSE*/表明如果数据字典中有访问表的统计信息,将基于开销的优化方法,并获得最佳的吞吐量;表明如果数据字典中没有访问表的统计信息,将基于规则开销的优化方法;4. /*+RULE*/表明对语句块选择基于规则的优化方法.5. /*+FULL(TABLE)*/表明对表选择全局扫描的方法.6. /*+ROWID(TABLE)*/提示明确表明对指定表根据ROWID进行访问.例如:SELECT /*+ROWID(BSEMPMS)*/ * FROM BSEMPMS WHERE ROWID>='AAAAAAAAAAAAAA'AND EMP_NO='SCOTT';7. /*+CLUSTER(TABLE)*/提示明确表明对指定表选择簇扫描的访问方法,它只对簇对象有效.例如:SELECT /*+CLUSTER */ BSEMPMS.EMP_NO,DPT_NO FROM BSEMPMS,BSDPTMSWHERE DPT_NO='TEC304' AND BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;8. /*+INDEX(TABLE INDEX_NAME)*/表明对表选择索引的扫描方法. 通常用于指定谓词列使用索引9. /*+INDEX_ASC(TABLE INDEX_NAME)*/表明对表选择索引升序的扫描方法.10. /*+INDEX_COMBINE*/为表选择位图访问路经,如果INDEX_COMBINE中没有提供作为参数的索引,将选择出位图索引的布尔组合方式.例如:SELECT /*+INDEX_COMBINE(BSEMPMS SAL_BMI HIREDATE_BMI)*/ * FROM BSEMPMSWHERE SAL<5000000 AND HIREDATE<SYSDATE;11. /*+INDEX_JOIN(TABLE INDEX_NAME)*/提示明确命令优化器使用索引作为访问路径. index_join通常用于小于1w行的连接例如:SELECT /*+INDEX_JOIN(BSEMPMS SAL_HMI HIREDATE_BMI)*/ SAL,HIREDATEFROM BSEMPMS WHERE SAL<60000;12. /*+INDEX_DESC(TABLE INDEX_NAME)*/表明对表选择索引降序的扫描方法.13. /*+INDEX_FFS(TABLE INDEX_NAME)*/对指定的表执行快速全索引扫描,而不是全表扫描的办法.,只能用于not null列14. /*+ADD_EQUAL TABLE INDEX_NAM1,INDEX_NAM2,...*/提示明确进行执行规划的选择,将几个单列索引的扫描合起来.例如:SELECT /*+INDEX_FFS(BSEMPMS IN_DPTNO,IN_EMPNO,IN_SEX)*/ * FROM BSEMPMS WHERE EMP_NO='SCOTT' AND DPT_NO='TDC306';15. /*+USE_CONCAT*/对查询中的WHERE后面的OR条件进行转换为UNION ALL的组合查询.例如:SELECT /*+USE_CONCAT*/ * FROM BSEMPMS WHERE DPT_NO='TDC506' AND SEX='M';16. /*+NO_EXPAND*/对于WHERE后面的OR 或者IN-LIST的查询语句,NO_EXPAND将阻止其基于优化器对其进行扩展.例如:SELECT /*+NO_EXPAND*/ * FROM BSEMPMS WHERE DPT_NO='TDC506' AND SEX='M';17. /*+NOWRITE*/禁止对查询块的查询重写操作.18. /*+REWRITE*/可以将视图作为参数.19. /*+MERGE(TABLE)*/能够对视图的各个查询进行相应的合并.例如:SELECT /*+MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS A (SELET DPT_NO,AVG(SAL) AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) V WHERE A.DPT_NO=V.DPT_NO AND A.SAL>V.AVG_SAL;20. /*+NO_MERGE(TABLE)*/对于有可合并的视图不再合并.例如:SELECT /*+NO_MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS A (SELECT DPT_NO,AVG(SAL) AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) V WHEREA.DPT_NO=V.DPT_NO AND A.SAL>V.AVG_SAL;21. /*+ORDERED*/根据表出现在FROM中的顺序,ORDERED使ORACLE依此顺序对其连接.22. /*+USE_NL(TABLE)*/将指定表与嵌套的连接的行源进行连接,并把指定表作为内部表.例如:SELECT /*+USE_NL(BSEMPMS)*/ BSDPTMS.DPT_NO,BSEMPMS.EMP_NO,BSEMPMS.EMP_NAM FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;23. /*+USE_MERGE(TABLE)*/将指定的表与其他行源通过合并排序连接方式连接起来.例如:SELECT /*+USE_MERGE(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMSWHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;24. /*+USE_HASH(TABLE)*/将指定的表与其他行源通过哈希连接方式连接起来.例如:SELECT /*+USE_HASH(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMSWHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;25. /*+DRIVING_SITE(TABLE)*/强制与ORACLE所选择的位置不同的表进行查询执行.例如:SELECT /*+DRIVING_SITE(DEPT)*/ * FROM BSEMPMS,DEPT@BSDPTMSWHERE BSEMPMS.DPT_NO=DEPT.DPT_NO;26. /*+LEADING(TABLE)*/将指定的表作为连接次序中的首表.27. /*+CACHE(TABLE)*/当进行全表扫描时,CACHE提示能够将表的检索块放置在缓冲区缓存中最近最少列表LRU的最近使用端28. /*+NOCACHE(TABLE)*/当进行全表扫描时,CACHE提示能够将表的检索块放置在缓冲区缓存中最近最少列表LRU的最近使用端29. /*+APPEND*/直接插入到表的最后,可以提高速度.30. /*+NOAPPEND*/通过在插入语句生存期内停止并行模式来启动常规插入.ALL_ROWS AND_EQUALANTIJOIN APPENDBITMAP BUFFERBYPASS_RECURSIVE_CHECK BYPASS_UJVCCACHE CACHE_CBCACHE_TEMP_TABLE CARDINALITYCHOOSE CIV_GBCOLLECTIONS_GET_REFS CPU_COSTINGCUBE_GB CURSOR_SHARING_EXACTDEREF_NO_REWRITE DML_UPDATEDOMAIN_INDEX_NO_SORT DOMAIN_INDEX_SORTDRIVING_SITE DYNAMIC_SAMPLINGDYNAMIC_SAMPLING_EST_CDN EXPAND_GSET_TO_UNIONFACT FIRST_ROWSFORCE_SAMPLE_BLOCK FULLGBY_CONC_ROLLUP GLOBAL_TABLE_HINTSHASH HASH_AJHASH_SJ HWM_BROKEREDIGNORE_ON_CLAUSE IGNORE_WHERE_CLAUSEINDEX_ASC INDEX_COMBINEINDEX_DESC INDEX_FFSINDEX_JOIN INDEX_RRSINDEX_SS INDEX_SS_ASCINDEX_SS_DESC INLINELEADING LIKE_EXPANDLOCAL_INDEXES MATERIALIZEMERGE MERGE_AJMERGE_SJ MV_MERGENESTED_TABLE_GET_REFS NESTED_TABLE_SET_REFSNESTED_TABLE_SET_SETID NL_AJNL_SJ NO_ACCESSNO_BUFFER NO_EXPANDNO_EXPAND_GSET_TO_UNION NO_FACTNO_FILTERING NO_INDEXNO_MERGE NO_MONITORINGNO_ORDER_ROLLUPS NO_PRUNE_GSETSNO_PUSH_PRED NO_PUSH_SUBQNO_QKN_BUFF NO_SEMIJOINNO_STATS_GSETS NO_UNNESTNOAPPEND NOCACHENOCPU_COSTING NOPARALLELNOPARALLEL_INDEX NOREWRITEOR_EXPAND ORDEREDORDERED_PREDICATES OVERFLOW_NOMOVE PARALLEL PARALLEL_INDEXPIV_GB PIV_SSFPQ_DISTRIBUTE PQ_MAPPQ_NOMAP PUSH_PREDPUSH_SUBQ REMOTE_MAPPEDRESTORE_AS_INTERVALS REWRITERULE SA VE_AS_INTERV ALSSCN_ASCENDING SELECTIVITYSEMIJOIN SEMIJOIN_DRIVERSKIP_EXT_OPTIMIZER SQLLDRSTAR STAR_TRANSFORMA TION SWAP_JOIN_INPUTS SYS_DL_CURSORSYS_PARALLEL_TXN SYS_RID_ORDERTIV_GB TIV_SSFUNNEST USE_ANTIUSE_CONCAT USE_HASHUSE_MERGE USE_NLUSE_SEMI USE_TTT_FOR_GSETS Undocumented (under-documented) hints:BYPASS_RECURSIVE_CHECK BYPASS_UJVCCACHE_CB CACHE_TEMP_TABLECIV_GB COLLECTIONS_GET_REFS CUBE_GB CURSOR_SHARING_EXACT DEREF_NO_REWRITE DML_UPDATEDOMAIN_INDEX_NO_SORT DOMAIN_INDEX_SORT DYNAMIC_SAMPLING DYNAMIC_SAMPLING_EST_CDN EXPAND_GSET_TO_UNION FORCE_SAMPLE_BLOCKGBY_CONC_ROLLUP GLOBAL_TABLE_HINTSHWM_BROKERED IGNORE_ON_CLAUSEIGNORE_WHERE_CLAUSE INDEX_RRSINDEX_SS INDEX_SS_ASCINDEX_SS_DESC LIKE_EXPANDLOCAL_INDEXES MV_MERGENESTED_TABLE_GET_REFS NESTED_TABLE_SET_REFS NESTED_TABLE_SET_SETID NO_EXPAND_GSET_TO_UNION NO_FACT NO_FILTERINGNO_ORDER_ROLLUPS NO_PRUNE_GSETSNO_STATS_GSETS NO_UNNESTNOCPU_COSTING OVERFLOW_NOMOVEPIV_GB PIV_SSFPQ_MAP PQ_NOMAPREMOTE_MAPPED RESTORE_AS_INTERV ALSSA VE_AS_INTERVALS SCN_ASCENDINGSKIP_EXT_OPTIMIZER SQLLDRSYS_DL_CURSOR SYS_PARALLEL_TXNSYS_RID_ORDER TIV_GBTIV_SSF UNNESTUSE_TTT_FOR_GSETS。
cacheable_el表达式_理论说明

cacheable el表达式理论说明1. 引言1.1 概述本文讨论的主题是cacheable el表达式的理论说明。
在现代的软件开发过程中,大量使用了el表达式来简化和优化代码编写。
而cacheable el表达式则是对el 表达式的进一步扩展,通过缓存计算结果来提高程序的性能。
本文将详细介绍cacheable el表达式的定义、原理以及在实际应用中的优势与局限性。
1.2 文章结构本文分为五个部分进行阐述。
首先,在引言部分,我们将对文章进行概述,并介绍整篇文章的结构。
接下来,在第二部分中,我们将详细解释EL表达式的基本概念,然后引入cacheable EL表达式,并解释其背后的原理和工作方式。
第三部分将探讨cacheable el表达式在实际应用中所具备的优势和局限性。
接着,在第四部分中,我们将分享一些编写和使用cacheable el表达式时需要注意的技巧和事项。
最后,在第五部分中,我们将总结cacheable el表达式的理论说明及其应用场景,并展望该领域未来的研究方向。
1.3 目的通过本文对cacheable el表达式进行理论说明,旨在帮助读者深入了解和掌握这一概念,并能够灵活运用于实际项目中。
我们希望读者能够从本文中获得关于cacheable el表达式的扎实理论基础,并能够在开发中充分利用其优势,提升程序性能和开发效率。
此外,我们也希望通过本文的介绍,引起更多研究者对cacheable el表达式领域的关注,并促进该领域的进一步发展。
2. cacheable el表达式的定义和原理2.1 EL表达式简介EL表达式(Expression Language)是一种特定的语言,用于在Java EE应用程序中访问和操作对象的属性。
它是一种轻量级、简洁、易于使用的表达式语言,通常用于JSP页面中。
2.2 cacheable EL表达式的概念cacheable EL表达式是指在EL表达式中添加了缓存机制,以提高性能和减少资源消耗。
perf性能分析实例——使用perf优化cache利用率

perf性能分析实例——使⽤perf优化cache利⽤率摘要:本⽂主要讲解如何使⽤perf观察程序在缓存利⽤⽅⾯的瓶颈,进⽽优化程序,提⾼cache命中率。
主要讲解提⾼缓存利⽤的⼏种常⽤⽅法。
1.程序局部性⼀个编写良好的计算机程序通常具有程序的局部性,它更倾向于引⽤最近引⽤过的数据项,或者这个数据周围的数据——前者是时间局部性,后者是空间局部性。
现代的设计,从硬件到操作系统再到应⽤程序都利⽤了程序的局部性原理:硬件层,通过cache来缓存刚刚使⽤过的指令或者数据,来提交对内存的访问效率。
在操作系统级别,操作系统利⽤主存来缓存刚刚访问过的磁盘块;在应⽤层,web浏览器将最近引⽤过的⽂档放在磁盘上,⼤量的web服务器将最近访问的⽂档放在前端磁盘上,这些缓存能够满⾜很多请求⽽不需要服务器的⼲预。
本⽂主要将的是硬件层次的程序局部性。
2.处理器存储体系计算机体系的储存层次从内到外依次是寄存器、cache(从⼀级、⼆级到三级)、主存、磁盘、远程⽂件系统;从内到外,访问速度依次降低,存储容量依次增⼤。
这个层次关系,可以⽤下⾯这张图来表⽰:程序在执⾏过程中,数据最先在磁盘上,然后被取到内存之中,最后如果经过cache(也可以不经过cache)被CPU使⽤。
如果数据不再cache之中,需要CPU到主存中存取数据,那么这就是cache miss,这将带来相当⼤的时间开销。
3.perf原理与使⽤简介Perf是 kernel⾃带的系统性能优化⼯具。
Perf的优势在于与 Kernel的紧密结合,它可以最先应⽤到加⼊Kernel的new feature。
perf可以⽤于查看热点函数,查看cashe miss的⽐率,从⽽帮助开发者来优化程序性能。
性能调优⼯具如 perf,Oprofile 等的基本原理都是对被监测对象进⾏采样,最简单的情形是根据 tick 中断进⾏采样,即在 tick 中断内触发采样点,在采样点⾥判断程序当时的上下⽂。
吉林大学计算机系统结构题目整合第五章

第五章存储层次知识点汇总存储器层次结构、存储层次性能参数(平均每位价格、命中率、平均访存时间)、存储层次4个问题、CPU 访存地址分割、全相联映像、直接映像、组相联映像、查找方法、替换算法(随机、先进先出、最近最少使用法)、写直达法、写回法、按写分配、不按写分配、Cache性能分析、3C失效(强制失效、容量失效、冲突失效)、Victim Cache、伪相联映像Cache、硬件预取、编译器优化(数组合并、内外循环交换、循环融合、分块)、写缓冲合并、单字宽存储器、多字宽存储器、多体交叉存储器、存储体、虚拟存储器(页式、段式)、快表(TLB)简答题1.单级存储器的主要矛盾是什么?通常采取什么方法来解决?(知识点:多级存储器)答:主要矛盾:(1) 速度越快,每位价格就越高。
(2) 容量越大,每位价格就越低。
(3) 容量越大,速度越慢。
采取多级存储层次方法来解决。
2.“Cache-主存”和“主存-辅存”层次的主要区别是什么?(知识点:存储层次)3.在存储层次中应解决哪四个问题?(知识点:存储层次的四个问题)答:(1)映像规则:当把一个块调入高一层存储器时,可以放到哪些位置上。
(2)查找算法:当所要访问的块在高一层存储器中时,如何找到该块。
(3)替换算法:当发生失效时,应替换哪一块。
(4)写策略:当进行写访问时,应进行哪些操作。
4.地址映像方法有哪几种?它们各有什么优缺点?(知识点:地址映像)(1)全相联映像。
实现查找的机制复杂,代价高,速度慢。
Cache空间的利用率较高,块冲突概率较低,因而Cache的失效率也低。
(2)直接映像。
实现查找的机制简单,速度快。
Cache空间的利用率较低,块冲突概率较高,因而Cache 的失效率也高。
(3)组相联映像。
组相联是直接映像和全相联的一种折中。
5.Cache的3C失效是哪三种失效?针对每种失效给出一种降低失效率的方法。
(知识点:3C失效)答:强制性失效、容量失效、冲突失效。
硬件体系架构浅析(何登成)

• SSD层面优化
– – – – FTL(Flash Translation Layer):物理逻辑地址映射 Reclamation:异步擦除策略,降低延时 Wear Leveling:均衡写磨损,提升寿命 Spare Area:预留空间,减少写放大
•
Memory特性
– 随机定位;易失存储;容量有限(单块容量小,插槽少)
Memory-性能指标
• Memory-性能指标
– – 核心频率(F1):内存的工作频率
• 倍增系数:(预读位宽/2) * 2(上升下降沿均可传输)
时钟频率(F2):核心频率通过倍频技术得到(倍频,既为预读位宽,基准为2 bits)
• 页表(Page Table)
– 虚拟地址到物理地址的映射表
• TLB(Translation lookaside buffer)
– 缓存Virtual address 到Physical address 的映射关系,加快查找
• 大页(Huge pages)
– 降低页表空间消耗 – 固定内存空间,防止swap
服务器体系结构(cont.)
HDD/SSD-HDD概述
• 硬盘接口
– – – ATA
• IDE(PATA, parallel ATA), SATA(Serial ATA)
SCSI(parallel), SAS(serial) FC-SCSI (serial)
SCSI
• •
FC(Fibre Channel)
带宽
• • •
双通道
Memory-性能指标(续)
Memory-定位
• 虚拟地址(Virtual Address)
计算机系统结构复习题

1【简答题】传统的存储程序计算机的主要特征是什么?存在的主要问题是什么?目前计算机系统是如何改进的?正确答案:解:主要特征:(1)机器以运算器为中心;(2)采用存储程序原理;(3)存储器是按地址访问的、线性编址的空间;(4)控制流由指令流产生;(5)指令由操作码和地址码组成;(6)数据以二进制编码表示,采用二进制运算。
主要问题和改进:(1)问题:以运算器为中心,所有部件的操作都由控制器集中控制,导致慢速输入输出操作占用快速运算器矛盾,影响运算器效率发挥。
改进:各种分布式的I/O处理或输入输出方式如程序控制、DMA(直接存储器访问)方式、 I/O 处理机等。
(2)问题:数据和指令存放在同一存储器中,自我修改程序是难以编制、调试和使用的,不利于指令执行的重叠和流水。
改进:通过存储管理硬件的支持,由操作系统控制在程序执行过程中不准修改程序.(3)问题:访问存储器次数较多影响计算机系统性能。
改进:按内容访问的相联存储器CAM,大量使用通用寄存器,在CPU和主存之间设置高速缓冲存储器cache。
(4)问题:受程序计数器控制,程序执行只能串行、顺序执行.改进:改进CPU的组成,如采用重叠方式、先行控制、多操作部件甚至流水方式把若干条指令的操作重叠起来;采用向量处理技术、多机并行处理,总之通过并行处理技术进一步提升计算机系统速度。
(5)问题:需要指令功能更加丰富,但实现困难;计算机存储器容量大增,采用直接寻址方式指令中地址码位数不够.改进:出现了CISC和RISC指令系统,CISC用硬件实现大量丰富功能,RISC只包含使用频率高的少量指令;采用多种灵活的寻址方式,如间接寻址、相对寻址、变址寻址、基址寻址、页式寻址等。
2【简答题】通用寄存器型指令系统结构在灵活性和提高性能方面的优势主要体现在哪几个方面?正确答案:(1)寄存器的访问速度比存储器快很多;(2)对编译器而言,能更加容易、有效地分配和使用寄存器。
在表达式求值方面,通用寄存器型结构具有更大的灵活性和更高的效率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Cache 学习 5.1 Cache的必要性 问题:在多层次存储器结构中,距离CPU越远,访问容量越大,访问速度越慢。 解决采用存储器层次结构,实现大容量、快速存储器。每一层比下一层有更小的存储空间、更快的读写速率,价格与最便宜的一层一致,层与层之间是子集关系。 桌面处理器:一次为单个用户运行一个程序,需要考虑存储器层次结构带来的延迟问题,阻止程序间数据混淆。 服务器:同时为成千上百个用户执行大量应用程序,导致更多的环境切换,因此服务器还需要存储带宽问题,兼顾防止一个用户访问其他用户的数据。 嵌入式:首先,用于实时处理,要考虑最坏情况时的性能,Cache能提高平均性能,但是会降低最坏情况的性能。其次,嵌入式关注功耗和平均寿命,需要减少硬件,与扩展硬件提高存储性能方法相悖。第三,嵌入式操作系统一般非常简单,可不考虑存储层次保护机制。最后,嵌入式处理器内存小,常常不需要磁盘存储。
5.2 Cache知识回顾
名词:Cache命中,Cache缺失,块,页、页缺失。 层次名称:寄存器,Cache,—(块)—内存,—(页)—磁盘
5.2.1 Cache性能回顾
CPU暂停工作、等待一次存储器访问的周期数成为存储器停顿周期数,其性能可以表示为: CPU执行时间=(CPU时钟周期数+存储器停顿周期数)×缺失代价 假设CPU时钟周期包含了处理Cache命中和Cache缺失时CPU停止的时间, 存储器停顿周期数可以表示为: 存储器停顿周期数=缺失次数×缺失代价 =执行指令数×缺失次数/指令数×缺失代价 =执行指令数×存储器访问次数/指令数×缺失率×缺失代价 一般缺失率可用硬件Cache仿真器来测量。通常情况下,一般采用每千条指令的缺失次数来计算。
5.2.2 Cache层次存储4个问题
Q1:一个块,会放在哪里? 直接映射:每个块在Cache中只能出现在唯一位置上,映射方法: (块地址) mod (Cache中的块数) 全相联映射:一个块可以放到cache中任何一个地方。 组相联映射:一个块放到一个受限的组里。一个块首先映射到到一个组中,可以放到组中任何一个块中。组通常用为选择方式确定: (块地址) mod ( cache中的组数) 如果一个组里有n块,这种映射方法称之为n路组向联。直接映射是一个简单的1路组相联。全相联是只有1组的m路组向联映射。 Q2:怎样找到cache中的块? Cache地址分为块地址与偏移地址;块地址又分为标志字段与索引字段。偏移地址用来选择块中所需要的数据;索引字段用来选择组,通过标志字段来判断是否发生命中,无需判断块内偏移与索引字段。 增加相联度会增加组内的块数,组数减少导致索引段减少,标识字段增加,最后变成全相联,不存在索引字段。 Q3:没有命中,块怎样替换? 直接映射法:直接替换没用命中的检查的块。 全相联或组相联,需要多个块做出选择。大容量时3中方法区别不大,小容量时LRU最优: 随机替换(Random):利用伪随机数块号,尤其适用于硬件调试。 最近最少使用(LRU):记录块的访问次数,利用历史信息替换掉最长时间没有使用的cache块。 先进先出(FIFO)。 Q4:写操作时cache会发生什么? 一般来说,CPU需要等待读操作完成,不需要等待写操作完成,且块标志与数据同时读出,舍弃没有命中的信息可提高速率,嵌入式系统不允许无用工作。对写操作不能进行如此优化,因为只有标识为有效时,块才能被修改。2中基本的写策略: 写直达(write through):信息同时写入cache和更低一层的存储器的块中。易实现,写直达方法中读操作缺失发生时cache始终是干净的,因此不需要对低层存储器进行写操作,常与不按写分配(no-write allocate)配合。 写回法(write back):信息只写入cache。只有cache中块被替换,信息才会写回到主存中。写操作与cache速度一致,且一个块一次写入仅仅需要对下层存储器的一次写操作,因此需要较小的带宽,可用于多处理器的服务器系统。常与写分配(write allocate)配合。 写操作缺失时,通常策略如下: 写分配(write allocate)内存读到cache,执行命中前面写命中时的操作。与读缺失类似。 不按写分配(no-write allocate),仅修改低层存储器中的该块,不将该块写入cache中,直到程序要读一个块时,该块才被取到cache中。 Cache可以提供指令与数据,但存在瓶颈,例如同时执行一条载入指令与存储指令,单独的cache会产生资源冲突,产生停顿。最简单的方法是将cache划分为指令cache与数据cache。指令cache比数据cache有更低的缺失率,但分立的指令cache与数据cache缺失率之和比相同容量的cache更大。 5.3 Cache性能 5.3.1 平均存储器访问时间 指令数可以用来评价CPU的性能,缺失率可以评价存储器层次结构的性能,但也会产生误导,可用平均存储器访问时间来评定:
=+平均存储器访问时间命中时间缺失率缺失代价 虽然降低最小平均存储器访问时间是一个合理的目标,但是最终目标时降低CPU执行时间,两者时有区别的。例如在2路组相联情况下,虽然缺失率与平局存储器访问时间较低,但进行组内多路选择时CPU时钟周期也会增加,导致CPU执行时间变长。 一般观点,把命中时钟周期数包含到CPU执行时钟周期数种。Cache的行为会对较低CPI与较快时钟频率的CPU产生双重影响: 1.CPI较低时,cache缺失时钟数会对CPU时间产生较大影响。 2.计算CPI(cache缺失情况)时,cache缺失代价用缺失时花费的CPU时钟周期数来度量。因此,对于存储器层次结构相同的计算机,CPU频率越高,每次缺失就需要更多的时钟周期数,因此CPI花费在存储器部分的周期就较多。
5.3.2 缺失代价与乱序执行处理器
乱序执行(out-of-order execution):CPU允许将多条指令不按程序规定的顺序分开发送给各相应电路单元处理的技术。这样将根据各电路单元的状态和各指令能否提前执行的具体情况分析后,将能提前执行的指令立即发送给相应电路。 重新定义存储器停顿周期:
-=(全部缺失延迟重叠缺失延迟)指令数指令数
存储器停顿周期数缺失次数
一般确定延迟时间的方式有3种:从存储器指令进入指令窗口的时刻算起;或是从地址产生的时刻算起;或是从指令实际被送到存储器的时刻算起。只要使 用一致,任何一种方式都行。 1. 索引长度确定: index2
×cache=块容量组相联度
容量
2. 平均存储器访问时间: =+平均存储器访问时间命中时间缺失率缺失代价 3. 存储器停顿周期: =====指令数指令数缺失次数缺失代价缺失次数指令数缺失代价
指令数每条指令缺失次数缺失代价存储器访问次数指令数(缺失率)缺失代价
指令数(每条指令访问存储器次数缺失率)缺失代价 4. CPU执行时间: CPU+CPI+CPI+CPI+====时钟周期数存储器停顿周期
存储器停顿周期执行
指令数
缺失次数缺失代价执行
指令数
存储器访存次数执行缺失率缺失代价
指令数
时钟周期时间指令数时钟周期时间
指令数时钟周期时间指令数时钟周期时间
存储器访存次数指令数为平均每条指令的访存次数
5. 对于乱序执行处理器的平均每条指令的停顿周期数:
-=-=存储器停顿周期数指令数总的缺失延迟重叠的缺失延迟
缺失次数总的缺失延迟重叠的缺失延迟
指令数
平均每条指令的缺失次数 5.4 降低Cache缺失代价 5.4.1 多级cache 此为降低缺失代价中最重要的方法。在原cache存储器之间加一级cache,第一级cache可以小到足以与快速CPU运行时钟相匹配,第二级cache可以大到足以捕捉到对主存的大多数访问,从而减少缺失代价。缺失代价重新定义为:
L1L11=+ L平均存储器时间命中时间缺失率缺失代价 其中,第一级cache缺失代价为:
L1L2L22=+ L缺失代价命中时间缺失率缺失代价 局部缺失率:这一级cache的缺失数与这一级cache的访存总数;第一级cache中,等于L1 缺失率;第二级中,等于L2 缺失率。 全局缺失率:这一级cache的缺失数与CPU产生的访存总数;第一级中,等于L1 缺失率;第二级中,等于L1L2 缺失率缺失率。 第二级局部缺失率比较大,因为第一级cache存储数据是最易命中的,所以全局缺失率是一个更有用的度量方法。此时每条指令的缺失次数重新提出:
L2L2L2 =+每条指令的平均存储器停顿周期每条指令缺失次数命中时间每条指令缺失次数缺失代价 首先,可以选择价高相联度来降低第二级缺失率,可降低缺失代价。 其次,多级包含的存储器结构便于检查I/O口与cache之间的一致性,但缺点是,当二级cache发生缺失时,要保证与之对应的一级cache块无效,从而会导致一级cache缺失率略微升高。 当二级cache只比一级cache大一点时,可以采用多级互斥(multilevel exclusion)。一级cache缺失时只会导致两者之间进行对应的块互换,而不是用第二级cache中的块去替换一级cache中的块,防止二级cache空间浪费。
5.4.2 关键字优先和提前启动
给予CPU在某一个时刻只需要块中的一个字,不必要等全部块装入便可启