海光信息开放访存相关专利 优化访存性能 (海光信息官网)
专利摘要显示,本开放实施例提供一种访存方法、内存控制器、芯片及电子设备,其中方法包括:失掉访存恳求;确定访存恳求婚配的页外形;将婚配页开启外形的访存恳求分发到页开启队列模块,以及将婚配非页开启外形的访存恳求分发到非页开启队列模块;以及,依据访存恳求的页外形变化,在页开启队列模块和非页开启队列模块之间流动访存恳求;为所述页开启队列模块保管的访存恳求,规划对应的访存操作指令的指令发送顺序,所述指令发送顺序的总时序距离契合预设时序距离要求;以及,至少基于所述指令发送顺序,使所述访存操作指令介入指令仲裁,以使所述访存操作指令之间按指令发送顺序送往内存。本开放实施例可以优化访存性能。
为啥要求在指令执行周期之后收回终止查询信号
它们用来保管指令执行环节中暂时寄存的寄存器操作数和两边(或最终)的操作结果。 【CPU 任务环节】CPU 的基本任务是执行存储的指令序列,即程序。 程序的执行环节实践上是不时地取出指令、剖析指令、执行指令的环节。 在取指周期后,要求判别能否有间址周期,假设没有就进入到了执行周期,在执行周期环节中,要求判别有没有终止程序,假设有,就照应终止:保管断点,生成终止服务程序入口,配件关断点;假设没有,就进入下一个取指周期。 【各种周期的含义】1. 指令周期:CPU 每取出并执行一条指令所需的全部时期,即 CPU 成功一条指令的时期。 指令周期的长短与指令的复杂水平有关。 一条完整的指令包括 取指周期、间址周期、执行周期、终止周期。 2. 机器周期(CPU 周期):CPU 访问一次性内存所花的时期较长,因此 CPU 周期定义为 从内存读取一条指令字的最短时期。 3. 时钟周期:通常称为节拍脉冲或 T 周期。 时钟周期是处置操作的最基本时期单位,由机器的主频选择。 4. 周期之间的相关:一个指令周期 = 若干个 CPU 周期一个 CPU 周期 = 若干个时钟周期采用定长CPU周期的指令周期表示图:任何一条指令,它的指令周期至少要求两个 CPU 周期,而复杂指令的指令周期则要求更多的 CPU 周期。 这是由于,一条指令的取出阶段要求一个 CPU 周期时期,执行阶段也要求至少一个 CPU 周期时期。 参考:CPU的任务环节【操作系统将指令交给 CPU 的执行环节】CPU 执行指令的 5 个阶段:取指令(IF),指令译码(ID),执行指令(EX),访存取数(MEM),结果写回(WB)。 取指令(Instruction Fetch,IF):CPU 依据程序计数器 PC 中的值从主存中读取指令,送到指令寄存器,同时构成后继指令的地址(PC 依据指令字长度智能递增)。 指令译码(Instruction Decode,ID):将指令寄存器中的指令操作码取出后启动译码,剖析指令性质,识别区分出不同的指令类别以及各种失掉操作数的方法。 执行指令(Execute,EX):成功指令所规则的各种操作,详细成功指令的性能。 访存取数(Memory,MEM):依据指令要求,有或许要访问主存读取操作数,此时会依据指令地址码,失掉操作数在主存中的地址,并从主存中读取该操作数用于运算。 结果写回(Write Back,WB):把执行指令阶段的运转结果数据“写回”到某种存储介质中,比如 CPU 的外部寄存器或主存中。 补充:指令周期可以分为取指周期、间址周期、执行周期、终止周期。 其两边址周期和终止周期不一定有。 间址周期:当遇到直接寻址的指令时,由于指令字中只给出操作数有效地址的地址,因此,为了取出操作数,需先访问一次性存储器,取出有效地址,然后再访问存储器,取出操作数。 间址周期是取出操作数的有效地址,而执行周期是取出操作数,并执行指令。 终止周期:当 CPU 采用终止方式成功主机与 I/O 交流信息时,CPU 在每条指令执行阶段完毕前, 都要发终止查询信号以检测能否有终止恳求。 假设有恳求,CPU 就要进入终止照应阶段,又称终止周期。 在这一阶段,CPU 必需将程序断点保管到存储器中。 【CPU 指令集】指令集(指令系统)是 CPU 中用于计算和控制计算机系统的一套指令的集合,可以分为复杂指令集和精简指令集两部分。 指令系统的设计和机器的配件结构有关。 。 经常出现指令集有:Intel 的 x86 系列,SSE 系列AMD 的 x86,x86-64,3D-Now!(关键用于 3D 游戏),3D-Now!+目前通用 PC 都是 x86 架构的,其基本指令集一样,但是扩展指令集或许不同(比如 AMD 和 Intel 两家)。 还有些公用 CPU 的基本指令集也和通用 PC 的 CPU 指令集不一样。 2. 终止引入终止机制,可以成功多道程序的并发执行,提高了系统资源的应用率。 终止是多程序并发执行的前提条件。 终止是 CPU 对系统出现的某事情做出的一种反响。 CPU 会暂停正在执行的程序,保管现场后去执行相应的处置程序,处置完该事情后再前往终止处继续执行原来的程序。 操作系统其实是“终止驱动”的,出现终止时,CPU 从用户态进入中心态,使操作系统取得计算机的控制权。 另外,用户态到中心态的转换是经过终止机制成功的,且终止是独一途径。 而中心态到用户态的切换是经过执行一个特权指令,将程序形态字(PSW)标志位设置未用户态。 终止分类:外终止(终止):由 CPU 外部事情惹起,比如 I/O 终止(IO设备处置已成功,希望处置机能向IO设备发送下一个恳求)、时钟终止(固定时期片已到)。 内终止(异常/堕入):由 CPU 外部事情惹起,比如程序出错,地址越界、浮点溢出。 外终止和内终止的区别就是信号的来源。 系统调用:用户在程序中调用操作系统所提供的一些子性能。 终止处置方式: 终止处置 = 终止照应(配件实施) + 终止处置(软件实施)屏蔽终止:当处置机正在处置一个终止时,将屏蔽掉一切的终止,即处置机对任何新到的终止恳求,都暂时不予理会,而让他们等候,直四处置机已成功本次终止的处置后,处置机再去审核能否有终止出现。 若有,再去处置新到的终止,若无,则前往被终止的程序,在该方法中,一切终止都按顺序依次执行,优势是简易,但不适宜用于对实时性要求较高的终止恳求。 嵌套终止:设置了终止优先级的系统中,当同时有多个不同优先级的终止恳求时,CPU 优先照应最高优先级的终止恳求。 高优先级的终止恳求可以抢占正在运转的低优先级终止的处置机。 终止处置环节:每个指令执行完后,CPU 都会检测能否有未照应的外终止信号;假设检测到外终止信号,则维护被终止进程的 CPU 环境(如程序形态字 PSW,程序计数器、各种寄存器);依据终止信号类型转入相应的终止处置程序,启动终止处置;恢复 CPU 的现场并分开终止,前往原进程继续执行。 【例子】以两个进程并发运转为例(1)进程1在用户态运转了一段时期后,CPU会接纳到计时部件(操作系统内核的时钟控制部件)收回的终止信号,表示进程1曾经用完了一个时期片,CPU会切换到中心态,把CPU的经常使用权限交还给操作系统,操作系统内核就会对刚才的终止启动处置,操作系统知道进程1的时期片用完,就要求切换进程,在成功切换进程的一系列任务后,操作系统又会将CPU的经常使用权交还给用户进程。 (2)接着进程2拿到CPU执行权就会在用户态下执行,进程2执行一段时期后,进程2收回系统调用(内终止信号),恳求输入,主动要求操作系统介入任务,CPU会立刻切换到中心态,把CPU的经常使用权限交还给操作系统,操作系统内核接收进程2系统调用恳求,调用IO设备末尾输入任务,然后操作系统交还CPU执行权,IO设备也会并行执行,进程2要求等候IO操作成功,所以进程1拿到CPU执行权末尾运转。 当执行一段时期后,IO操作成功,IO设备向CPU发送一个终止信号,此时CPU由用户态再次转换为中心态,对刚才的终止信号处置,由于IO操作成功,所以操作系统知道进程2可以恢复运转了,以成功后续任务,所以操作系统再次交还CPU执行权,让进程2再次运转。 终止信号由外部设备发起,准确来说是由外部设备的控制器发起,由于外部设备自身并不能发起信号。 比如网卡设备,网络数据包抵达网卡,网卡的控制器就向IO APIC发送终止信号,IO APIC把信号发送给本地APIC,本地APIC把信号传送给CPU,假设依据事先状况,要处置这个终止,就保管事先的运转上下文,切换到终止上下文中,依据IDT查找对应的处置函数启动处置。 处置成功后,要求恢复终止之前的形态。
chisel搭个cpu(二) SW性能(成功译码/执行/访存)
在前一篇文章构建了CPU的基本框架后,我们继续成功LW和SW性能,采用五级流水线结构启动设计。 五级流水线包括执行(execute)、译码(decode)、访问内存(access memory)和写回(write back)等步骤。 执行阶段,指令类型已被译码器识别,所需数据也在通用寄存器中失掉,执行相对简易。 译码阶段处置指令类型,选择能否执行写回操作。 访问内存阶段,当遇到SW或CSR相关指令时,会写入内存或CSR寄存器。 而写回阶段,实质上与访问内存相反,用来防止读写抵触,但通常会分开处置。 通常上,经过编译器优化,防止指令延续读写同一地址,访问内存和写回步骤可以兼并。 但这样或许牺牲编译器效率以换取配件效率的优化,实践选择取决于运行场景。 如今,我们专注于SW性能的成功,它触及前四级流水线。 SW性能的中心是将rs1的内容与12位立刻数相加,然后将结果作为地址,rs2的内容作为数据写入内存。 为此,要求参与一个读写数据端口,并应用上一章的fetch部分。 在chisel代码中,我们定义了SW指令,并依照decode步骤处置。 在EXE阶段,将rs1数据和指令中的立刻数相加,失掉的地址将用于内存写入。 在访存阶段,依据开关控制,将计算出的地址和数据写入内存。 最后,SW指令不触及写回通用寄存器。
一心二用的Online Softmax
原始 softmax 是一个计算概率散布的经常出现方法。 假定有一组数值 x[1.....n],要求对这组数值启动 softmax 处置,即计算每个元素的指数与整个数组指数和的商,以构成概率散布。 原始 softmax 的计算流程包括两步:第一步遍历数组求指数和 sum,第二步再遍历一次性数组,计算每个元素的指数与 sum 的比值。 整个环节的访存开支为两次加载和一次性存储。 为了优化 softmax 的计算,我们引入了 safe softmax。 safe softmax 的计算原理是在原始 softmax 的基础上,对数组的每个元素先减去数组的最大值 max,再启动 softmax 处置。 这种方法能增加指数溢出的风险,提高计算精度。 safe softmax 的计算流程包括三步:第一步遍历数组求最大值 max,第二步遍历数组计算每个元素减去 max 后的指数和 sum,第三步遍历数组计算每个元素减去 max 后的指数与 sum 的比值。 safe softmax 的访存开支为三次加载和一次性存储。 接上去,我们引见了一种新的优化方法——online softmax。 online softmax 是在 safe softmax 的基础上启动改良的,它应用了指数运算规则:同底数的两个指数相乘等于两个指数幂的和,同理,除法也适用该规则。 online softmax 的中心在于应用了指数运算的这一性质,经过更新公式在一次性遍历中计算出数组 x[1.....n] 的前 n 项指数和与最大值 max,以此优化了计算环节。 相比于 safe softmax,online softmax 在访存上的优化更为清楚。 实验结果标明,online softmax 的性能简直与原始 softmax 相当,相比 safe softmax 成功上大约能优化 1.2 到 1.4 倍。 在 CPU 上启动的实验,经常使用长度为 10 万的数组,navie 的耗时为 114.569ms,而 online 的耗时为 77.81ms,减速比到达约 1.47。 实验结果证明了 online softmax 在计算效率上的优势,特别是在访存优化上的改良。 总之,online softmax 是一种针对 softmax 启动优化的方法,它经过改良计算流程,增加了计算量,优化了访存操作,从而提高了计算效率。 经过实验验证,online softmax 在不同场景下的性能表现令人满意,特别是在与 topk 等其他操作融合时,能成功更高的性能优化。 关于希望进一步探求和运行 online softmax 的好友,欢迎与我私信交流,更多详细信息请参考我的 GitHub 仓库。 同时,代码在运转时或许会有细微误差(约 0. 左右),且在经常使用 O2 级别的优化时能更好地发扬其性能优势。
版权声明
本文来自网络,不代表本站立场,内容仅供娱乐参考,不能盲信。
未经许可,不得转载。