版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
17/22乱序执行的硬件支持机制第一部分乱序执行的潜在瓶颈 2第二部分存储转发技术原理 4第三部分负载-存储队列的实现 6第四部分存储器障碍指令的作用 8第五部分记忆顺序模型的引入 10第六部分分支预测器的乱序支持 12第七部分硬件暂存器的应用 14第八部分乱序执行的性能优化策略 17
第一部分乱序执行的潜在瓶颈关键词关键要点主题名称:数据依赖冲突
1.乱序执行中,指令可能被重排序,当存在数据依赖关系时,可能出现冲突,导致错误执行结果。
2.处理数据依赖冲突需要额外的硬件机制,例如数据转发表(ROB)和负载/存储队列(LSQ),以存储和跟踪指令之间的依赖关系。
3.数据依赖冲突的解决策略影响执行效率,例如回滚机制和推测性执行。
主题名称:资源冲突
乱序执行的潜在瓶颈
乱序执行通过打破指令执行的程序顺序,从而提高了处理器性能。然而,此优化技术也引入了一些潜在瓶颈,包括:
指令相关性:乱序执行允许指令乱序执行,但某些指令需要等待其他指令的结果才能继续执行。这种依赖性被称为指令相关性,它可以导致指令在乱序执行时遇到执行障碍。为了解决此问题,处理器采用了以下机制:
*数据转发:允许已执行指令的结果直接转发给依赖性指令,而无需存储在寄存器中。
*寄存器重命名:为每个指令分配唯一的寄存器标识符,从而避免指令同时访问同一物理寄存器。
*预测执行:猜测未来指令的执行结果,并提前执行它们,以减少相关性开销。
分支预测和错误预测:乱序执行依赖于分支预测器来预测分支指令的方向。错误预测会导致指令乱序执行,从而使处理器性能降低。为了缓解此瓶颈,处理器采用了以下机制:
*分支预测表:存储最近的分支方向,以提高预测精度。
*循环预测:识别常见的循环模式,并对其进行准确预测。
*TAGE(转移地址猜测器引擎):使用历史转移信息来提高分支预测精度。
资源冲突:乱序执行会同时执行多条指令,这可能导致对共享资源的竞争,例如指令缓冲区、加载/存储单元和寄存器文件。资源冲突会降低处理器性能,因为指令必须等待资源可用才能执行。为了解决此问题,处理器采用了以下机制:
*指令缓冲器分配:使用循环分配器或竞争器来公平地分配指令缓冲器条目。
*重排序缓冲器(ROB):缓冲乱序执行的指令,直到所有依赖项都满足,从而避免资源冲突。
*寄存器文件分区:将寄存器文件划分为不同的区域,为不同指令组提供隔离的资源。
存储一致性:乱序执行可能违反处理器存储一致性模型,这会导致多处理器系统中的数据错误。为了确保存储一致性,处理器采用了以下机制:
*内存屏障指令:强制处理器顺序执行特定存储操作,以确保数据可见性和一致性。
*Fence操作:在多处理器系统中强制处理器同步其缓存,以确保一致的存储状态。
*弱一致性模型:一些架构放松了存储一致性要求,以提高乱序执行的性能。
复杂性:乱序执行及其相关的硬件支持机制增加了处理器的复杂性。这可能导致设计困难、调试问题和功耗增加。为了减轻复杂性,处理器设计师采用以下策略:
*模块化设计:将乱序执行机制划分为模块化组件,以便于设计和验证。
*可配置参数:允许处理器配置其乱序执行行为,以优化特定应用程序的性能。
*仿真和建模:使用仿真和建模工具来验证乱序执行机制,并优化其性能。
总之,乱序执行的潜在瓶颈包括指令相关性、分支预测错误、资源冲突、存储一致性和复杂性。为了缓解这些瓶颈,处理器采用了各种硬件支持机制,这些机制确保乱序执行的正确性和性能。第二部分存储转发技术原理存储转发技术原理
存储转发技术是一种硬件技术,用于解决乱序执行中数据依赖性问题。其主要原理在于在处理器寄存器和高速缓存之间引入一个称为存储转发缓冲区(SFRB)的额外存储结构。
当一个乱序处理器检测到一个指令依赖于之前的指令结果时,它会将该指令的源操作数转发到SFRB。SFRB作为一个暂存缓冲区,用于存储乱序执行过程中未决定的数据。
当依赖的指令完成执行并产生结果时,处理器将结果写入SFRB。同时,处理器会持续检查SFRB中是否包含其他指令所需的源操作数。如果存在,则处理器可以立即获取这些操作数,无需等待指令按照序执行。
存储转发技术通过以下步骤实现乱序执行:
1.指令发出
乱序处理器发出指令,无需按照程序顺序。当检测到数据依赖性时,处理器将依赖操作数转发到SFRB。
2.存储转发
依赖指令产生的结果写入SFRB。
3.结果检查
处理器不断检查SFRB中是否存在其他指令所需的操作数。
4.操作数获取
如果SFRB中存在所需操作数,处理器立即获取这些操作数,无需等待指令序执行。
5.指令完成
处理器按照序执行指令,并将结果写入寄存器。
存储转发技术的主要优点是:
*提高性能:通过允许乱序执行,可以减少数据依赖性对性能的影响,从而提高指令吞吐量。
*降低功耗:乱序执行可以减少指令等待时间,从而降低处理器功耗。
*增强并行性:乱序执行允许同时执行多个指令,从而提高并行性。
然而,存储转发技术也有一些缺点:
*复杂性:SFRB的实现增加了处理器的复杂性和设计难度。
*功耗:SFRB的维护和读取操作会增加处理器功耗。
*限制:存储转发技术只能解决某些类型的数据依赖性,例如寄存器依赖性。对于内存依赖性,可能需要其他技术,例如load-store队列。第三部分负载-存储队列的实现负载-存储队列(Load-StoreQueue,LSQ)的实现
目的:
LSQ旨在解决乱序执行中由于负载(load)和存储(store)操作而产生的数据依赖问题。其目标是为乱序执行器提供一个有用的指令窗口,以便在维持程序顺序的情况下,提高指令级并行度(ILP)。
工作原理:
LSQ是一个FIFO队列,它维护了一个等待执行的负载和存储指令的循环缓冲区。当乱序执行单元遇到一个负载指令时,它会将其插入到LSQ中,同时跟踪其依赖关系。同样,当乱序执行单元遇到一个存储指令时,它也会将其插入到LSQ中,并将其与先前发出的存储指令进行比较,以检测潜在的数据冲突。
地址歧义检测:
LSQ的主要功能之一是检测地址歧义。当两个或两个以上存储指令具有相同的地址时,就会发生地址歧义。在这种情况下,LSQ会暂停执行这些存储指令,直到所有存储指令都准备好执行。这可确保程序的顺序语义。
存储转发:
存储转发是一种优化技术,它允许存储指令直接将数据写入LSQ,供后续负载指令使用。这消除了对内存访问的需要,从而提高了性能。LSQ通过维护一个存储缓冲区来实现存储转发,其中包含已完成存储指令的结果。
恢复机制:
在乱序执行中,可能发生分支错误预测或数据冲突等异常情况。LSQ包含恢复机制,以确保指令的正确性和顺序执行。当发生异常情况时,LSQ会回滚所有未完成的指令,并重新执行正确的指令序列。
队列管理:
LSQ的规模通常是有限的,因此需要有效地管理队列。LSQ使用各种技术来优化队列管理,例如:
*先进先出(FIFO)调度:指令按FIFO顺序执行,除非遇到数据依赖关系。
*优先级队列:指令可以根据其优先级(例如,负载比存储优先级更高)进行优先排序。
*队列合并:多个LSQ可以合并为一个更大的队列,以提高容量和吞吐量。
实现考虑:
LSQ的实现需要考虑以下方面:
*队列大小:队列大小限制了可以执行的指令窗口的大小,从而影响并行度。
*地址歧义检测的开销:检测地址歧义可能会增加执行延迟,因此需要权衡开销与性能提升。
*存储转发的支持:存储转发优化需要额外的存储缓冲区,可能会增加硬件复杂性。
*恢复机制的开销:恢复机制的开销应该最小化,以免对性能产生重大影响。
总结:
负载-存储队列是乱序执行中一种至关重要的硬件支持机制。它解决了数据依赖问题,提高了指令级并行度,同时确保了程序顺序语义的维持。高效的LSQ实现对于充分利用乱序执行的优势至关重要。第四部分存储器障碍指令的作用关键词关键要点存储器障碍指令的作用:
主题名称:内存一致性
1.保证多处理器系统中,处理器对共享内存的访问顺序与程序执行顺序一致。
2.避免处理器重排序指令执行,确保对共享内存的访问符合程序语义。
3.通过在程序中插入存储器障碍指令,强制处理器按指定顺序执行指令。
主题名称:处理器重排序
存储器障碍指令的作用
存储器障碍指令是一种特殊的指令,用于在乱序执行环境中控制存储器访问的顺序。当多个处理器内核共享同一块存储器时,乱序执行可能会导致存储器访问顺序与程序代码中指定的顺序不同。这可能会导致数据不一致,因为一个内核可能在另一个内核修改数据之前读取数据。
存储器障碍指令可防止这种数据不一致,方法是强制内核在执行存储器障碍指令之后才执行后续指令。这确保了在执行存储器障碍指令之前执行的所有存储器访问都已完成,并且在执行存储器障碍指令之后执行的所有存储器访问都会按程序代码中指定的顺序执行。
存储器障碍指令通常用于以下情况:
*防止数据竞争:当多个内核同时访问同一块共享内存时,存储器障碍指令可防止数据竞争,因为它们强制内核按顺序访问内存。
*维持程序状态:存储器障碍指令可用于维护程序状态,因为它们强制内核按顺序执行指令。这确保了程序的状态在所有内核上保持一致。
*实现同步:存储器障碍指令可用于实现内核之间的同步,因为它们强制内核在执行后续指令之前等待其他内核完成对共享内存的访问。
存储器障碍指令的类型分为两类:
*加载屏障:加载屏障强制内核在执行加载指令之前等待所有先前的存储指令完成。
*存储屏障:存储屏障强制内核在执行存储指令之后等待所有先前的加载和存储指令完成。
加载屏障的示例:
`lfence`指令是一个加载屏障,它强制内核在执行任何后续加载指令之前等待所有先前的存储指令完成。
存储屏障的示例:
`sfence`指令是一个存储屏障,它强制内核在执行任何后续存储指令之后等待所有先前的加载和存储指令完成。
加载-存储屏障的示例:
`mfence`指令是一个加载-存储屏障,它强制内核在执行任何后续加载或存储指令之前等待所有先前的加载和存储指令完成。
存储器障碍指令对于确保乱序执行环境中的数据一致性和程序正确性至关重要。通过强制内核按顺序执行存储器访问,存储器障碍指令有助于防止数据竞争、维护程序状态和实现内核之间的同步。第五部分记忆顺序模型的引入记忆顺序模型的引入
为了解决乱序执行带来的内存可见性问题,引入了记忆顺序模型(MemoryOrderingModel,MOM)。MOM定义了一组规则,用来确定不同处理器内核对内存中数据的读取和写入操作的顺序。
MOM的基本原理
MOM的基本原理是通过定义一系列约束条件来保证不同内核观察到的内存状态是一致的。这些约束条件包括:
*程序顺序约束(PSO):一个处理器内核执行的指令必须按照程序中指定的顺序进行,即先执行先前的指令,再执行后继指令。
*加载-存储约束(LSO):一个处理器内核在加载数据之前必须先执行所有前面的存储操作。
*存储-存储约束(SSO):一个处理器内核在执行一个存储操作之前必须先执行所有前面的存储操作。
*加载-加载约束(LLO):两个处理器内核对同一个内存地址进行加载操作时,必须按照程序顺序来执行。
MOM的实现
MOM通过硬件机制来实现上述约束条件。这些机制包括:
*存储缓冲区:每个处理器内核都有一个存储缓冲区,用来存储要写入内存的数据。只有当存储缓冲区已满或处理器内核执行了一条storefence指令时,数据才会被写回内存。
*加载缓冲区:每个处理器内核都有一个加载缓冲区,用来存储从内存中加载的数据。只有当加载缓冲区已满或处理器内核执行了一条loadfence指令时,数据才会被读取到寄存器中。
*内存栅栏指令:处理器内核可以执行memoryfence指令,用来强制对存储缓冲区和加载缓冲区进行刷新。这确保了在执行内存栅栏指令之前的所有存储操作都被写回内存,并且在执行内存栅栏指令之后的所有加载操作都是从内存中加载的。
MOM的类型
不同的计算机体系结构对MOM的实现方式可能不同。常见的MOM类型包括:
*全有序MOM:最严格的MOM类型,它强制所有内存操作按照顺序执行。
*局部有序MOM:允许处理器内核对某些操作进行乱序执行,但必须保证程序中的顺序依赖关系。
*弱有序MOM:允许处理器内核对所有操作进行乱序执行,但必须保证程序中的数据依赖关系。
MOM的选择
MOM的选择取决于应用程序的特性和性能要求。对于需要严格保证内存可见性的应用程序,可以使用全有序MOM。对于容忍一定程度的乱序执行的应用程序,可以使用局部有序MOM或弱有序MOM。第六部分分支预测器的乱序支持关键词关键要点分支预测器的乱序支持
主题名称:分支目标预测
1.分支目标预测器(BTB)存储最近执行的分支指令及其目标地址。
2.当处理器遇到分支指令时,它查询BTB以预测目标地址并开始取指。
3.如果预测正确,处理器可以无停顿地继续执行,否则需要执行错误预测的恢复处理。
主题名称:预测错误恢复
分支预测器的乱序支持
乱序执行处理器采用分支预测器来预测指令流中分支的执行方向,从而实现指令乱序执行。处理器内部通常包含多个分支预测器,每个预测器负责不同的预测类型或分支目标。
1.静态分支预测器
*顺序预测(SP):始终预测分支将向后跳转,即取下一条指令。
*不跳转预测(NT):始终预测分支将不跳转,即继续执行当前指令流。
2.动态分支预测器
*两级适应性预测器(2-leveladaptivepredictor):包含多个历史记录表(HR),每个HR跟踪最近分支的历史执行情况。当一个分支被取用时,预测器将根据HR中的信息选择一个预测值。
*局部历史表(LHT):记录最近的分支执行历史,并根据历史记录表中的信息预测分支方向。
*全局历史表(GHT):记录所有分支的执行历史,并根据历史记录表中的信息预测分支方向。
3.预测器选择机制
为了提高预测准确率,处理器通常采用预测器选择机制(PSS)来选择最适合当前分支的预测器。PSS根据以下因素做出选择:
*分支的历史执行记录
*分支的类型(条件分支、间接分支)
*分支所在的代码区域
4.乱序支持机制
为了支持乱序执行,处理器中通常包含以下乱序支持机制:
*重排序缓冲区(ROB):保存乱序执行的指令,并按程序顺序执行它们。
*结果选择器:从ROB中选择已完成执行的指令,并将其结果转发给后续指令。
*回退机制:当分支预测失败时,处理器会回退到分支指令,并重新执行后续指令。
5.乱序执行的优势
*提高指令级并行性(ILP)
*消除分支停顿
*提高处理器吞吐量
6.乱序执行的挑战
*预测器准确率问题
*回退和重排序机制的开销
*寄存器重命名管理
*数据依赖管理第七部分硬件暂存器的应用关键词关键要点【硬件暂存器在乱序执行中的应用】:
1.硬件暂存器充当乱序执行流水线中指令的缓冲区,提供临时存储,避免等待源操作数。
2.暂存器可减少因数据依赖性而造成的流水线停滞,提高执行效率。
3.硬件暂存器通常包含多个条目,以支持多条指令同时乱序执行。
【物理寄存器映射】:
硬件暂存器的应用
乱序执行中,硬件暂存器的使用起到了至关重要的作用。它提供了暂存空间,用于存储等待依赖关系解决的指令。
1.寄存器重命名
寄存器重命名是乱序执行中的一种关键技术。它为每个指令分配一个唯一的物理寄存器。这种技术消除了寄存器冲突,允许指令在不等待前一条指令的寄存器可用时就开始执行。
2.重排序缓冲区(ROB)
ROB是一个循环缓冲区,用于跟踪乱序执行指令的状态。每个指令在进入执行管道之前都会分配一个ROB条目。ROB条目包含以下信息:
*指令的原始顺序
*指令的当前状态(例如,正在执行、等待依赖关系解决)
*指令结果的目的地寄存器
当指令完成执行时,其结果将存储在ROB中,等待所有依赖关系解决。
3.分配/重命名表(RAT)
RAT是一个映射表,将逻辑寄存器映射到物理寄存器。当指令进入执行管道时,它会查找RAT以获取可用的物理寄存器。如果物理寄存器不可用,指令将被放入ROB中,等待物理寄存器可用。
4.旁路逻辑
旁路逻辑是一种硬件电路,它允许指令直接从ROB或其他执行单元中获取结果,而无需等待寄存器可用。这进一步提高了性能,因为指令可以立即继续执行,而无需等待前一条指令的结果写入寄存器。
5.其他功能
硬件暂存器还有以下其他功能:
*存储条件码,用于分支预测和异常处理。
*存储预测结果,例如分支预测和数据预取。
*存储指令的执行历史,用于调试和故障分析。
优点
使用硬件暂存器进行乱序执行提供了以下优点:
*提高指令级并行性,从而提高性能。
*消除寄存器冲突,允许更灵活的指令调度。
*提高分支预测准确性,从而进一步提高性能。
*简化设计,因为执行管道不再需要等待前一条指令的结果。
缺点
使用硬件暂存器进行乱序执行也存在以下缺点:
*增加硬件成本和复杂性。
*可能导致执行结果错误,如果依赖关系解决不正确。
*可能会降低存储器性能,因为指令可能以非连续的方式访问存储器。
结论
硬件暂存器是乱序执行的关键组成部分。它们提供了暂存空间,用于存储等待依赖关系解决的指令。寄存器重命名、ROB、RAT、旁路逻辑和其他功能的结合共同实现了乱序执行,从而提高了现代处理器中指令级并行性和性能。第八部分乱序执行的性能优化策略关键词关键要点【乱序执行的性能优化策略】:
1.微架构支持:提供不阻塞的存储器访问和预测分支执行,以减少执行延迟。
2.编译器优化:利用分支预测和循环展开来预测跳转并增加指令并行性。
【数据预取】:
乱序执行的性能优化策略
指令重排
随着乱序执行的引入,指令能够在乱序的情况下执行,这需要对指令流进行重排。指令重排的策略主要有以下几种:
*RISC架构指令重排:RISC架构的指令都是单周期执行的,因此指令重排只需要考虑指令间的依赖关系。
*CISC架构指令重排:CISC架构的指令执行时间不一致,因此指令重排需要同时考虑指令间的依赖关系和执行时间。
*动态指令重排:动态指令重排是在指令执行过程中动态地对指令进行重排,以适应不同的执行环境。
寄存器重命名
乱序执行中,指令不再按程序顺序执行,因此需要使用寄存器重命名技术来避免指令间的数据相关性问题。寄存器重命名技术的原理是为每个寄存器分配一个物理寄存器,在指令重排时使用物理寄存器来表示逻辑寄存器。
旁路网络
旁路网络允许指令直接从上一个指令的结果中获取数据,而不需要经过寄存器文件。旁路网络可以提高乱序执行的效率,减少指令间的依赖关系。
预测执行
预测执行技术可以提前预测指令的执行结果,并提前加载指令所需的数据。预测执行可以提高乱序执行的并行度,减少指令间的等待时间。
推测执行
推测执行技术允许指令在还没有得到所有输入数据的情况下进行执行。推测执行可以提高乱序执行的性能,但需要处理错误推测的情况。
分支预测
分支预测技术可以预测分支指令的执行方向,并提前加载分支指令所需要的代码和数据。分支预测可以提高乱序执行的效率,减少分支指令的等待时间。
内存乱序
内存乱序技术允许指令在未等待之前指令的内存访问结果的情况下进行执行。内存乱序可以提高乱序执行的并行度,减少指令间的等待时间。
性能监控和调节
性能监控和调节机制可以监控乱序执行的性能,并根据监控结果进行调节。性能监控和调节可以确保乱序执行的性能达到最优。
乱序执行的性能优化策略总结
乱序执行的性能优化策略包括指令重排、寄存器重命名、旁路网络、预测执行、推测执行、分支预测、内存乱序、性能监控和调节等。这些策略的目标都是提高乱序执行的并行度,减少指令间的等待时间,从而提高乱序执行的整体性能。关键词关键要点存储转发技术原理
主题名称:存储转发基础
关键要点:
1.存储转发是一种数据处理技术,将接收到的数据存储在缓冲区中,再将其转发到目的地址。
2.它允许数据在传输前得到排序,从而避免乱序执行问题。
3.在存储转发机制下,发送端在发送数据前会先将数据存储在缓冲区中,接收端在接收数据后会将数据存储在缓冲区中,直到数据被正确排序后才会被读取。
主题名称:硬件支持
关键要点:
1.处理器提供缓冲区,用于存储待排序的数据。
2.缓冲区控制器负责管理缓冲区,并根据特定算法对数据进行排序。
3.乱序执行引擎处理排序后的数据,确保指令按正确顺序执行。关键词关键要点负载-存储队列的实现:
关键要点:
1.队列的实现:
-负载-存储队列通常采用FIFO(先进先出)队列的实现方式。
-队列中存储等待执行的负载和存储指令,并按顺序执行它们。
-队列的大小有限,以防止指令执行过慢而导致性能下降。
2.存储缓冲区的管理:
-当处理器执行存储指令时,存储缓冲区会暂时存储将要写入内存的数据。
-存储缓冲区的作用是减少处理器与内存之间的访存延迟,提高指令执行速度。
-存储缓冲区的大小也有限,以避免占用过多的片上资源。
3.地址翻译和一致性:
-在乱序执行的体系结构中,адрес翻译和一致性变得更加复杂。
-由于指令乱序执行,处理器必须跟踪每个指令的依赖关系,以确保正确的地址翻译和内存一致性。
-现代处理器采用各种技术,如存储屏障和顺序一致性模型,来保证内存一致性。
趋势和前沿:
近年来,负载-存储队列的设计和实现发
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河北省唐山市古冶区2025-2026学年度第二学期八年级学业水平终期评估英语试卷(含答案)
- 2026生物医用镁合金表面改性技术及体内降解调控报告
- 2026零糖饮料代糖选择对消费者复购率影响实证分析报告
- 2026中国运动护具ODM厂商核心竞争力与客户黏性提升策略
- 2026中国医疗器械精密衬套产品标准体系构建与认证路径报告
- 2026年工业统计模拟考试题及答案
- 2026二上数学全册核心素养说课课件
- 高职供热通风与空调技术专业二年级《热水工程分体水控机集成方案设计》实训教案
- 小学一年级数学《10的加减法》单元整体教学设计(第3课时)
- 人教版四年级下册《乘法分配律》深度教学建构与实施(教学设计)
- 2026年急诊科理论考试试题及答案
- 2026年周口市国有污水处理厂社会公开招聘19人笔试模拟试题及答案详解
- 2026中国连续玄武岩纤维产业化进程与军民两用市场开发策略
- 2026年武汉市中考语文试卷(含答案)
- 体育教师教学基本功比赛理论考试试题及答案
- 镇江润扬交通工程有限责任公司招聘笔试题库2026
- 陕西省宝鸡市2026年初一新生入学分班数学考试真题及答案
- 2026年江苏省高考地理试卷(含答案及解析)
- 部编五上语文《“漫画”老师》公开课教案教学设计【一等奖】
- 2026年小学二年级奥林匹克数学竞赛测试(含答案)
- 2026年全国新高考2卷英语试卷(含答案及解析)+听力音频及听力原文
评论
0/150
提交评论