CN102968395A - 用于微处理器的内存拷贝加速方法及装置 - Google Patents
用于微处理器的内存拷贝加速方法及装置 Download PDFInfo
- Publication number
- CN102968395A CN102968395A CN2012104933206A CN201210493320A CN102968395A CN 102968395 A CN102968395 A CN 102968395A CN 2012104933206 A CN2012104933206 A CN 2012104933206A CN 201210493320 A CN201210493320 A CN 201210493320A CN 102968395 A CN102968395 A CN 102968395A
- Authority
- CN
- China
- Prior art keywords
- memory copying
- request
- copy
- memory
- copying request
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种用于微处理器的内存拷贝加速方法及装置,方法步骤如下:1在微处理器增加内存拷贝单元;2)译码逻辑译码得到的内存拷贝指令发送给内存拷贝单元;内存拷贝单元通过相关检测部件检测新内存拷贝请求与其它内存拷贝请求之间的相关关系,将新内存拷贝请求及其相关关系缓存至请求队列;3)内存拷贝单元以页为单位执行当前内存拷贝请求并合并执行关联内存拷贝请求;装置包括专用于执行内存拷贝请求的内存拷贝单元和用于检测新内存拷贝请求与队列中其它内存拷贝请求之间的相关关系的相关检测部件。本发明具有内存拷贝性能高、硬件实现简单且代价小、扩展性好、兼容性强、并发性好、访存次数少、消耗功耗低的优点。
Description
技术领域
本发明涉及计算机微处理器领域,具体涉及一种用于微处理器的内存拷贝加速方法及装置。
背景技术
随着计算机领域的高速发展,应用程序对微处理器处理能力的要求越来越高。人们不断通过提高处理器的频率、采用新的体系结构等技术来改善处理器内核的性能。然而,在微处理器内核性能大幅提高的同时,存储器带宽的增加则相对缓慢得多。如果存储器无法为处理器内核提供充足的数据,处理器资源将无法得到充分利用。因此,提高内存拷贝等访存操作的性能成为处理器设计者日益关心的问题。
内存拷贝操作已经成为现代计算机系统中最为常见的一种操作。而许多应用的性能直接或间接地依赖于内存拷贝操作的性能。TCP/IP 协议及文件拷贝等应用程序一般都包含大量的内存拷贝操作,其整体性能也很大程度上由其中内存拷贝操作所花费的时间所决定。此外,一些操作系统函数同样需要内存拷贝操作的支持,如虚拟内存管理、页管理、缓存管理及进程通信等。在传统的计算机系统中,内存拷贝操作一般由一系列的访存指令Load/Store组成。在内存拷贝过程中,Load/Store指令一直占有处理器资源,阻塞后续指令执行。每条Load/Store指令都需要首先访问快表(TLB)以将指令中的虚地址转换为实地址,然后再访问高速缓存(Cache)。也就是说,一次Load/Store操作都需要访问一次TLB和访问一次高速缓存,功耗及性能开销较大。为了提高内存拷贝的效率,DMA技术被应用于大数据块拷贝。但是这种基于DMA的内存拷贝技术仍存在一定的缺点,如(1)DMA设备往往需要较长的启动时间,(2)在拷贝结束以后需要通过中断通知内核,(3)需要操作系统的支持。
综上所述,无论上述哪种内存拷贝实现方法,都存在性能相对较低的问题。此外,这些内存拷贝实现方法基本上都是针对某一单独的拷贝操作进行加速,而没有给出微处理器中多条相关内存拷贝操作的优化方法。随着体系结构与制造工艺的不断发展,处理器内核与存储器带宽之间的性能差距正在不断加大,需要频繁访存的内存拷贝操作的性能制约了处理器整体性能的提高;而与此同时,内存拷贝操作广泛存在于各种操作系统程序及用户程序之中。因此,这种内存拷贝的重要性及其现有技术中性能的低效性促使内存拷贝加速成为一个亟待解决的技术问题。
发明内容
本发明要解决的技术问题是提供一种内存拷贝性能高、硬件实现简单且代价小、扩展性好、兼容性强、并发性好、访存次数少、消耗功耗低的用于微处理器的内存拷贝加速方法及装置。
为了解决上述技术问题,本发明采用的技术方案为:
一种用于微处理器的内存拷贝加速方法,其实施步骤如下:
1)预先在微处理器指令集中增加内存拷贝指令支持,在微处理器的指令执行流水线中增加专用于执行所述内存拷贝指令的内存拷贝单元;
2)译码逻辑在进行译码时如果译码的指令为内存拷贝指令,则将内存拷贝指令转换为内存拷贝请求并发送给所述内存拷贝单元;所述内存拷贝单元接收译码逻辑发送的新内存拷贝请求,通过相关检测部件检测新内存拷贝请求与内存拷贝单元内用于缓存内存拷贝请求的请求队列中其它内存拷贝请求之间的相关关系,如果存在目的地址或者源地址与新内存拷贝请求的源地址相同的关联内存拷贝请求,则判定新内存拷贝请求存在具有相关关系的关联内存拷贝请求,当所述请求队列存在空闲项时内存拷贝单元将新内存拷贝请求及其相关关系缓存至所述请求队列中;
3)所述内存拷贝单元从请求队列选择待执行的当前内存拷贝请求,与高速缓存及快表进行交互获取当前内存拷贝请求的物理地址,以页为单位执行当前内存拷贝请求;如果存在与当前内存拷贝请求具有相关关系的关联内存拷贝请求,则将关联内存拷贝请求与当前内存拷贝请求中相同的页拷贝操作合并执行。
作为本发明用于微处理器的内存拷贝加速方法的进一步改进:
所述步骤2)中将新内存拷贝请求及其相关关系缓存至请求队列中时,所述请求队列中内存拷贝请求的内容域包括源地址、目的地址、拷贝长度、拷贝类型、源地址’、目的地址’、拷贝长度’、有效位和关联标识位,其中源地址、目的地址、拷贝长度、拷贝类型与所述内存拷贝指令的内容相同;所述源地址’表示未完成的源内存区域的起始地址,目的地址’表示目的内存区域的起始地址,拷贝长度’表示待拷贝长度; 所述源地址’的初始值为源地址,目的地址’的初始值为目的地址,拷贝长度’的初始值为拷贝长度;所述有效位表示是否存在关联内存拷贝请求,有效位为1表示该内存拷贝请求与其之前的内存拷贝请求没有关联关系,可以由内存拷贝单元执行,有效位为0表示该内存拷贝请求与其之前的内存拷贝请求存在关联关系,目前还不能由内存拷贝单元单独执行,而由内存拷贝单元合并执行;所述关联标识位用于存储关联内存拷贝请求的编号;所述步骤3)中以页为单位执行当前内存拷贝请求时,建立用于存储当前进行的页拷贝操作的页拷贝记录的页拷贝状态表,页拷贝状态表中每一项页拷贝记录的内容域包括源页起始地址、目的页起始地址和拷贝长度信息。
所述步骤3)的详细步骤如下:
3.1)所述内存拷贝单元从请求队列选择有效位为1的当前内存拷贝请求,将当前内存拷贝请求根据虚拟存储器的页大小分解为多个页拷贝;
3.2)所述内存拷贝单元与高速缓存及快表进行交互获取当前内存拷贝请求待执行页拷贝的物理地址;将待执行页拷贝的源页起始地址、目的页起始地址和拷贝长度信息建立页拷贝记录;
3.3)更新当前内存拷贝请求在请求队列中的源地址’、目的地址’与长度’,使源地址’等于源地址’减去待执行页拷贝的长度、目的地址’ 等于目的地址’减去待执行页拷贝的长度,长度’等于拷贝长度’减去待执行页拷贝的长度;
3.4)根据所述页拷贝状态表中记录的当前内存拷贝请求的待执行页拷贝访问高速缓存或外部存储器,以页为单位执行当前内存拷贝请求的页拷贝;同时所述内存拷贝单元扫描请求队列,如果请求队列中存在与当前内存拷贝请求存在相关关系的关联内存拷贝请求,则将关联内存拷贝请求与当前内存拷贝请求中相同的页拷贝操作合并执行;
3.5)在待执行页拷贝执行完毕后,判断当前内存拷贝请求的所有页拷贝是否已经全部完成,如果还有页拷贝未完成则跳转执行步骤3.2),否则跳转执行下一步;
3.6)发出信号,表明本次内存拷贝请求完成,并将与本次内存拷贝请求合并执行的关联内存拷贝请求的有效位设为1。
所述步骤3.4)的详细步骤如下:
3.4.1)根据所述页拷贝状态表中记录的当前内存拷贝请求的待执行页拷贝访问高速缓存或外部存储器,以页为单位执行当前内存拷贝请求的页拷贝;同时所述内存拷贝单元扫描请求队列,判定请求队列中是否存在有效位为0且关联标识位记录的为当前内存拷贝请求的关联内存拷贝请求,如果存在则跳转执行下一步,否则直接跳转执行步骤3.5);
3.4.2)判断关联内存拷贝请求之间的关联关系,如果请求队列存在目的地址与当前内存拷贝请求的源地址相同的关联内存拷贝请求(如应用程序通信的内存拷贝操作),则判定当前内存拷贝请求与其关联内存拷贝请求之间存在数据相关关系,跳转执行3.4.3);如果请求队列存在源地址与当前内存拷贝请求的源地址相同的关联内存拷贝请求(如基于进程拷贝通信的内存拷贝操作),则判定当前内存拷贝请求与其关联内存拷贝请求之间存在源相关关系,跳转执行3.4.5);
3.4.3)将关联内存拷贝请求在请求队列中的各项进行修改:源地址不变;目的地址不变;拷贝长度等于拷贝长度原值减去当前内存拷贝请求的拷贝长度’;源地址’等于当前内存拷贝请求的源地址’;目的地址’等于目的地址原值加上当前内存拷贝请求的拷贝长度并减去当前内存拷贝请求的拷贝长度’;拷贝长度’等于当前内存拷贝请求的拷贝长度’;然后跳转执行下一步;
3.4.4)当前内存拷贝请求后续的页拷贝时,每次从缓存读取一个拷贝单位数据后,同时写入当前内存拷贝请求对应的缓存数据区域与关联内存拷贝请求对应的目的数据区域中;在当前内存拷贝请求的所有页拷贝完成以后,对关联内存拷贝请求所在请求队列位置中的拷贝长度’、目的地址’和源地址’进行修改:源地址’等于关联内存拷贝请求的源地址;目的地址’等于关联内存拷贝请求的目的地址;拷贝长度’等于关联内存拷贝请求的拷贝长度;同时,将关联内存拷贝请求的有效位设为1,所述关联内存拷贝请求将由内存拷贝单元单独执行;跳转执行步骤3.5);
3.4.5)当前内存拷贝请求后续的页拷贝时,每次从缓存读取一个拷贝单位数据后,将同时写入当前内存拷贝请求的目的地址以及与关联内存拷贝请求的目的地址;在当前内存拷贝请求的所有页拷贝完成以后,对关联内存拷贝请求所在请求队列位置中的拷贝长度’进行修改:拷贝长度’等于关联内存拷贝请求的拷贝长度’减去当前内存拷贝请求的拷贝长度’;将关联内存拷贝请求的有效位设为1,所述关联内存拷贝请求将由内存拷贝单元单独执行;跳转执行步骤3.5)。
所述执行页拷贝时,如果所述内存拷贝单元读入或写回操作行为影响到高速缓冲中数据的一致性,对高速缓冲中的数据执行失效或者更新等操作。
本发明还提供一种用于微处理器的内存拷贝加速装置,包括:
内存拷贝单元,专用于执行内存拷贝请求,设于微处理器的指令执行流水线中;
相关检测部件,用于检测新内存拷贝请求与队列中其它内存拷贝请求之间的相关关系;
微处理器指令集中设有内存拷贝指令支持,译码逻辑在进行译码时如果译码的指令为内存拷贝指令,则将内存拷贝指令转换为内存拷贝请求并发送给所述内存拷贝单元;所述内存拷贝单元接收译码逻辑发送的新内存拷贝请求,通过所述相关检测部件检测新内存拷贝请求与内存拷贝单元内用于缓存内存拷贝请求的请求队列中其它内存拷贝请求之间的相关关系,当所述请求队列存在空闲项时内存拷贝单元将新内存拷贝请求及其相关关系缓存至所述请求队列中;所述相关检测部件检测新内存拷贝请求与队列中其它内存拷贝请求之间的相关关系时,如果存在目的地址或者源地址与新内存拷贝请求的源地址相同的关联内存拷贝请求,则判定新内存拷贝请求存在具有相关关系的关联内存拷贝请求,当所述请求队列存在空闲项时内存拷贝单元将新内存拷贝请求及其相关关系缓存至所述请求队列中;所述内存拷贝单元从请求队列选择待执行的当前内存拷贝请求,与高速缓存及快表进行交互获取当前内存拷贝请求的物理地址,以页为单位执行当前内存拷贝请求;如果存在与当前内存拷贝请求具有相关关系的关联内存拷贝请求,则所述内存拷贝单元将关联内存拷贝请求与当前内存拷贝请求中相同的页拷贝操作合并执行。
作为本发明用于微处理器的内存拷贝加速装置的进一步改进:
所述内存拷贝单元包含:
请求队列,用于缓存内存拷贝请求及其相关关系;
页拷贝状态表,用于记录当前进行的页拷贝操作建立对应的页拷贝记录;
拷贝控制单元,用于控制请求队列和页拷贝状态表、与高速缓存及快表进行交互获取当前内存拷贝请求的物理地址、执行页拷贝操作;
所述请求队列中内存拷贝请求的内容域包括源地址、目的地址、拷贝长度、拷贝类型、源地址’、目的地址’、拷贝长度’、有效位和关联标识位,其中源地址、目的地址、拷贝长度、拷贝类型与所述内存拷贝指令的内容相同;所述源地址’表示未完成的源内存区域的起始地址,目的地址’表示目的内存区域的起始地址,拷贝长度’表示待拷贝长度; 所述源地址’的初始值为源地址,目的地址’的初始值为目的地址,拷贝长度’的初始值为拷贝长度;所述有效位表示是否存在关联内存拷贝请求,有效位为1表示该内存拷贝请求与其之前的内存拷贝请求没有关联关系,可以由内存拷贝单元单独执行,有效位为0表示该内存拷贝请求与其之前的内存拷贝请求存在关联关系,目前还不能由内存拷贝单元单独执行,而由内存拷贝单元合并执行;所述关联标识位用于存储关联内存拷贝请求的编号;所述页拷贝状态表中每一项页拷贝记录的内容域包括源页起始地址、目的页起始地址和拷贝长度信息。
本发明具有下述优点:
1、本发明通过获取内存拷贝请求和请求队列中其它内存拷贝请求之间的相关关系,在以页为单位执行当前内存拷贝请求的同时,具有关联关系的不同内存拷贝请求进行合并,减少访存次数,有效提高内存拷贝操作的效率。将整个拷贝操作划分为多个页拷贝,相关检测的粒度更细,能够增加内存拷贝指令与其它普通指令的之间的执行并行性,提高了系统性能,当内核中的后续指令与内存拷贝指令之间不存在相关性或者相关解除时,后续指令可以继续执行,而不需要等待拷贝指令的完成,能够加速传统内存拷贝操作,具有内存拷贝性能高、并发性好的优点。
2、本发明在微处理器现有指令集的基础上增加了专有的内存拷贝指令来进行内存拷贝,且采用专有硬件支持内存拷贝操作,对现有微处理器的指令集修改较小,而且执行内存拷贝时不需要经过数据写回单元,而是直接访问数据高速缓存或者外部存储控制器来实现数据的读取和写回,因此结构更加简单,也无需排队等待其他操作占用的数据写回单元,能够有效提高内存拷贝的性能以及处理器的综合处理性能;而且这种特性使得本发明易于应用于现有各种微处理器体系结构,在确保性能的同时降低了硬件设计的复杂度,硬件结构简单,代价小,扩展性好。
3、本发明对微处理器的原有硬件结构修改小,保留了处理器原先的流水线结构,因此原先的应用程序能够不加改动地运行于改动以后的处理器上,即改进后的微处理器可以完全兼容传统的应用程序,兼容性好。
4、本发明针对应用程序通信、进程拷贝通信的特殊拷贝操作存在的特点,将存在数据相关关系与源相关关系的内存拷贝操作进行合并,从而能够进一步减少内存拷贝实际访存的次数,提高了性能,降低了功耗,具有内存拷贝性能高、访存次数少、消耗功耗低的优点。
本发明用于微处理器的内存拷贝加速装置为与本发明内存拷贝加速方法相对应的结构,也具有与本发明内存拷贝加速方法相同的技术效果,因此在此不再赘述。
附图说明
图1为本发明实施例的基本实施流程示意图。
图2为本发明实施例中内存拷贝指令的格式示意图。
图3为本发明实施例中内存拷贝指令的执行流程示意图。
图4为本发明实施例中步骤3)的实施流程示意图。
图5为本发明实施例中步骤3.4)的实施流程示意图。
图6为应用本发明实施例内存拷贝加速装置的微处理器流水线结构示意图。
图7为本发明实施例内存拷贝加速装置的访存连接关系示意图。
图8为应用本发明实施例内存拷贝加速装置的微处理器结构示意图。
图9为应用本发明实施例中内存拷贝加速单元的详细结构示意图。
图10为应用本发明实施例基于应用程序通信的内存拷贝加速原理示意图。
图11为应用本发明实施例基于进程拷贝通信的内存拷贝加速原理示意图。
具体实施方式
如图1所示,本发明实施例用于微处理器的内存拷贝加速方法的实施步骤如下:
1)预先在微处理器指令集中增加内存拷贝指令支持,在微处理器的指令执行流水线中增加专用于执行内存拷贝指令的内存拷贝单元;
2)译码逻辑在进行译码时如果译码的指令为内存拷贝指令,则将内存拷贝指令转换为内存拷贝请求并发送给内存拷贝单元;内存拷贝单元接收译码逻辑发送的新内存拷贝请求,通过相关检测部件检测新内存拷贝请求与内存拷贝单元内用于缓存内存拷贝请求的请求队列中其它内存拷贝请求之间的相关关系(数据相关或源相关),如果存在目的地址或者源地址与新内存拷贝请求的源地址相同的关联内存拷贝请求,则判定新内存拷贝请求存在具有相关关系的关联内存拷贝请求,当请求队列存在空闲项时内存拷贝单元将新内存拷贝请求及其相关关系缓存至请求队列中;
3)内存拷贝单元从请求队列选择待执行的当前内存拷贝请求,与高速缓存及快表进行交互获取当前内存拷贝请求的物理地址,以页为单位执行当前内存拷贝请求;如果存在与当前内存拷贝请求具有相关关系的关联内存拷贝请求,则将关联内存拷贝请求与当前内存拷贝请求中相同的页拷贝操作合并执行。
本实施例引入了专有的内存拷贝指令与硬件结构的内存拷贝单元,程序中内存拷贝操作采用专用的内存拷贝指令表示,而专有的内存拷贝单元负责执行拷贝指令,因此内存拷贝操作不需要经过数据写回单元,而是直接访问数据高速缓存或者外部存储控制器,提高处理器的性能;而且本实施例的内存拷贝单元还能够对拷贝请求队列中所有拷贝请求进行扫描,识别出各拷贝操作之间存在的关系,然后对一些相关的拷贝操作进行合并执行,从而减少拷贝操作开销,解决了现有内存拷贝技术访存开销大,进而影响微处理器性能的问题。而且本实施例的拷贝方法中,内存拷贝单元将整个拷贝操作划分为多个页拷贝,相关检测的粒度更细,能够增加内存拷贝指令与其它普通指令的之间的执行并行性,提高了系统性能;如果一条指令与前面的内存拷贝指令相关,该指令只需要内存拷贝指令拷贝完包含相关数据的页,即可立即执行,而不需要等待拷贝指令完成所有页的拷贝。
为了实现对内存拷贝的加速,本实施例预先在微处理器原有指令集的基础上增加内存拷贝指令支持。如图2所示,本实施例的内存拷贝指令包含拷贝类型域、源地址域、目的地址域与拷贝长度域四部分。该指令表示从源地址所指的内存区域开始向目的地址所指的内存区域拷贝数据,拷贝长度指明了拷贝的字节数。内存拷贝指令可支持多种不同的寻址方式,包括寄存器寻址、立即数寻址及基址寻址,在进行具体实现时可以实现全部寻址方式,也可实现其中一种或几种寻址方式。本实施例中,内存拷贝指令具体形式为mcopy src dst len,该指令代表将某一内存区域中的数据拷贝到另一内存区域,其中src表示源内存区域的起始地址,dst表示目的内存区域的起始地址,len表示本次内存拷贝所要拷贝的数据长度。
如图3所示,本实施例的内存拷贝指令与微处理器的现有指令集中的其它指令类型的执行步骤相同,其执行步骤如下:(1)读取指令:取指部件根据程序计数器的值从存储器中读取指令并存储到指令队列中,同时程序计数器指向下一条指令;(2)指令译码:译码部件从所述指令缓冲队列中取出一条指令进行译码;(3)指令执行:如果正在译码的指令是内存拷贝指令,该指令发送给内存拷贝加速装置并由内存拷贝加速装置(即内存拷贝单元)负责执行,否则,该指令进入传统的指令执行流水线。
本实施例步骤2)中将新内存拷贝请求及其相关关系缓存至请求队列中时,请求队列中内存拷贝请求的内容域包括源地址、目的地址、拷贝长度、拷贝类型、源地址’、目的地址’、拷贝长度’、有效位和关联标识位,其中源地址、目的地址、拷贝长度、拷贝类型与内存拷贝指令的内容相同;源地址’表示未完成的源内存区域的起始地址,目的地址’表示目的内存区域的起始地址,拷贝长度’表示待拷贝长度; 源地址’的初始值为源地址,目的地址’的初始值为目的地址,拷贝长度’的初始值为拷贝长度;有效位表示是否存在关联内存拷贝请求,有效位为1表示由内存拷贝单元单独执行,有效位为0表示由内存拷贝单元合并执行;关联标识位用于存储关联内存拷贝请求的编号;步骤3)中以页为单位执行当前内存拷贝请求时,建立用于存储当前进行的页拷贝操作的页拷贝记录的页拷贝状态表,页拷贝状态表中每一项页拷贝记录的内容域包括源页起始地址、目的页起始地址和拷贝长度信息。
如图4所示,本实施例中,步骤3)的详细步骤如下:
3.1)内存拷贝单元从请求队列选择有效位为1的当前内存拷贝请求,将当前内存拷贝请求根据虚拟存储器的页大小分解为多个页拷贝;
3.2)内存拷贝单元与高速缓存及快表进行交互获取当前内存拷贝请求待执行页拷贝的物理地址;将待执行页拷贝的源页起始地址、目的页起始地址和拷贝长度信息建立页拷贝记录;
3.3)更新当前内存拷贝请求在请求队列中的源地址’、目的地址’与长度’,使源地址’等于源地址’减去待执行页拷贝的长度、目的地址’ 等于目的地址’减去待执行页拷贝的长度,长度’等于拷贝长度’减去待执行页拷贝的长度;
3.4)根据页拷贝状态表中记录的当前内存拷贝请求的待执行页拷贝访问高速缓存或外部存储器,以页为单位执行当前内存拷贝请求的页拷贝;同时内存拷贝单元扫描请求队列,如果请求队列中存在与当前内存拷贝请求存在相关关系的关联内存拷贝请求,则将关联内存拷贝请求与当前内存拷贝请求中相同的页拷贝操作合并执行;
3.5)在待执行页拷贝执行完毕后,判断当前内存拷贝请求的所有页拷贝是否已经全部完成,如果还有页拷贝未完成则跳转执行步骤3.2),否则跳转执行下一步;
3.6)发出信号,表明本次内存拷贝请求完成,并将与本次内存拷贝请求合并执行的内存拷贝请求的有效位设为1。
如图5所示,本实施例中,步骤3.4)的详细步骤如下:
3.4.1)根据页拷贝状态表中记录的当前内存拷贝请求的待执行页拷贝访问高速缓存或外部存储器,以页为单位执行当前内存拷贝请求的页拷贝;同时内存拷贝单元扫描请求队列,判定请求队列中是否存在有效位为0且关联标识位记录的为当前内存拷贝请求的关联内存拷贝请求,如果存在则跳转执行下一步,否则直接跳转执行步骤3.5);
3.4.2)判断关联内存拷贝请求之间的关联关系,如果请求队列存在目的地址与当前内存拷贝请求的源地址相同的关联内存拷贝请求(如应用程序通信的内存拷贝操作),则判定当前内存拷贝请求与其关联内存拷贝请求之间存在数据相关关系,跳转执行3.4.3);如果请求队列存在源地址与当前内存拷贝请求的源地址相同的关联内存拷贝请求(如基于进程拷贝通信的内存拷贝操作),则判定当前内存拷贝请求与其关联内存拷贝请求之间存在源相关关系,跳转执行3.4.5);
3.4.3)将关联内存拷贝请求在请求队列中的各项进行修改:源地址不变;目的地址不变;拷贝长度等于拷贝长度原值减去当前内存拷贝请求的拷贝长度’;源地址’等于当前内存拷贝请求的源地址’;目的地址’等于目的地址原值加上当前内存拷贝请求的拷贝长度并减去当前内存拷贝请求的拷贝长度’;拷贝长度’等于当前内存拷贝请求的拷贝长度’;然后跳转执行下一步;
3.4.4)当前内存拷贝请求后续的页拷贝时,每次从缓存读取一个拷贝单位数据后,同时写入当前内存拷贝请求对应的缓存数据区域与关联内存拷贝请求对应的目的数据区域中;在当前内存拷贝请求的所有页拷贝完成以后,对关联内存拷贝请求所在请求队列位置中的拷贝长度’、目的地址’和源地址’进行修改:源地址’等于关联内存拷贝请求的源地址;目的地址’等于关联内存拷贝请求的目的地址;拷贝长度’等于关联内存拷贝请求的拷贝长度;同时,将关联内存拷贝请求的有效位设为1,关联内存拷贝请求将由内存拷贝单元单独执行;跳转执行步骤3.5);
3.4.5)当前内存拷贝请求后续的页拷贝时,每次从缓存读取一个拷贝单位数据后,将同时写入当前内存拷贝请求的目的地址以及与关联内存拷贝请求的目的地址;在当前内存拷贝请求的所有页拷贝完成以后,对关联内存拷贝请求所在请求队列位置中的拷贝长度’进行修改:拷贝长度’等于关联内存拷贝请求的拷贝长度’减去当前内存拷贝请求的拷贝长度’;将关联内存拷贝请求的有效位设为1,关联内存拷贝请求将由内存拷贝单元单独执行;跳转执行步骤3.5)。
本实施例的内存拷贝单元可以直接访问外部存储器读入或写回要拷贝的数据,因此内存拷贝单元在执行页拷贝时,如果所述内存拷贝单元读入或写回操作行为影响到高速缓冲中数据的一致性,对高速缓冲中的数据执行失效或者更新等操作。而且,内存拷贝单元的这种访存连接方式也保留了内存拷贝单元通过高速缓冲访问外部存储器的通路。当拷贝的数据将会被后续指令使用时,内存拷贝单元可以通过高速缓冲访问外部存储器。
鉴于不同的内存拷贝操作之间往往存在一定的关联,将拷贝操作之间存在的数据相关关系与源相关关系引入到上述内存拷贝硬件装置中,本实施例在请求队列中为每一个内存拷贝请求设置了一个拷贝类型内容域,根据拷贝类型不同,分别进行不同的优化:
一、应用程序通信的内存拷贝操作加速。
在应用程序通信等一些应用环境中,拷贝操作A首先将要通信的数据从源地址拷贝到共享缓存中,然后拷贝操作B再将通信数据从共享缓存中拷贝到通信目标地址,操作A和操作B之间存在数据相关关系。内存拷贝单元在检测到拷贝队列中的内存拷贝操作之间存在数据相关关系以后,相关的拷贝操作A和B将被同时执行。在操作A拷贝剩余数据时,拷贝的数据将被同时写入操作B所指的通信目标地址中,减少了内核对内存数据的读写次数。当应用程序A与应用程序B通信时,操作系统首先采用一个拷贝操作将应用程序A要发送的数据逐一拷贝到操作系统地址空间中,然后采用第二个拷贝操作再将操作系统地址空间中的数据拷贝到应用程序B的接收缓存中,因此两个应用程序间的每次数据通信都要使用两次拷贝操作来完成,且这两次拷贝之间具有数据相关关系。本实施例的内存拷贝单元将扫描请求队列,将其中属于应用程序通信的内存拷贝操作的具有数据相关关系的两个内存拷贝请求识别出来并通过前述的步骤3.4.3)~3.4.4)的执行步骤对进行合并执行,从而减少实际访存操作。
二、基于进程拷贝通信的内存拷贝操作加速。
在进程拷贝等一些应用环境中,多个拷贝操作将某一地址的数据分别拷贝到其它多个不同的地址,这些拷贝操作之间存在源相关关系。拷贝单元在检测到拷贝队列的内存拷贝操作之间存在源相关关系以后,相关的多个拷贝操作将被同时执行。如果某一拷贝操作还要从源缓冲中接收数据,这部分数据会被同时写入其它源相关操作所指的目标地址中,避免了同一数据被内核重复读取多次的现象。当一个应用程序拷贝产生多个执行进程时,操作系统将分别采用多个拷贝操作,将父进程中的数据分别拷贝到多个子进程中。因此,父进程中的数据将会被上述多个拷贝操作进行重复读取,我们称这些内存拷贝操作之间存在源相关关系。本实施例内存拷贝单元将扫描拷贝请求队列,将其中属于基于进程拷贝通信的内存拷贝操作的具有源相关关系的多个内存拷贝请求识别出来,并通过前述的步骤3.4.5)的执行步骤对其进行合并执行,从而减少实际访存操作。
如图6所示,本实施例用于微处理器的内存拷贝加速装置包括:
内存拷贝单元,专用于执行内存拷贝请求,设于微处理器的指令执行流水线中;
相关检测部件,用于检测新内存拷贝请求与队列中其它内存拷贝请求之间的相关关系;
微处理器指令集中设有内存拷贝指令支持,译码逻辑在进行译码时如果译码的指令为内存拷贝指令,则将内存拷贝指令转换为内存拷贝请求并发送给内存拷贝单元;内存拷贝单元接收译码逻辑发送的新内存拷贝请求,通过相关检测部件检测新内存拷贝请求与内存拷贝单元内用于缓存内存拷贝请求的请求队列中其它内存拷贝请求之间的相关关系,当请求队列存在空闲项时内存拷贝单元将新内存拷贝请求及其相关关系缓存至请求队列中;相关检测部件检测新内存拷贝请求与队列中其它内存拷贝请求之间的相关关系时,如果存在目的地址或者源地址与新内存拷贝请求的源地址相同的关联内存拷贝请求,则判定新内存拷贝请求存在具有相关关系(数据相关或源相关)的关联内存拷贝请求,当请求队列存在空闲项时内存拷贝单元将新内存拷贝请求及其相关关系缓存至请求队列中;内存拷贝单元从请求队列选择待执行的当前内存拷贝请求,与高速缓存及快表进行交互获取当前内存拷贝请求的物理地址,以页为单位执行当前内存拷贝请求;如果存在与当前内存拷贝请求存在相关关系的关联内存拷贝请求,则内存拷贝单元将关联内存拷贝请求与当前内存拷贝请求中相同的页拷贝操作合并执行。
微处理器主要包括程序计数器、取指单元、指令高速缓存、译码单元、寄存器文件、数据高速缓存、相关检测单元、功能单元(Load/Store单元、浮点运算单元和算术逻辑单元)以及数据写回单元。取指单元依据程序计数器向指令高速缓存发出访存请求获取指令,然后取指单元将准备好的指令发往译码单元进行译码;依据译码单元的译码结果,指令访问寄存器文件获取源操作数并发往合适的功能单元进行运算;最后,数据写回部件负责将该指令的最终结果写回寄存器文件。而本实施例的内存拷贝单元属于一种特殊的功能单元,因此可以与其它现有功能单元放在同一级流水段中。译码单元在检测到指令是内存拷贝指令以后,将该指令发送给内存拷贝单元执行,内存拷贝单元主要负责搬运内存中的数据,因此其不需要经过数据写回单元,而是直接访问数据高速缓存或者外部存储控制器。为尽量提高处理器的性能,本实施例对相关检测单元稍作修改,将内存拷贝单元中的内存拷贝指令和请求队列中内存拷贝请求的相关关系也加到相关检测部件的控制范围。如果内存拷贝指令的后续指令与本次拷贝操作存在数据相关且相关的数据已经拷贝结束,则后续相关指令可以执行,而不需要等待该拷贝指令完全执行完毕。
由于内存拷贝一般是进行大数据块数据传输,因此内存拷贝单元对数据需求远远大于Load/Store单元。如果内存拷贝单元完全通过高速缓存访问内存,则存在以下几个问题:1)内存拷贝单元占用大量带宽,影响Load/Store单元访存性能;2)内存拷贝单元通过高速缓存访问内存,本身性能受到限制;3)内存拷贝单元将大量数据替换进入高速缓存,导致高速缓存污染,影响正在执行的应用程序。如图7所示,本实施例中内存拷贝单元能够直接与高速缓存及快表进行交互获取当前内存拷贝请求的物理地址,因此能够直接访问外部存储器读入或写回要拷贝的数据,如果读入或写回操作行为影响到高速缓冲中数据一致性,需要对高速缓冲中数据进行失效或者更新等操作。同时,该访存连接方式也保留了内存拷贝单元通过高速缓冲访问外部存储器的通路,当拷贝的数据将会被后续指令使用时,内存拷贝单元可以通过高速缓冲访问外部存储器。
如图8所示,应用本实施例的微处理器由一个内核、一个高速缓存、一个快表、一个存储器控制器组成。本实施例的内存拷贝单元作为一个专有拷贝模块,是处理器内核内部的一个功能单元。微处理器内核能够支持多个程序同时运行,每个程序可以包括多个执行进程。内存拷贝单元负责接收内核中每个程序的内存拷贝请求,并将其分解为独立的存储器读写请求。由于指令中的地址是虚地址,所以内存拷贝单元需要访问快表,将虚地址转换为物理地址。在获得物理地址以后,内存拷贝单元将发出访存请求,这时可以根据需要通过高速缓存访问存储器或者绕过高速缓存直接访问存储器。如果绕过高速缓存,需要作废高速缓存中相关数据块以保证高速缓存的一致性。
如图9所示,本实施例的内存拷贝单元包含:
请求队列,用于缓存内存拷贝请求及其相关关系;
页拷贝状态表,用于记录当前进行的页拷贝操作建立对应的页拷贝记录;
拷贝控制单元,用于控制请求队列和页拷贝状态表、与高速缓存及快表进行交互获取当前内存拷贝请求的物理地址、执行页拷贝操作;
请求队列中内存拷贝请求的内容域包括源地址、目的地址、拷贝长度、拷贝类型、源地址’、目的地址’、拷贝长度’、有效位(V)和关联标识位,其中源地址、目的地址、拷贝长度、拷贝类型与内存拷贝指令的内容相同;源地址’表示未完成的源内存区域的起始地址,目的地址’表示目的内存区域的起始地址,拷贝长度’表示待拷贝长度; 源地址’的初始值为源地址,目的地址’的初始值为目的地址,拷贝长度’的初始值为拷贝长度;有效位表示是否存在关联内存拷贝请求,有效位为1表示该内存拷贝请求与其之前的内存拷贝请求没有关联关系,可以由内存拷贝单元执行,有效位为0表示该内存拷贝请求与其之前的内存拷贝请求存在关联关系,目前还不能由内存拷贝单元单独执行,而由内存拷贝单元合并执行(与之前存在关联关系的内存拷贝请求合并执行);关联标识位用于存储关联内存拷贝请求的编号;页拷贝状态表中每一项页拷贝记录的内容域包括源页起始地址、目的页起始地址和拷贝长度信息。
请求队列每一项内存拷贝请求都会自动形成一个索引号(图中的1、2、3、4),而关联标识位则包含所有请求队列中项目的索引号,如果当前内存拷贝请求关联标识位为1,则代表与索引号为1的内存拷贝请求为当前内存拷贝请求的关联内存拷贝请求。拷贝控制单元从请求队列获取内存拷贝请求,在当前内存拷贝请求在请求队列中不存在相关关系的关联内存拷贝请求时,拷贝控制单元以页为单位执行当前内存拷贝请求;在当前内存拷贝请求存在相关关系的关联内存拷贝请求时,拷贝控制单元在以页为单位执行当前内存拷贝请求,同时在执行当前内存拷贝请求时还根据页拷贝状态表中页拷贝将已经读取的源数据也一并拷贝到关联内存拷贝请求对应的目的数据区域中。拷贝控制单元是内存拷贝单元中的核心部件,拷贝控制单元负责控制拷贝模块中的其它子部件,并负责与高速缓存与快表进行交互。请求队列记录内核中各个程序发出的所有待处理的内存拷贝请求。拷贝控制单元根据虚拟存储器的页大小,拷贝控制单元将内存拷贝请求分解为多个页拷贝。
拷贝控制单元根据标志位V决定内存拷贝请求是被独立执行还是被合并执行,有效位V页表示对应的内存拷贝请求目前是否可以执行。
A)本实施例对于V=1(独立执行)的内存拷贝请求的基本执行过程如下:
A1)当内存拷贝请求与请求队列中前面的普通内存拷贝请求不存在数据相关,并且请求队列存在空闲项,该内存拷贝请求发射进入内存拷贝单元的请求队列。源地址’、目的地址’与长度’的初始值分别等于指令中的源地址、目的地址、拷贝长度。由于新进入请求队列的内存拷贝请求与其他内存拷贝请求之间不存在数据相关,故有效位V设为1。
A2)拷贝控制单元从请求队列中选择V=1的某个内存拷贝请求项进行服务。拷贝控制单元将当前内存拷贝请求根据虚拟存储器的页大小分解为多个页拷贝, 将待执行页拷贝的源页起始地址、目的页起始地址和拷贝长度信息建立页拷贝记录。拷贝控制单元将根据拷贝请求中的源地址、目的地址访问快表(TLB),获得其对应的物理地址,并记录在页拷贝状态表中。
A3)更新该拷贝请求在请求队列中的源地址’、目的地址’与长度’,源地址’=源地址’- 拷贝长度,目的地址’=目的地址’- 拷贝长度,拷贝长度’=拷贝长度’- 拷贝长度。
A4)根据页拷贝状态表,访问高速缓存或外部存储器,以页为单位进行内存数据拷贝。
A5)当本次页拷贝完成以后,如果相应内存拷贝还未完成,跳转步骤2),否则跳转步骤6)。
A6)发出信号,表明本次内存拷贝完成。
在上述步骤A1)~A6)拷贝单元执行过程中,凡是有效位V为1的内存拷贝请求之间由于都不存在数据相关,因此这些内存拷贝请求之间可以乱序执行甚至并发执行,从而可以提高内存拷贝操作的效率。
如图10所示,本实施例对V=0(合并执行)的应用程序通信的内存拷贝操作实现加速的执行步骤如下:
B1)内存拷贝请求A(V=1,待独立执行的内存拷贝请求)首先进入拷贝请求队列,并首先得到服务。
B2)在内存拷贝请求A得到服务的过程中(已完成部分拷贝,如箭头a所示),内存拷贝请求B(V=0,待合并执行的内存拷贝请求)进入请求队列。
B3)拷贝控制单元在内存拷贝请求B进入请求队列时将内存拷贝请求B对应的源地址、拷贝长度与队列中其它拷贝请求的目的地址、拷贝长度分别进行比较,如果相同,则表明这两个操作之间存在数据相关关系,有效位V设为0继续执行步骤4);(否则有效位设为1,则按照步骤A1)~A6)所示的一般过程执行内存拷贝请求A与内存拷贝请求B。
B4)对内存拷贝请求B所在请求队列位置中的各项进行修改:
源地址不变;
目的地址不变;
拷贝长度=拷贝长度-内存拷贝请求A的拷贝长度’;
源地址’=内存拷贝请求A的源地址’;
目的地址’=内存拷贝请求B的目的地址+内存拷贝请求A的拷贝长度-内存拷贝请求A的拷贝长度’;
拷贝长度’=内存拷贝请求A的拷贝长度’;
内存拷贝请求A关联标识中对应内存拷贝请求B的项设为有效,表明内存拷贝请求A的执行过程中,可以附带执行内存拷贝请求B的部分内容。
B5)拷贝控制单元在执行内存拷贝请求A的后续页拷贝时,每次从缓存读取一个拷贝单位数据后,将同时写入缓存数据区域与目的数据区域中,如图中箭头b所示。
B6)在内存拷贝请求A完成以后,对内存拷贝请求B所在请求队列位置中的拷贝长度’、目的地址’和源地址’进行修改:
源地址’=内存拷贝请求B的源地址;
目的地址’=内存拷贝请求B的目的地址;
拷贝长度’=内存拷贝请求B的拷贝长度;
同时,将内存拷贝请求B的有效位V设为1,表明内存拷贝请求B可以有内存拷贝单元独立执行,其具体拷贝行为如图中箭头c所示。
B7)内存拷贝请求B执行完成以后,发出信号表明内存拷贝请求B对应的内存拷贝结束。
应用程序之间的通信一般由操作系统采用两次内存拷贝操作来实现。操作系统首先采用一个内存拷贝请求A将所要传输的数据从应用程序的源数据区域逐一拷贝到内核空间的缓存区域中,然后第二个内存拷贝请求B再将共内核空间缓存区域中的数据拷贝到另一应用程序的目的数据区域,内存拷贝请求A与内存拷贝请求B之间的这种关系为数据相关。在现有技术的内存拷贝过程中,只有当内存拷贝请求A完全完成以后,内存拷贝请求B才能进行,本实施例提出的这种内存拷贝加速方法将应用程序通信中的两次内存拷贝进行有效合并,内存拷贝单元将整个拷贝操作划分为多个页拷贝,如果内存拷贝请求A中的某个页完成,内存拷贝请求B即可开始拷贝,这种操作的细粒度特征使得内存拷贝的并行性得到有效提高,进而提高了系统的性能,减少了内核对内存数据的读写。当内存拷贝请求A与内存拷贝请求B合并以后,如果源数据区域中还有部分数据没有发送到缓存数据区域中,这部分数据将同时发送到缓存数据区域与目的数据区域中,避免了从缓存数据区域中读取上述数据,本实施例的B1)~B7)这种加速方法也可以用于加速其它环境下具有数据相关关系的内存拷贝操作。
如图11所示,本实施例对V=0(合并执行)的基于进程拷贝通信的内存拷贝操作实现加速的执行步骤如下:
C1)拷贝请求Ci(V=1,待独立执行的内存拷贝请求)进入拷贝队列,拷贝控制单元检查源地址所指的数据是否可用,如果可用,则执行操作Ci;
C2)拷贝请求Cj(V=0,待合并执行的内存拷贝请求)进入拷贝队列时,拷贝控制单元将拷贝请求Cj对应的源地址、拷贝长度与队列中其它拷贝请求的源地址、拷贝长度分别进行比较,如果存在相同项,则说明队列中存在源相关的多个关联内存拷贝请求(除去Ci的C1,… ,Cm);
C3)拷贝单元在执行拷贝操作Ci的后续页拷贝时,每次从缓存读取一个拷贝单位数据后,将同时写入Ci与Cj中相应的目的地址;
C4)对操作Cj所在请求队列位置中的拷贝长度’进行修改,拷贝长度’=拷贝长度’- 操作Ci的拷贝长度’,将除去Ci的C1,… ,Cm的有效位设为1,除去Ci的C1,… ,Cm将由内存拷贝单元单独执行。
进程拷贝通信一般由多个独立的基本拷贝操作组成。操作系统通过内存拷贝操作C1,… ,Cm将父进程缓存中的数据分别拷贝到m个子进程缓存中。我们称C1,… ,Cm之间的这种关系为源相关。在现有技术的内存拷贝过程中,每次拷贝操作都是独立完成,生成m个子进程需要对父进程缓存中的数据读取m次。这种实现方式引入了一些冗余的访存操作,不仅浪费了存储器带宽,还影响了通信的性能。而本实施例中提出的这种内存拷贝加速方法将存在源相关的多次拷贝操作进行有效合并,减少了内核对内存数据的读写。当操作Ci与操作Cj合并以后,如果Ci对应的子进程缓存还要从父进程缓存中接收数据,这部分数据会同时被Cj对应的子进程缓存接收,避免了同一数据被内核重复读取多次的现象。本实施例中C1)~ C4)这种加速方法也可以用于加速其它环境下具有源相关关系的内存拷贝操作。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (7)
1.一种用于微处理器的内存拷贝加速方法,其特征在于其实施步骤如下:
1)预先在微处理器指令集中增加内存拷贝指令支持,在微处理器的指令执行流水线中增加专用于执行所述内存拷贝指令的内存拷贝单元;
2)译码逻辑在进行译码时如果译码的指令为内存拷贝指令,则将内存拷贝指令转换为内存拷贝请求并发送给所述内存拷贝单元;所述内存拷贝单元接收译码逻辑发送的新内存拷贝请求,通过相关检测部件检测新内存拷贝请求与内存拷贝单元内用于缓存内存拷贝请求的请求队列中其它内存拷贝请求之间的相关关系,如果存在目的地址或者源地址与新内存拷贝请求的源地址相同的关联内存拷贝请求,则判定新内存拷贝请求存在具有相关关系的关联内存拷贝请求,当所述请求队列存在空闲项时内存拷贝单元将新内存拷贝请求及其相关关系缓存至所述请求队列中;
3)所述内存拷贝单元从请求队列选择待执行的当前内存拷贝请求,与高速缓存及块表进行交互获取当前内存拷贝请求的物理地址,以页为单位执行当前内存拷贝请求;如果存在与当前内存拷贝请求具有相关关系的关联内存拷贝请求,则将关联内存拷贝请求与当前内存拷贝请求中相同的页拷贝操作合并执行。
2.根据权利要求1所述的用于微处理器的内存拷贝加速方法,其特征在于:所述步骤2)中将新内存拷贝请求及其相关关系缓存至请求队列中时,所述请求队列中内存拷贝请求的内容域包括源地址、目的地址、拷贝长度、拷贝类型、源地址’、目的地址’、拷贝长度’、有效位和关联标识位,其中源地址、目的地址、拷贝长度、拷贝类型与所述内存拷贝指令的内容相同;所述源地址’表示未完成的源内存区域的起始地址,目的地址’表示目的内存区域的起始地址,拷贝长度’表示待拷贝长度; 所述源地址’的初始值为源地址,目的地址’的初始值为目的地址,拷贝长度’的初始值为拷贝长度;所述有效位表示是否存在关联内存拷贝请求,有效位为1表示该内存拷贝请求与其之前的内存拷贝请求没有关联关系,可以由内存拷贝单元执行,有效位为0表示该内存拷贝请求与其之前的内存拷贝请求存在关联关系,目前还不能由内存拷贝单元单独执行,而由内存拷贝单元合并执行;所述关联标识位用于存储关联内存拷贝请求的编号;所述步骤3)中以页为单位执行当前内存拷贝请求时,建立用于存储当前进行的页拷贝操作的页拷贝记录的页拷贝状态表,页拷贝状态表中每一项页拷贝记录的内容域包括源页起始地址、目的页起始地址和拷贝长度信息。
3.根据权利要求2所述的用于微处理器的内存拷贝加速方法,其特征在于,所述步骤3)的详细步骤如下:
3.1)所述内存拷贝单元从请求队列选择有效位为1的当前内存拷贝请求,将当前内存拷贝请求根据虚拟存储器的页大小分解为多个页拷贝;
3.2)所述内存拷贝单元与高速缓存及快表进行交互获取当前内存拷贝请求待执行页拷贝的物理地址;将待执行页拷贝的源页起始地址、目的页起始地址和拷贝长度信息建立页拷贝记录;
3.3)更新当前内存拷贝请求在请求队列中的源地址’、目的地址’与长度’,使源地址’等于源地址’减去待执行页拷贝的长度、目的地址’ 等于目的地址’减去待执行页拷贝的长度,长度’等于拷贝长度’减去待执行页拷贝的长度;
3.4)根据所述页拷贝状态表中记录的当前内存拷贝请求的待执行页拷贝访问高速缓存或外部存储器,以页为单位执行当前内存拷贝请求的页拷贝;同时所述内存拷贝单元扫描请求队列,如果请求队列中存在与当前内存拷贝请求存在相关关系的关联内存拷贝请求,则将关联内存拷贝请求与当前内存拷贝请求中相同的页拷贝操作合并执行;
3.5)在待执行页拷贝执行完毕后,判断当前内存拷贝请求的所有页拷贝是否已经全部完成,如果还有页拷贝未完成则跳转执行步骤3.2),否则跳转执行下一步;
3.6)发出信号,表明本次内存拷贝请求完成,并将与本次内存拷贝请求合并执行的关联内存拷贝请求的有效位设为1。
4.根据权利要求3所述的用于微处理器的内存拷贝加速方法,其特征在于,所述步骤3.4)的详细步骤如下:
3.4.1)根据所述页拷贝状态表中记录的当前内存拷贝请求的待执行页拷贝访问高速缓存或外部存储器,以页为单位执行当前内存拷贝请求的页拷贝;同时所述内存拷贝单元扫描请求队列,判定请求队列中是否存在有效位为0且关联标识位记录的为当前内存拷贝请求的关联内存拷贝请求,如果存在则跳转执行下一步,否则直接跳转执行步骤3.5);
3.4.2)判断关联内存拷贝请求之间的关联关系,如果请求队列存在目的地址与当前内存拷贝请求的源地址相同的关联内存拷贝请求,则判定当前内存拷贝请求与其关联内存拷贝请求之间存在数据相关关系,跳转执行3.4.3);如果请求队列存在源地址与当前内存拷贝请求的源地址相同的关联内存拷贝请求,则判定当前内存拷贝请求与其关联内存拷贝请求之间存在源相关关系,跳转执行3.4.5);
3.4.3)将关联内存拷贝请求在请求队列中的各项进行修改:源地址不变;目的地址不变;拷贝长度等于拷贝长度原值减去当前内存拷贝请求的拷贝长度’;源地址’等于当前内存拷贝请求的源地址’;目的地址’等于目的地址原值加上当前内存拷贝请求的拷贝长度并减去当前内存拷贝请求的拷贝长度’;拷贝长度’等于当前内存拷贝请求的拷贝长度’;然后跳转执行下一步;
3.4.4)当前内存拷贝请求后续的页拷贝时,每次从缓存读取一个拷贝单位数据后,同时写入当前内存拷贝请求对应的缓存数据区域与关联内存拷贝请求对应的目的数据区域中;在当前内存拷贝请求的所有页拷贝完成以后,对关联内存拷贝请求所在请求队列位置中的拷贝长度’、目的地址’和源地址’进行修改:源地址’等于关联内存拷贝请求的源地址;目的地址’等于关联内存拷贝请求的目的地址;拷贝长度’等于关联内存拷贝请求的拷贝长度;同时,将关联内存拷贝请求的有效位设为1,所述关联内存拷贝请求将由内存拷贝单元单独执行;跳转执行步骤3.5);
3.4.5)当前内存拷贝请求后续的页拷贝时,每次从缓存读取一个拷贝单位数据后,将同时写入当前内存拷贝请求的目的地址以及与关联内存拷贝请求的目的地址;在当前内存拷贝请求的所有页拷贝完成以后,对关联内存拷贝请求所在请求队列位置中的拷贝长度’进行修改:拷贝长度’等于关联内存拷贝请求的拷贝长度’减去当前内存拷贝请求的拷贝长度’;将关联内存拷贝请求的有效位设为1,所述关联内存拷贝请求将由内存拷贝单元单独执行;跳转执行步骤3.5)。
5.根据权利要求3或4所述的用于微处理器的内存拷贝加速方法,其特征在于:所述执行页拷贝时,如果所述内存拷贝单元读入或写回操作行为影响到高速缓冲中数据的一致性,对高速缓冲中的数据执行失效或者更新等操作。
6.一种用于微处理器的内存拷贝加速装置,其特征在于包括:
内存拷贝单元,专用于执行内存拷贝请求,设于微处理器的指令执行流水线中;
相关检测部件,用于检测新内存拷贝请求与队列中其它内存拷贝请求之间的相关关系;
微处理器指令集中设有内存拷贝指令支持,译码逻辑在进行译码时如果译码的指令为内存拷贝指令,则将内存拷贝指令转换为内存拷贝请求并发送给所述内存拷贝单元;所述内存拷贝单元接收译码逻辑发送的新内存拷贝请求,通过所述相关检测部件检测新内存拷贝请求与内存拷贝单元内用于缓存内存拷贝请求的请求队列中其它内存拷贝请求之间的相关关系,当所述请求队列存在空闲项时内存拷贝单元将新内存拷贝请求及其相关关系缓存至所述请求队列中;所述相关检测部件检测新内存拷贝请求与队列中其它内存拷贝请求之间的相关关系时,如果存在目的地址或者源地址与新内存拷贝请求的源地址相同的关联内存拷贝请求,则判定新内存拷贝请求存在具有相关关系的关联内存拷贝请求,当所述请求队列存在空闲项时内存拷贝单元将新内存拷贝请求及其相关关系缓存至所述请求队列中;所述内存拷贝单元从请求队列选择待执行的当前内存拷贝请求,与高速缓存及快表进行交互获取当前内存拷贝请求的物理地址,以页为单位执行当前内存拷贝请求;如果存在与当前内存拷贝请求具有相关关系的关联内存拷贝请求,则所述内存拷贝单元将关联内存拷贝请求与当前内存拷贝请求中相同的页拷贝操作合并执行。
7.根据权利要求6所述的用于微处理器的内存拷贝加速装置,其特征在于,所述内存拷贝单元包含:
请求队列,用于缓存内存拷贝请求及其相关关系;
页拷贝状态表,用于记录当前进行的页拷贝操作建立对应的页拷贝记录;
拷贝控制单元,用于控制请求队列和页拷贝状态表、与高速缓存及快表进行交互获取当前内存拷贝请求的物理地址、执行页拷贝操作;
所述请求队列中内存拷贝请求的内容域包括源地址、目的地址、拷贝长度、拷贝类型、源地址’、目的地址’、拷贝长度’、有效位和关联标识位,其中源地址、目的地址、拷贝长度、拷贝类型与所述内存拷贝指令的内容相同;所述源地址’表示未完成的源内存区域的起始地址,目的地址’表示目的内存区域的起始地址,拷贝长度’表示待拷贝长度; 所述源地址’的初始值为源地址,目的地址’的初始值为目的地址,拷贝长度’的初始值为拷贝长度;所述有效位表示是否存在关联内存拷贝请求,有效位为1表示该内存拷贝请求与其之前的内存拷贝请求没有关联关系,可以由内存拷贝单元单独执行,有效位为0表示该内存拷贝请求与其之前的内存拷贝请求存在关联关系,目前还不能由内存拷贝单元单独执行,而由内存拷贝单元合并执行;所述关联标识位用于存储关联内存拷贝请求的编号;所述页拷贝状态表中每一项页拷贝记录的内容域包括源页起始地址、目的页起始地址和拷贝长度信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210493320.6A CN102968395B (zh) | 2012-11-28 | 2012-11-28 | 用于微处理器的内存拷贝加速方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210493320.6A CN102968395B (zh) | 2012-11-28 | 2012-11-28 | 用于微处理器的内存拷贝加速方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102968395A true CN102968395A (zh) | 2013-03-13 |
CN102968395B CN102968395B (zh) | 2015-04-15 |
Family
ID=47798543
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210493320.6A Active CN102968395B (zh) | 2012-11-28 | 2012-11-28 | 用于微处理器的内存拷贝加速方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102968395B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103645996A (zh) * | 2013-12-09 | 2014-03-19 | 龙芯中科技术有限公司 | 内存拷贝的方法、装置和片上系统 |
CN106502810A (zh) * | 2016-09-09 | 2017-03-15 | 华为技术有限公司 | 一种高速缓冲存储器的故障检测方法及装置 |
CN110865953A (zh) * | 2019-10-08 | 2020-03-06 | 华南师范大学 | 异步拷贝方法和装置 |
CN111177054A (zh) * | 2019-12-30 | 2020-05-19 | 京信通信系统(中国)有限公司 | 数据传输方法、装置、设备及存储介质 |
CN113238869A (zh) * | 2021-05-28 | 2021-08-10 | 北京达佳互联信息技术有限公司 | 一种计算加速方法、设备和系统及存储介质 |
CN113778914A (zh) * | 2020-06-09 | 2021-12-10 | 华为技术有限公司 | 用于执行数据处理的装置、方法、和计算设备 |
CN115509608A (zh) * | 2022-11-23 | 2022-12-23 | 成都登临科技有限公司 | 指令优化方法、装置、电子设备及计算机可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5455918A (en) * | 1993-08-26 | 1995-10-03 | Electronic Arts, Inc. | Data transfer accelerating apparatus and method |
US6927783B1 (en) * | 1998-11-09 | 2005-08-09 | Broadcom Corporation | Graphics display system with anti-aliased text and graphics feature |
CN101488082A (zh) * | 2008-01-15 | 2009-07-22 | 上海海尔集成电路有限公司 | 复杂指令集微控制器的译码方法和装置 |
-
2012
- 2012-11-28 CN CN201210493320.6A patent/CN102968395B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5455918A (en) * | 1993-08-26 | 1995-10-03 | Electronic Arts, Inc. | Data transfer accelerating apparatus and method |
US6927783B1 (en) * | 1998-11-09 | 2005-08-09 | Broadcom Corporation | Graphics display system with anti-aliased text and graphics feature |
CN101488082A (zh) * | 2008-01-15 | 2009-07-22 | 上海海尔集成电路有限公司 | 复杂指令集微控制器的译码方法和装置 |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103645996A (zh) * | 2013-12-09 | 2014-03-19 | 龙芯中科技术有限公司 | 内存拷贝的方法、装置和片上系统 |
CN103645996B (zh) * | 2013-12-09 | 2016-07-06 | 龙芯中科技术有限公司 | 内存拷贝的方法、装置和片上系统 |
CN106502810A (zh) * | 2016-09-09 | 2017-03-15 | 华为技术有限公司 | 一种高速缓冲存储器的故障检测方法及装置 |
CN106502810B (zh) * | 2016-09-09 | 2019-05-24 | 华为技术有限公司 | 一种高速缓冲存储器的故障检测方法及装置 |
CN110865953A (zh) * | 2019-10-08 | 2020-03-06 | 华南师范大学 | 异步拷贝方法和装置 |
CN111177054A (zh) * | 2019-12-30 | 2020-05-19 | 京信通信系统(中国)有限公司 | 数据传输方法、装置、设备及存储介质 |
WO2021136099A1 (zh) * | 2019-12-30 | 2021-07-08 | 京信网络系统股份有限公司 | 数据传输方法、装置、设备及存储介质 |
CN113778914A (zh) * | 2020-06-09 | 2021-12-10 | 华为技术有限公司 | 用于执行数据处理的装置、方法、和计算设备 |
WO2021249029A1 (zh) * | 2020-06-09 | 2021-12-16 | 华为技术有限公司 | 用于执行数据处理的装置、方法、和计算设备 |
CN113778914B (zh) * | 2020-06-09 | 2024-06-18 | 华为技术有限公司 | 用于执行数据处理的装置、方法、和计算设备 |
CN113238869A (zh) * | 2021-05-28 | 2021-08-10 | 北京达佳互联信息技术有限公司 | 一种计算加速方法、设备和系统及存储介质 |
CN115509608A (zh) * | 2022-11-23 | 2022-12-23 | 成都登临科技有限公司 | 指令优化方法、装置、电子设备及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN102968395B (zh) | 2015-04-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102968395A (zh) | 用于微处理器的内存拷贝加速方法及装置 | |
US9921972B2 (en) | Method and apparatus for implementing a heterogeneous memory subsystem | |
CN104133780B (zh) | 一种跨页预取方法、装置及系统 | |
JP6143872B2 (ja) | 装置、方法、およびシステム | |
US20140181477A1 (en) | Compressing Execution Cycles For Divergent Execution In A Single Instruction Multiple Data (SIMD) Processor | |
CN105095116A (zh) | 缓存替换的方法、缓存控制器和处理器 | |
CN106326140B (zh) | 数据拷贝方法、直接内存访问控制器及计算机系统 | |
CN104102542A (zh) | 一种网络数据包处理方法和装置 | |
EP3654178B1 (en) | Mechanism for issuing requests to an accelerator from multiple threads | |
RU2641244C2 (ru) | Унифицированный доступ к совместно используемой и управляемой памяти | |
CN103019655A (zh) | 面向多核微处理器的内存拷贝加速方法及装置 | |
US9158702B2 (en) | Apparatus and method for implementing a scratchpad memory using priority hint | |
EP3049924A1 (en) | Method and apparatus for cache occupancy determination and instruction scheduling | |
EP3757799A1 (en) | System and method to track physical address accesses by a cpu or device | |
CN113039531B (zh) | 用于分配缓存资源的方法、系统和存储介质 | |
CN102521179A (zh) | 一种dma读操作的实现装置和方法 | |
CN101071403A (zh) | 动态更新自适应的空闲计时器 | |
CN105518631A (zh) | 内存管理方法、装置和系统、以及片上网络 | |
CN109661656A (zh) | 用于利用条件所有权请求的智能存储操作的方法和装置 | |
US20050228971A1 (en) | Buffer virtualization | |
CN101826031A (zh) | 基于Linux系统的PCM流捕获的实现方法 | |
CN106445472B (zh) | 一种字符操作加速方法、装置、芯片、处理器 | |
US20070073928A1 (en) | High-speed input/output signaling mechanism using a polling CPU and cache coherency signaling | |
WO2017052669A1 (en) | Hardware mechanism for performing atomic actions on remote processors | |
US20070195103A1 (en) | Memory region access management |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |