




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上实 验 报 告实验名称:计算机原理cache性能分析及优化实验学 员: 张英杰 学 号: 2 培养类型: 4+1军人 年 级: 任职培训队 专 业: 计算机科学与技术 所属学院: 计算机学院 指导教员: 唐玉华 职 称: 研究员 实 验 室:校计算机中心四号院机房 实验日期: 2010.12.12010.12.19国防科学技术大学训练部制实验报告填写说明1学员完成人才培养方案和课程标准要所要求的每个实验后,均须提交实验报告。2实验报告封面必须打印,报告内容可以手写或打印。3实验报告内容编排及打印应符合以下要求:(1)采用A4(21cm×29.7cm)白色复印
2、纸,单面黑字打印。上下左右各侧的页边距均为3cm;缺省文档网格:字号为小4号,中文为宋体,英文和阿拉伯数字为Times New Roman,每页30行,每行36字;页脚距边界为2.5cm,页码置于页脚、居中,采用小5号阿拉伯数字从1开始连续编排,封面不编页码。(2)报告正文最多可设四级标题,字体均为黑体,第一级标题字号为4号,其余各级标题为小4号;标题序号第一级用“一、”、“二、”,第二级用“(一)”、“(二)” ,第三级用“1.”、“2.” ,第四级用“(1)”、“(2)” ,分别按序连续编排。(3)正文插图、表格中的文字字号均为5号。一 实验概述(一)实验目的1.掌握Cache的基本概念、
3、基本组织结构2. 掌握影响Cache性能的三个指标3. 了解相联度对Cache的影响4. 了解块大小对Cache的影响5. 了解替换算法对Cache的影响6. 了解Cache失效的分类及组成情况7. 了解一些基本的Cache性能优化方法(选做)(二)实验步骤1. 运行模拟器SimpleScalar2. 在基本配置情况下运行矩阵乘计算程序统计Cache失效次数,并统计三种 不同类型的失效3. 改变Cache容量,统计各种失效的次数,并进行分析4. 改变Cache的相联度,统计各种失效的次数,并进行分析5. 改变Cache块大小,统计各种失效的次数,并进行分析6. 改变Cache的替换策略,统计各
4、种失效次数,并分析7. 对给出的矩阵乘计算程序进行适当改写以优化cache性能。(选做)(三)实验平台Vmware 虚拟机,redhat 9.0 linux 操作系统,SimpleScalar模拟器 。(四)实验课时3课时(五)参考资料 计算机体系结构教材、SimpleScalar模拟器使用指南等二 背景知识(一) Cache基本知识(1) 可以从三个方面改进Cache的性能:降低失效率、减少失效开销、减少Cache命中时间;(2) 按照产生失效的原因不同,可以把Cache失效分为三类:1) 强制性失效(Compulsory miss)当第一次访问一个块时,该块不在Cache中,需从下一级存储
5、器中调入Cache,这就是强制性失效。这种失效也称为冷启动失效或首次访问失效。2) 容量失效(Capacity miss)如果程序执行时所需的块不能全部调入Cache中,则当某些块被替换后,若又重新被访问,就会发生失效。这种失效称为容量失效。3) 冲突失效(Conflict miss)在组相联或直接映象Cache中,若太多的块映象到同一组(块)中,则会出现该组中某个块被别的块替换(即使别的组或块有空闲位置),然后又被重新访问的情况。这就是发生了冲突失效。这种失效也称为碰撞失效(collision)或干扰失效(interference)。(3) 降低Cache失效率的方法:增加Cache块大小、
6、提高相联度、Victim Cache、伪相联Cache、硬件预取技术、由编译器控制的预取和编译器优化。(4) 替换算法 1) 先进先出法(FIFO)2) 随机法:为了均匀使用一组中的各块,这种方法随机地选择被替换的块。3) 最近最少使用法LRU(Least Recently Used):选择近期最少被访问的块作为被替换的块。但由于实现比较困难,现在实际上实现的LRU都只是选择最久没有被访问过的块作为被替换的块。(二) SimpleScalar简介及使用SimpleScalar 是上世纪由威斯康辛大学发布的一款开源模拟器,具备良好的可移植性和可扩展性。SimpleScalar 在学术界具有十分重
7、要的影响力,根据其官方网站统计,2000-2002 年体系结构顶级会议中有一半以上的研究者采用该模拟器来评估他们的研究成果。作为一款时钟精确的模拟器,SimpleScalar 采用执行驱动方式模拟,包含功能模拟和性能模拟。SimpleScalar 的指令集架构采用C 语言宏声明,目前3.0 版本主要支持PISA 指令集和Alpha 指令集。根据模拟的目的不同,SimpleScalar 包含多个模拟器实体,从最简单的Sim-fast 到最为复杂的Sim-outorder,可分别用于功能模拟、Cache 配置策略、流水线、前瞻预测等体系结构问题的全面研究。同时,随着SimpleScalar 一起发
8、布的还有一系列工具链(交叉编译器,汇编器,流水线跟踪器等),他们与SimpleScalar 的交互过程如图4.1所示。Fortran 代码需要先由F2C工具转换为标准C 代码,交叉编译器则将标准C 代码编译为模拟器后端指令集下的二进制代码,交由模拟器执行模拟,通过这些交互最终实现一个完整的模拟平台。图1 SimpleScalar模拟流程1.编写测试程序#include <stdio.h>int main() printf("Hello world!n"); return 0;2.编译程序sslittle-na-sstrix-gcc hello.c含义:用simp
9、lescalar的编译器对hello.c进行编译,以生成能够在模拟器中运行的可执行文件,此条命令将hello.c编译成a.out.这种可执行文件并不是通常意义下的可执行文件,它的可执行性是相对于模拟器程序而已的。(在这里我们猜测生成的可执行文件默认为a.out,a.out是默认生成的。3.模拟运行sim-safe a.out含义:用sim-safe对a.out进行模拟运行。Sim-safe是simplescalar中的一个模拟器,它会在指令的执行时检查指令的齐整性,检查访存指令的合法性等一些安全性检查。SimpleScalar包含多个模拟器,复杂度由最简单的Sim-safe到最复杂的Sim-o
10、utordor,下面简要介绍这些模拟器。(1)Sim-fastSim-fast是执行速度最快,最不关心模拟过程细节信息的子模拟器程序。它采用顺序执行指令的方式,没有指令并行;不支持cache的使用,也不进行指令正确性检查,由程序员保证每条指令的正确性;不支持模拟器本身内嵌的Dlite!调试器(类似于gdb调试器)。为了模拟器的速度优化,在缺省情况下,sim-fast模拟器不进行时间统计,不对指令的有关信息(如指令总数及访存指令数目)进行统计。当然,可以修改模拟器源程序,通过改变其设置,使模拟器更加符合设计人员的需求。(2)Sim-safe在工具集中,是最简单的最友好的模拟器,检查所有的指令错误
11、,不讲究速度。(3)Sim-bpred实现一个分支预测分析器。(4)Sim-cache这个工具实现cache模拟功能,为用户择的cache和快表设置生成cache统计,其中可能包含两级指令和数据cache ,还有一级指令和数据快表,不会生成时间信息。(5)Sim-eio 这个模拟器支持生成外部事件跟踪(EIO traces)和断点文件。外部事件跟踪俘获程序的执行,并且允许被打包到一个单独的文件,以备以后的再次执行。这个模拟器也提供在外部事件跟踪执行中在任意一点做断点。断点文件可被用于在程序运行中启动simplescalar 模拟器。(6)Sim-outorder最完整的工具。支持依序和乱序执行
12、,branch predictor,memory hierarchy,function unit个数等参数设定。这个模拟器追踪潜在的所有流水(pipeline)操作。(7)Sim-profile 也叫functional simulation,但提供较完整的模拟参数,可依照使用者之设定,决定所要模拟之项目,如instruction classes and addresses、text symbols、memory accesses、branches and data segment symbols以方使用者整收集数据材料。三 实验内容(一) SimpleScalar基本运行模拟开启虚拟机软件V
13、mware,点击菜单“Flie->Open”,打开目录” D:Red Hat Linux”下的Red Hat虚拟机。该虚拟机的用户名和密码如下:用户名为:root密码:其中,SimpleScalar模拟器安装在目录/root/SimpleScalar下,test目录为矩阵乘测试程序所在目录点击右键->新建终端,进入目录/root/SimpleScalar/test/目录,命令为:rootlocalhost root# cd /root/simplescalar/test/1. 编译测试程序该目录下有一个1.c文件,该文件为矩阵乘测试程序文件,首先需要使用SimpleScalar的交
14、叉编译器将该文件便以为SimpleScalar模拟器上可以执行的二进制文件,编译命令为:rootlocalhost test# sslittle-na-sstrix-gcc 1.c此时该目录下会多出来一个a.out文件,该文件即为SimpleScalar上可执行二进制文件。2模拟执行我们采用SimpleScalar的sim-cache模拟器对刚才编译出来的可执行文件进行模拟执行,最简单的执行命令为:rootlocalhost test# sim-cache a.out如果执行成功,会出现如下图所示的界面:此时输入三个矩阵A,B,C的大小M、N、K,得到模拟执行结果,如下图所示:3Cache配置
15、在上述的执行中,没有对Cache的结构进行配置,使用了默认的Cache配置。在我们的实验中,需要对Cache 参数进行详细配置。一般来说,Cache的结构参数主要包括以下几个方面:容量、块大小、相联度、替换算法等。在SimpleScalar模拟器中,采用了两级Cache结构,同时数据和指令Cache分开。SimpleScalar的Cache参数配置命令为:<name>:<nsets>:<bsize>:<assoc>:<repl>其中:<name> : Cache的名称,其中: dl1:一级数据Cache dl2:二级数据C
16、ache il1:一级指令Cache il2:二级指令Cache dtlb:数据TLBitlb:指令TLB<nsets> : 组的数目<bsize>:块大小<assoc> -:相联度<repl> -:替换策略此时,Cache容量为:<nsets>*<bsize>*<assoc>替换策略主要有以下几种:l :LRU,最近最少使用f : FIFO,先进先出r : RANDOM,随机策略例如:-cache:dl1 dl1:1024:32:2:l 表示对一级数据cache进行配置,1024表示有1024组,Cache块
17、大小为32个byte,每个组有2个Cache块,即相联度为2,替换策略为LRU。在此配置下,一级数据Cache的容量为1024*32*2=64K byte。例如对上述矩阵乘测试程序,使用该配置进行模拟执行的命令为:rootlocalhost test# sim-cache -cache:dl1 dl1:1024:32:2:l a.out(二) SimpleScalar模拟统计信息详解采用上述命令执行后,得到如下所示的信息,其详解如下:执行模拟的命令rootlocalhost test# sim-cache -cache:dl1 dl1:1024:32:2:l a.outsim-cache: S
18、impleScalar/PISA Tool Set version 3.0 of August, 2003.Copyright (c) 1994-2003 by Todd M. Austin, Ph.D. and SimpleScalar, LLC.All Rights Reserved. This version of SimpleScalar is licensed for academicnon-commercial use. No portion of this work may be used by any commercial版权声明等,不用关心entity, or for any
19、 commercial purpose, without the prior written permissionof SimpleScalar, LLC (info). sim: command line: sim-cache -cache:dl1 dl1:1024:32:2:l a.out sim: simulation started Sun Nov 28 22:49:41 2010, options follow: sim-cache: This simulator implements a functional cache simulator. Cachestatistics are
20、 generated for a user-selected cache and TLB configuration,which may include up to two levels of instruction and data cache (with anylevels unified), and one level of instruction and data TLBs. No timinginformation is generated.sim-cache的运行命令参数帮助说明,有兴趣可以了解。 # -config # load configuration from a file
21、# -dumpconfig # dump configuration to a file# -h false # print help message# -v false # verbose operation# -d false # enable debug message# -i false # start in Dlite debugger-seed 1 # random number generator seed (0 for timer seed)# -q false # initialize and terminate immediately# -chkpt <null>
22、; # restore EIO trace execution from <fname># -redir:sim <null> # redirect simulator output to file (non-interactive only)# -redir:prog <null> # redirect simulated program output to file-nice 0 # simulator scheduling priority-max:inst 0 # maximum number of inst's to execute-cac
23、he:dl1 dl1:1024:32:2:l # l1 data cache config, i.e., <config>|none-cache:dl2 ul2:1024:64:4:l # l2 data cache config, i.e., <config>|none-cache:il1 il1:256:32:1:l # l1 inst cache config, i.e., <config>|dl1|dl2|none-cache:il2 dl2 # l2 instruction cache config, i.e., <config>|dl
24、2|none-tlb:itlb itlb:16:4096:4:l # instruction TLB config, i.e., <config>|none-tlb:dtlb dtlb:32:4096:4:l # data TLB config, i.e., <config>|none-flush false # flush caches on system calls-cache:icompress false # convert 64-bit inst addresses to 32-bit inst equivalents# -pcstat <null>
25、; # profile stat(s) against text addr's (mult uses ok) The cache config parameter <config> has the following format: <name>:<nsets>:<bsize>:<assoc>:<repl> <name> - name of the cache being definedSim-cache的cache参数配置帮助说明,建议了解。 <nsets> - number of set
26、s in the cache <bsize> - block size of the cache <assoc> - associativity of the cache <repl> - block replacement strategy, 'l'-LRU, 'f'-FIFO, 'r'-random Examples: -cache:dl1 dl1:4096:32:1:l -dtlb dtlb:128:4096:32:r Cache levels can be unified by pointing a l
27、evel of the instruction cache hierarchy at the data cache hiearchy using the "dl1" and "dl2" cache configuration arguments. Most sensible combinations are supported, e.g., A unified l2 cache (il2 is pointed at dl2): -cache:il1 il1:128:64:1:l -cache:il2 dl2 -cache:dl1 dl1:256:32:1
28、:l -cache:dl2 ul2:1024:64:2:l Or, a fully unified cache hierarchy (il1 pointed at dl1): -cache:il1 dl1此处正式开始模拟 -cache:dl1 ul1:256:32:1:l -cache:dl2 ul2:1024:64:2:l sim: * starting functional simulation w/ caches *Please input the value of M, N, K (which must be int numbers):M=2N=3模拟执行矩阵乘操作的输出K=4Matr
29、ix A: 2*3 2 2 2 2 2 2 Matrix B: 3*4 2 2 2 2 2 2 2 2 2 2 2 2 以下均为模拟统计信息输出Matrix C: 3*4 12 12 12 12 12 12 12 12 sim: * simulation statistics *模拟总体信息统计sim_num_insn # total number of instructions executed 总模拟指令条数sim_num_refs 34213 # total number of loads and stores executed 所有的访存指令条数sim_elapsed_time 200
30、 # total simulation time in seconds 总的模拟时钟周期数sim_inst_rate 528.3150 # simulation speed (in insts/sec) 模拟速度il1.accesses # total number of accesses 一级指令cache的访问数目il1.hits 90939 # total number of hits 一级指令cache的命中数目il1.misses 14724 # total number of misses 一级指令cache的实效数目一级指令cache的性能统计信息il1.replacements
31、 14468 # total number of replacements 一级指令cache上发生替换的数目il1.writebacks 0 # total number of writebacks 一级指令cache上发生写回的数目il1.invalidations 0 # total number of invalidations 一级指令cache上访存无效的数目il1.miss_rate 0.1393 # miss rate (i.e., misses/ref) 一级指令cache上的失效率il1.repl_rate 0.1369 # replacement rate (i.e.,
32、repls/ref) 一级指令cache上的替换概率il1.wb_rate 0.0000 # writeback rate (i.e., wrbks/ref) 一级指令cache上的写回概率il1.inv_rate 0.0000 # invalidation rate (i.e., invs/ref) 一级指令cache上的无效概率dl1.accesses 34648 # total number of accesses 一级数据cache上的总访问数目dl1.hits 33972 # total number of hits 一级数据cache上的命中次数dl1.misses 676 # t
33、otal number of misses 一级数据cache上的实效次数一级数据cache的性能统计信息,重点关注dl1.replacements 1 # total number of replacements 一级数据cache上发生替换的次数dl1.writebacks 0 # total number of writebacks 一级数据cache上发生写回的次数dl1.invalidations 0 # total number of invalidations 一级数据cache上无效访问的次数dl1.miss_rate 0.0195 # miss rate (i.e., mis
34、ses/ref) 一级数据cache上的失效率dl1.repl_rate 0.0000 # replacement rate (i.e., repls/ref) 一级数据cache上发生替换的概率dl1.wb_rate 0.0000 # writeback rate (i.e., wrbks/ref) 一级数据cache上发生写回的概率dl1.inv_rate 0.0000 # invalidation rate (i.e., invs/ref) 一级数据cache上发生无效访问的次数ul2.accesses 15400 # total number of accesses 联合二级cache
35、上总的访问次数二级cache的性能统计信息ul2.hits 14280 # total number of hits 联合二级cache上命中的次数ul2.misses 1120 # total number of misses 联合二级cache上失效的次数ul2.replacements 0 # total number of replacements 联合二级cache上发生替换的次数ul2.writebacks 0 # total number of writebacks 联合二级cache上发生写回的系数ul2.invalidations 0 # total number of in
36、validations 联合二级cache上无效访问的次数ul2.miss_rate 0.0727 # miss rate (i.e., misses/ref) 联合二级cache上的失效率ul2.repl_rate 0.0000 # replacement rate (i.e., repls/ref) 联合二级cache上发生替换的概率ul2.wb_rate 0.0000 # writeback rate (i.e., wrbks/ref) 联合二级cache上发生写回的概率ul2.inv_rate 0.0000 # invalidation rate (i.e., invs/ref) 发生
37、无效访问的概率itlb.accesses # total number of accesses 指令TLB上访问次数itlb.hits # total number of hits 指令TLB上命中次数指令TLB的性能统计信息itlb.misses 23 # total number of misses 指令TLB上失效的次数itlb.replacements 0 # total number of replacements 指令TLB上发生替换的次数itlb.writebacks 0 # total number of writebacks 指令TLB上发生写回的次数itlb.invalid
38、ations 0 # total number of invalidations 指令TLB上发生无效访问的次数itlb.miss_rate 0.0002 # miss rate (i.e., misses/ref) 指令TLB上的失效率itlb.repl_rate 0.0000 # replacement rate (i.e., repls/ref) 指令TLB上的替换概率itlb.wb_rate 0.0000 # writeback rate (i.e., wrbks/ref) 指令TLB上写回的概率itlb.inv_rate 0.0000 # invalidation rate (i.e
39、., invs/ref) 指令TLB上无效访问的概率dtlb.accesses 34648 # total number of accesses 指令TLB上总的访问次数dtlb.hits 34636 # total number of hits 数据TLB上总的访问次数数据TLB的性能统计信息dtlb.misses 12 # total number of misses 数据TLB上总的失效次数dtlb.replacements 0 # total number of replacements 数据TLB上总的替换次数dtlb.writebacks 0 # total number of w
40、ritebacks 数据TLB上发生写回的次数dtlb.invalidations 0 # total number of invalidations 数据TLB上发生无效访问的次数dtlb.miss_rate 0.0003 # miss rate (i.e., misses/ref) 数据TLB上失效率dtlb.repl_rate 0.0000 # replacement rate (i.e., repls/ref) 数据TLB上发生替换的概率dtlb.wb_rate 0.0000 # writeback rate (i.e., wrbks/ref) 数据TLB上发生写回的概率dtlb.in
41、v_rate 0.0000 # invalidation rate (i.e., invs/ref) 数据TLB上发生无效访问的概率ld_text_base 0x # program text (code) segment base ld_text_size 96544 # program text (code) size in bytesld_data_base 0x # program initialized data segment baseld_data_size 12288 # program init'ed .data' and uninit'ed .bss
42、' size in bytesld_stack_base 0x7fffc000 # program stack segment base (highest address in stack)ld_stack_size 16384 # program initial stack sizeld_prog_entry 0x # program entry point (initial PC)其他内存和基地址等信息统计ld_environ_base 0x7fff8000 # program environment base address addressld_target_big_endian
43、 0 # target executable endian-ness, non-zero if big endianmem.page_count 36 # total number of pages allocatedmem.page_mem 144k # total size of memory pages allocatedmem.ptab_misses 37 # total first level page table missesmem.ptab_accesses # total page table accessesmem.ptab_miss_rate 0.0000 # first
44、level page table miss rate rootlocalhost test#(三) Cache容量对性能的影响1操作方法与实验步骤(1)改变SimpleScalar模拟器的一级数据cache dl1的容量配置,在SimpleScalar的配置过程中,固定cache块大小、相联度、替换策略等参数,通过改变组数来改变Cache的容量大小,执行程序,具体运行配置参数如下表1所示。(2)输入矩阵规模:120*120;(3)观察运行后失效率的变化情况。2.实验结果 各个配置条件下,失效率见表1。表1 Cache容量对性能影响3.结果分析图3 Cache容量对失效率影响观察Cache容量对
45、性能的影响,将测得的失效率绘制为曲线,得到如上图所示的曲线图。从图中可以看出,随着Cache的容量不断增加,程序的失效率不断降低。由此可见,Cache的容量对于Cache性能有着重要影响。一般来说,容量越大,Cache性能越好,发生失效的概率就越低。但对于某一个应用来说,容量达到一定程度后,性能改善程度会达到峰值。但在容量达到128K byte后,失效率就不再降低,稳定在一个固定范围内,说明此时容量已经不是Cache性能的瓶颈了,增大Cache容量对性能提升已无促进作用。(四) Cache相联度对性能的影响 1操作方法与实验步骤(1)改变SimpleScalar模拟器的一级数据cache dl
46、1的容量配置,在SimpleScalar的配置过程中,固定容量大小、cache块大小、替换策略等参数,改变相联度,执行程序,具体运行配置参数如下表2所示。(2)输入矩阵规模:120*120;(3)观察运行后失效率的变化情况。2.实验结果 各个配置条件下,失效率见表2。表2 Cache相联度对性能影响3.结果分析图4 Cache相联度对失效率影响在组相联Cache中,相联度对Cache性能也有着重要影响,因为相联度直接决定Cache中发生冲突失效的概率。相联度越高,块冲突概率就越低,因而Cache的失效率就越低。块冲突是指一个主存块要进入已被占用的Cache块位置。显然,全相联(相联度为n)的失
47、效率最低,直接映像(相联度为1)失效率最高。虽然从降低失效率的角度来看,相联度越大越好,但从我们的实验将可以发现,增大相联度并一定使Cache的性能提高,反而会使系统复杂性增加,这点将从我们的实验结果中得到具体反映。由观察得,具体为在16K byte容量下,将相联度从1变化到256。由于容量一定,组数也从512变化到2。在不同Cache相联度的配置下,其失效率变出,如表2所示,将这些失效率绘制为曲线,得到图4所示的曲线。根据这些实验结果我们可以发现,在相联度4以下,失效率会随着相联度的增加而降低。而相联度超过4以后,相联度的增加并不会使失效率继续降低,反而稳定在一个固定水平上。从上述实验结果可以发现,相联度的增加在一定的范围内可以促进Cache性能的改善,但这个范围非常有限,仅在1路、2路或4路组相联上起作用。(五) Cache块大小对性能的影响1操作方法与实验步骤(1)改变SimpleScalar模拟器的一级数据cache dl1的容量配置,在SimpleScalar的配置过程中,相
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年中国互联网防水建筑材料行业营销模式及发展竞争分析预测研究报告
- 2025年中国智能道路事件检测系统市场调查研究报告
- 2025年中国旋转密封市场调查研究报告
- 2025年中国斜面控制台市场调查研究报告
- 2025-2030年中国主题公园行业发展格局及投资风险预测研究报告
- 2025-2030年中国丁辛醇产业市场运行态势及投资风险研究预测研究报告
- 肇庆市实验中学高中历史三:第课理性之光高效课堂教学设计
- 新疆生产建设兵团兴新职业技术学院《植物资源学》2023-2024学年第二学期期末试卷
- 新疆理工学院《电气工程及其自动化专业前沿》2023-2024学年第二学期期末试卷
- 新疆乌鲁木齐仟叶学校2025年中考英语试题山东卷冲刺训练解析含答案
- 2025年1月四川高考改革适应性演练测试物理试题(八省联考四川物理卷)(原卷版)
- DB33T 1214-2020 建筑装饰装修工程施工质量验收检查用表标准
- 2025年沈阳铁路局集团招聘笔试参考题库含答案解析
- 大学生实习手册
- 液体配制安全
- 《电动航空器电推进系统技术规范》
- 2024河北高考地理真题卷解析 课件
- 城市道路日常养护作业服务投标文件(技术方案)
- 《互换性复习》课件
- 《光伏系统设计培训》课件
- 2024年第三届职业技能竞赛(井下作业工赛项)理论考试题库(含答案)
评论
0/150
提交评论