CN115951933A - 主机、数据处理器的操作方法以及内核程序的编译方法 - Google Patents
主机、数据处理器的操作方法以及内核程序的编译方法 Download PDFInfo
- Publication number
- CN115951933A CN115951933A CN202211676697.5A CN202211676697A CN115951933A CN 115951933 A CN115951933 A CN 115951933A CN 202211676697 A CN202211676697 A CN 202211676697A CN 115951933 A CN115951933 A CN 115951933A
- Authority
- CN
- China
- Prior art keywords
- instruction
- data processor
- kernel program
- program
- code
- 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.)
- Pending
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
本公开提供了用于主机、数据处理器的操作方法以及内核程序的编译方法。该主机的操作方法包括提取第一内核程序在主机的内存空间存放的第一指令地址;响应于在数据处理器上调用第一内核程序,将第一指令地址发送给数据处理器;以及响应于数据处理器执行第一内核程序从而基于第一指令地址发出对第一内核程序的至少部分指令代码的读取请求,将第一内核程序的至少部分指令代码发送给数据处理器的片内存储器。该主机的操作方法可以提高指令代码的读取效率和执行效率。
Description
技术领域
本公开的实施例涉及主机、数据处理器的操作方法以及内核程序的编译方法。
背景技术
以往简单的小规模芯片(例如图像处理器(GPU))编程自由度低,内部代码存储空间小,代码更新难度大,往往也会限定芯片功能单一,适应性弱的缺点。随着芯片规模扩大,复杂度变高。可自由编程的芯片越来越具有优势,可以提高芯片的通用性,重复利用性,多功能性。而芯片读取指令的速度和响应能力,也成为影响芯片整体性能的一个重要因素。
发明内容
本公开的至少一实施例提供了一种主机的操作方法,包括:提取第一内核程序在主机的内存空间存放的第一指令地址;响应于在数据处理器上调用第一内核程序,将第一指令地址发送给数据处理器;以及响应于数据处理器执行第一内核程序从而基于第一指令地址发出对第一内核程序的至少部分指令代码的读取请求,将第一内核程序的至少部分指令代码发送给数据处理器的片内存储器。
例如,根据本公开的至少一实施例提供的主机的操作方法,将第一指令地址发送给数据处理器,包括:通过第一内核程序的参数接口提供第一指令地址。
例如,根据本公开的至少一实施例提供的主机的操作方法,第一指令地址包括主机为第一内核程序分配的基地址。
例如,根据本公开的至少一实施例提供的主机的操作方法,数据处理器包括多个计算单元,读取请求包括多个子读取请求,并且多个计算单元并行发出多个子读取请求,将第一内核程序的至少部分指令代码发送给数据处理器的片内存储器,包括:根据多个子读取请求,将第一内核程序的至少部分指令代码并行地提供给多个计算单元。
本公开的至少一实施例提供了一种数据处理器的操作方法,包括:从主机接收要在数据处理器上执行的第一内核程序在主机的内存空间的第一指令地址;执行第一内核程序从而基于第一指令地址向主机发送对第一内核程序的至少部分指令代码的读取请求;以及接收第一内核程序的至少部分指令代码并存储到数据处理器的片内存储器。
例如,根据本公开的至少一实施例提供的数据处理器的操作方法,从主机接收要在数据处理器上执行的第一内核程序在主机的内存空间的第一指令地址,包括:通过第一内核程序的参数接口获取第一指令地址。
例如,根据本公开的至少一实施例提供的数据处理器的操作方法,其中,第一指令地址包括主机为第一内核程序分配的基地址。
例如,根据本公开的至少一实施例提供的数据处理器的操作方法,数据处理器包括多个计算单元,读取请求包括多个子读取请求,并且多个计算单元并行发出多个子读取请求,并且多个计算单元并行处理根据多个子读取请求获取的第一内核程序的至少部分指令代码。
例如,根据本公开的至少一实施例提供的数据处理器的操作方法,还包括:在执行第一内核程序的过程中从片内存储器读取所存储的第一内核程序的至少部分指令代码。
本公开的至少一实施例提供了一种内核程序的编译方法,包括:接收用于第一内核程序的第一程序代码,其中,第一内核程序用于在数据处理器上执行;在第一程序代码中添加第一附加代码以得到修改后的第一程序代码,其中,第一附加代码用于基于第一内核程序在数据处理器之外的内存空间中的第一指令地址发出对第一内核程序的至少部分指令代码的读取请求,来将第一内核程序的至少部分指令代码发送到数据处理器的片内存储器中缓存;由修改后的第一程序代码获取第一内核程序的至少部分指令代码。
例如,根据本公开的至少一实施例提供的内核程序的编译方法,还包括:在第一程序代码中添加用于传送第一指令地址的代码部分。
例如,根据本公开的至少一实施例提供的内核程序的编译方法,在第一程序代码中添加用于传送第一指令地址的代码部分,包括:在第一内核程序的参数接口中添加用于传送第一指令地址的地址参数,其中,第一附加代码在运行的过程使用地址参数以获得第一指令地址。
例如,根据本公开的至少一实施例提供的内核程序的编译方法,第一指令地址包括第一内核程序在内存空间中的基地址。
例如,根据本公开的至少一实施例提供的内核程序的编译方法,数据处理器包括多个计算单元,读取请求包括多个子读取请求,并且多个计算单元并行发出多个子读取请求。
例如,根据本公开的至少一实施例提供的内核程序的编译方法,片内存储器包括数据处理器的二级缓存、一级缓存和/或寄存器。
本公开的至少一实施例提供了一种主机,包括:提取单元,被配置为提取第一内核程序在主机的内存空间存放的第一指令地址;地址发送单元,被配置为响应于在数据处理器上调用第一内核程序,将第一指令地址发送给数据处理器;以及指令代码发送单元,被配置为响应于数据处理器执行第一内核程序从而基于第一指令地址发出对第一内核程序的至少部分指令代码的读取请求,将第一内核程序的至少部分指令代码发送给数据处理器的片内存储器。
本公开的至少一实施例提供了一种数据处理器,包括:地址接收单元,被配置为从主机接收要在数据处理器上执行的第一内核程序在主机的内存空间的第一指令地址;执行单元,被配置为执行第一内核程序从而基于第一指令地址向主机发送对第一内核程序的至少部分指令代码的读取请求;以及指令代码接收单元,被配置为接收第一内核程序的至少部分指令代码并存储到数据处理器的片内存储器。
本公开的至少一实施例提供了一种内核程序的编译器,包括:接收单元,被配置为接收用于第一内核程序的第一程序代码,其中,第一内核程序用于在数据处理器上执行;添加单元,被配置为在第一程序代码中添加第一附加代码以得到修改后的第一程序代码,其中,第一附加代码用于基于第一内核程序在数据处理器之外的内存空间中的第一指令地址发出对第一内核程序的至少部分指令代码的读取请求,来将第一内核程序的至少部分指令代码发送到数据处理器的片内存储器中缓存;以及指令代码获取单元,被配置为由修改后的第一程序代码获取第一内核程序的至少部分指令代码。
本公开的至少一实施例提供了一种电子装置,包括:处理器;存储器,其上存储有指令,其中,指令在被处理器执行时,使得处理器执行如上所述的主机的操作方法、执行如上所述的数据处理器的操作方法或执行根据如上所述的内核程序的编译方法。
本公开的至少一实施例提供了一种计算机可读存储介质,其上存储有指令,其中,指令在被处理器执行时,使得处理器执行如上所述的主机的操作方法、执行如上所述的数据处理器的操作方法或执行根据如上所述的内核程序的编译方法。
附图说明
为了更清楚地说明本公开的实施例的技术方案,下面将对本公开的实施例的附图作简单地介绍。明显地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1示出了示例性的通用图形处理器的与数据和指令的流向相关的架构的示意图;
图2示出了示例性的指令调度器读取指令的方法的流程图;
图3示出了示例性的指令发射的时序图;
图4示出了示例性的指令分布图;
图5示出了根据本公开的至少一实施例的主机的操作方法的流程图;
图6示出了根据本公开的至少一实施例的数据处理器的操作方法的流程图;
图7示出了根据本公开的至少一实施例的一种内核程序的编译方法的流程图;
图8示出了根据本公开的至少一实施例的主机的示意图;
图9示出了根据本公开的至少一实施例的数据处理器的示意图;
图10示出了根据本公开的至少一实施例的内核程序的编译器的示意图;
图11示出了根据本公开的至少一实施例的与数据和指令的流向相关的架构的示意图;
图12示出了根据本公开的至少一实施例的指令发射的时序图;
图13示出了根据本公开的至少一实施例的指令分布图;
图14示出了根据本公开的至少一实施例的电子装置的示意;
图15示出了根据本公开至少一实施例的非瞬时可读存储介质的示意图。
具体实施方式
现在将详细参考本公开的具体实施例,在附图中例示了本公开的示例。尽管将结合具体实施例描述本公开,但将理解,不是想要将本公开限于描述的实施例。相反,想要覆盖由所附权利要求限定的在本公开的精神和范围内包括的变更、修改和等价物。应注意,本文描述的方法操作都可以由任何功能块或功能布置来实现,且任何功能块或功能布置可被实现为物理实体或逻辑实体、或者两者的组合。
为了使本领域技术人员更好地理解本公开,下面结合附图和具体实施方式对本公开作进一步详细说明。
注意,接下来要介绍的示例仅是具体的示例,而不作为限制本公开的实施例必须为示出和描述的具体的外形、硬件、连接关系、操作、数值、条件、数据、顺序等等。本领域技术人员可以通过阅读本说明书来运用本公开的构思来构造本说明书中未提到的更多实施例。
本公开中使用的术语是考虑到关于本公开的功能而在本领域中当前广泛使用的那些通用术语,但是这些术语可以根据本领域普通技术人员的意图、先例或本领域新技术而变化。此外,特定术语可以由申请人选择,并且在这种情况下,其详细含义将在本公开的详细描述中描述。因此,说明书中使用的术语不应理解为简单的名称,而是基于术语的含义和本公开的总体描述。
本公开中使用了流程图来说明根据本申请的实施例的系统所执行的操作。应当理解的是,前面或下面操作不一定按照顺序来精确地执行。相反,根据需要,可以按照倒序或同时处理各种步骤。同时,也可以将其他操作添加到这些过程中,或从这些过程移除某一步或数步操作。
示例性的指令读取技术是将编译好的二进制机器代码先存放在外部存储单元,例如DDR内存,然后再通过主动或者被动的方式把指令读取到芯片内部(也称为片内)执行。芯片可以是任何类型的数据处理器。示例性的数据处理器为GPU,例如通用图形处理器(GPGPU)。
通用图形处理器(GPGPU)可以实现并行计算,在并行计算中,计算任务一般通过多个线程执行。这些线程在通用图形处理器(或称为并行计算处理器)中执行前,会在线程块调度模块(或称为指令调度器110,例如图1所示的指令调度器)中被划分成多个线程块,然后经由线程块分发模块,将多个线程块分发到各个计算单元(例如,流多处理器)。一个线程块中的所有线程必须要分配到同一个计算单元上执行。同时,线程块会被拆分成最小执行线程束(或简称线程束),每个线程束包含了固定数量(或小于这个固定数量)的线程,例如,32个线程。多个线程块可以在同一个计算单元中执行,或者在不同计算单元中执行。在每个计算单元中,线程束调度/分发模块对线程束进行调度、分配,以便该计算单元的多个计算核心(例如,流处理器)运行线程束。每个计算核心包括算术逻辑单元、浮点计算单元等。根据计算单元中计算核心的个数,一个线程块中的多个线程束可以同时执行或分时执行。每个线程束中的多个线程会执行相同的指令。例如,指令的读取、译码、发射都在线程束调度/分发模块中完成。内存执行指令会被发射到计算单元中的共享缓存(例如共享L1缓存)或进一步发射到全局缓存中以进行读写操作等。
在异构计算体系中,CPU作为主机(host)而GPGPU作为设备(device),二者进行彼此交互,CPU对GPGPU进行任务调度以完成计算任务。例如,GPGPU进行并行计算时,中央处理器(CPU)可以将数据拆分为许多块,每一块交给GPGPU中的一个流来处理,或者也可以理解为,中央处理器将计算任务拆分成多个子任务,每个子任务由GPGPU中的计算单元的一个流来处理。例如,每一个流包含了三个步骤:1)将属于该流的数据从CPU一侧的内存转移到GPU一侧的内存;2)GPU进行运算并将结果保存在GPU一侧的内存;3)将该流的计算结果数据从GPU一侧内存拷贝到CPU一侧的内存。
图1示出了一种示例性的通用图形处理器的与数据和指令的流向相关的架构100的示意图。
参见图1,架构100包括指令调度器110、指令调度器缓存120、数据一级缓存130、芯片内部二级缓存140以及芯片外部存储单元(也成片外存储单元)150。其中,指令调度器110、指令调度器缓存120、数据一级缓存130、芯片内部二级缓存140位于例如GPU芯片的数据处理器的内部,外部存储单元150可以位于数据处理器的外部。
指令调度器110是数据处理器执行程序的控制器。指令调度器110会将二进制机器代码翻译成硬件能识别的运算、控制、或数据读取等操作。指令调度器110会按照事先编写好的程序逐条执行。然而,实际上这些可执行的机器码源头并不在芯片内部,而是需要从例如芯片外部存储单元(如外部存储器)中逐条取入,然后再执行。
为了避免指令调度器110空闲时间过长,数据处理器在指令调度器110和芯片内部二级缓存140之间加入了指令调度器的缓存空间,即指令调度器缓存120,用来预取下面的指令和保存已经取过的指令,这样可以使指令调度器110下次再使用以前的指令的时候可以减少再次从外部读取指令的开销。同样地,为了避免指令调度器110空闲时间过长,数据处理器在指令调度器110和芯片内部二级缓存(本文也称为二级缓存)140之间加入了数据的缓存空间,即数据一级缓存130,用来预取执行下面的指令所需的数据和保存已经执行取过的指令所生成的数据等,这样可以使指令调度器110下次再使用以前的数据的时候可以减少再次从外部读取数据的开销。
因此,参见图1,取指令的数据通路为虚线框内的部分。取指令的流程大致如下面的图2所示。
图2示出了示例性的指令调度器读取指令的方法200的流程图。
参见图2,指令调度器读取指令的方法200包括步骤S210至步骤S240。指令调度器读取指令的方法200由硬件控制,主动触发取指令动作。下面结合图1来描述步骤S210至步骤S240。
在步骤S210中,指令调度器110读取指令。
由于该指令需要指令调度器110从指令调度器缓存120中读取。因此,在步骤S220中,判断指令调度器缓存120中是否存在该指令。如果在指令调度器缓存120中存在该指令,便会立即返回给指令调度器,即可以将该指令从指令调度器缓存120读取到指令调度器。如果在指令调度器缓存120中没有该指令,则该方法200前进到步骤S230。
由于在指令调度器缓存120中没有该指令,因此需要进一步从芯片内部二级缓存140获取该指令。因此,在步骤S230中,向芯片内部二级缓存140发出数据请求,以获取该指令。如果在芯片内部二级缓存140中存在该指令,便会立即返回给指令调度器缓存120,即可以将该指令从芯片内部二级缓存140读取到指令调度器缓存120。如果在芯片内部二级缓存140中仍然没有该指令,则该方法200前进到步骤S240。
由于在芯片内部二级缓存140中仍然没有该指令,因此需要进一步从片外存储单元获取该指令。因此,在步骤S240中,到片外存储单元去读取该指令。
在上述示例性的数据处理器指令读取技术中,在指令调度器缓存120中使用了硬件预取的方式,即在取当前指令的时候,会多读取一定量(例如64比特)的后面的指令,为下一条指令的读取做准备。如此,可以在一定程度上减少指令调度器的空闲时间。然而,在这种情况下,有两个原因影响到了数据处理器读取指令的效率:一是在数据处理所需的数据吞吐量很大的情况下,读取指令的速度降低;二是内部的运算执行单元速度越来越快,内部指令的读取速度渐渐不能满足快速执行的要求。导致这两个原因的主要因素是如果所取的指令在二级缓存中不存在,进而去访问片外存储单元的时间会非常长,导致额外很多的开销,称为惩罚性开销。
因此,这两个因素直接影响到了读取指令速度,进而影响到了整个数据处理器的运行效率,尤其是在例如AI方面低精度的小矩阵的计算方面。如果某些应用本身计算时间很短,则由于取指令时发生缓存不命中(miss)所带来的惩罚性开销会非常大。例如,有些应用的指令读取惩罚性开销会占整体时间的一半,直接导致效率降到例如50%以下。
下面结合图3和图4描述上述示例性的指令调度器读取指令的方法的效果。图3示出了示例性的指令发射的时序图。图4示出了示例性的指令分布图。
在图3所示的指令发射的时序图和图4所示的指令分布图中,空白部分即为指令调度器的空闲时间。从图3和图4可以看出,空白部分的占比较大,指令发射比较稀疏,调度器有很长时间的空闲情况,导致读取指令的效率低下。
本公开的至少一实施例针对上述的数据处理器指令读取开销大的缺点,为了进一步提高指令代码的读取效率。在不改变现有硬件架构和硬件模块功能的基础上,从数据处理器可编程的执行程序方向入手,加入一些功能性代码,减少缓存不命中的概率。进而降低片外读取的惩罚性开销,提升指令读取效率,减少指令调度器空闲情况,进而提高整体执行性能指标。
本公开的至少一实施例提供了一种主机的操作方法、数据处理器的操作方法、内核(Kernel)程序(或内核函数)的编译方法、主机、数据处理器、内核程序的编译器、电子装置以及存储介质,用于提高指令代码的读取效率以及执行效率。
以下参照附图,对本公开的至少一实施例的主机的操作方法、数据处理器的操作方法、内核程序的编译方法、主机、数据处理器、内核程序的编译器、电子装置以及存储介质进行详细介绍。
在本文中,数据处理器例如可以体现为协处理器。最常见的协处理器有图形处理器(GPU)、张量处理器(TPU)、AI加速器等,GPU主要处理图形显示相关的计算,但是后来发展到利用GPU处理通用计算任务,从而出现了通用图形处理器(GPGPU)。在GPGPU里面,大量的通用计算任务同时进行处理,通常的方式是利用大量的硬件资源来处理这些任务,从而可以协助主机(例如CPU)处理任务。
首先,以下介绍本公开的实施例的一种主机的操作方法,该主机的操作方法的可以应用于如下文进一步描述的主机、电子装置、其他合适的软件或硬件、或硬件和软件的结合。
图5示出了根据本公开的至少一实施例的主机的操作方法500的流程图。该主机的操作方法可以包括步骤S510至S530。
在步骤S510中,提取第一内核程序在主机的内存空间存放的第一指令地址。
在步骤S520中,响应于在数据处理器上调用第一内核程序,将第一指令地址发送给数据处理器。
在步骤S530中,响应于数据处理器执行第一内核程序从而基于第一指令地址发出对第一内核程序的至少部分指令代码的读取请求,将第一内核程序的至少部分指令代码发送给数据处理器的片内存储器。
如此,根据本公开的至少一实施例的主机的操作方法,可以通过向执行内核程序的数据处理器提供内核程序在主机的内存空间存放的指令地址,来促进内核程序将自己的程序代码(例如可执行代码)预先装载到数据处理器的片内存储器中,进而减少数据处理器读取指令的时候由于例如在二级缓存中不命中而需要从片外存储单元中的读取该指令所带来的惩罚性开销,从而提高指令代码的读取效率以及执行效率。
下面描述根据本公开的至少一实施例的主机的操作方法的附加方面。
在一些实施例中,根据本公开的至少一实施例的主机的操作方法,将第一指令地址发送给数据处理器,可以包括:通过第一内核程序的参数接口提供第一指令地址。如此,根据本公开的至少一实施例的主机的操作方法可以通过参数接口来提供第一指令地址。例如,可以在第一内核程序的参数接口上添加第一指令地址来提供第一指令地址。
在一些实施例中,根据本公开的至少一实施例的主机的操作方法,第一指令地址可以包括主机为第一内核程序分配的基地址。如此,根据本公开的至少一实施例的主机的操作方法可以促进数据处理器通过基地址和可选地偏移量来获得第一内核程序的读取地址,进而可以基于该读取地址来从主机获取第一内核程序。
在一些实施例中,根据本公开的至少一实施例的主机的操作方法,数据处理器可以包括多个计算单元,读取请求可以包括多个子读取请求,并且多个计算单元可以并行发出多个子读取请求,将第一内核程序的至少部分指令代码发送给数据处理器的片内存储器,可以包括:根据多个子读取请求,将第一内核程序的至少部分指令代码并行地提供给多个计算单元。例如,数据处理器可以是GPGPU,因而可以具有同时对大量的通用计算任务进行并行处理的计算单元,这些计算单元可以基于第一内核程序的各个部分的地址,或者基于第一内核程序的基地址和第一内核程序的各个部分的对应的偏移量,来并行地获取内核程序的各个部分的读取地址,进而可以基于这些读取地址并行地向主机发出多个子读取请求,进而主机可以基于这些子读取请求并行地将第一内核程序的至少部分指令代码中相应的指令代码发送到相应的计算单元。如此,根据本公开的至少一实施例的主机的操作方法,可以促进数据处理器并行地获取第一内核程序的指令代码,提高了数据处理器获取第一内核程序的指令代码的效率。
以下介绍本公开的实施例的一种数据处理器的操作方法,该数据处理器的操作方法的可以应用于如下文进一步描述的数据处理器、电子装置、其他合适的软件或硬件、或硬件和软件的结合。
图6示出了根据本公开的至少一实施例的数据处理器的操作方法600的流程图。该数据处理器的操作方法可以包括步骤S610至S630。
在步骤S610中,从主机接收要在数据处理器上执行的第一内核程序在主机的内存空间的第一指令地址。
在步骤S620中,执行第一内核程序从而基于第一指令地址向主机发送对第一内核程序的至少部分指令代码的读取请求。
在步骤S630中,接收第一内核程序的至少部分指令代码并存储到数据处理器的片内存储器。
如此,根据本公开的至少一实施例的数据处理器的操作方法,可以通过从主机接收的内核程序在主机的内存空间存放的指令地址,来促进内核程序将自己的程序代码(例如可执行代码)预先装载到数据处理器的片内存储器中,进而减少数据处理器读取指令的时候由于例如在二级缓存中不命中而需要从片外存储单元中的读取该指令所带来的惩罚性开销,从而提高指令代码的读取效率和执行效率。
下面描述根据本公开的至少一实施例的数据处理器的操作方法的附加方面。
在一些实施例中,根据本公开的至少一实施例的数据处理器的操作方法,从主机接收要在数据处理器上执行的第一内核程序在主机的内存空间的第一指令地址,可以包括:通过第一内核程序的参数接口获取第一指令地址。如此,根据本公开的至少一实施例的数据处理器的操作方法可以通过参数接口来获取第一指令地址。例如,可以通过在第一内核程序的参数接口上添加第一指令地址来获取第一指令地址。
在一些实施例中,根据本公开的至少一实施例的数据处理器的操作方法,第一指令地址可以包括主机为第一内核程序分配的基地址。如此,根据本公开的至少一实施例的数据处理器的操作方法可以促进数据处理器通过基地址和可选地偏移量来获得第一内核程序的读取地址,进而可以基于该读取地址来从主机获取第一内核程序。
在一些实施例中,根据本公开的至少一实施例的数据处理器的操作方法,数据处理器可以包括多个计算单元,读取请求可以包括多个子读取请求,并且多个计算单元可以并行发出多个子读取请求,并且多个计算单元可以并行处理根据多个子读取请求获取的第一内核程序的至少部分指令代码。例如,数据处理器可以是GPGPU,因而可以具有同时对大量的通用计算任务进行并行处理的计算单元,这些计算单元可以基于第一内核程序的各个部分的地址,或者基于第一内核程序的基地址和第一内核程序的各个部分的对应的偏移量,来并行地获取内核程序的各个部分的读取地址,进而可以基于这些读取地址并行地向主机发出多个子读取请求,进而主机可以基于这些子读取请求例如并行地将第一内核程序的至少部分指令代码中相应的指令代码发送到相应的计算单元,进而计算单元可以并行地处理第一内核程序的至少部分指令代码中相应的指令代码。如此,根据本公开的至少一实施例的主机的操作方法,可以促进数据处理器并行地获取以及处理第一内核程序的指令代码,提高了数据处理器获取以及执行第一内核程序的指令代码的效率。
在一些实施例中,根据本公开的至少一实施例的数据处理器的操作方法,还包括:在执行第一内核程序的过程中从片内存储器读取所存储的第一内核程序的至少部分指令代码。如此,根据本公开的至少一实施例的数据处理器的操作方法可以从片内存储器读取第一内核程序的至少部分指令代码,从而避免了该至少部分指令代码从片外存储空间去获取,降低了获取该部分指令代码的惩罚性开销,提高了指令代码获取以及指令代码执行的效率。
以下介绍本公开的实施例的一种内核程序的编译方法,该一种内核程序的编译方法的可以应用于如下文进一步描述的内核程序的编译器、电子装置、其他合适的软件或硬件、或硬件和软件的结合。
图7示出了根据本公开的至少一实施例的一种内核程序的编译方法700的流程图,该编译方法例如通过内核程序的编译器(也称为编译器)实现。该数据处理器的操作方法可以包括步骤S710至S730。
在步骤S710中,接收用于第一内核程序的第一程序代码,其中,第一内核程序用于在数据处理器上执行。
在步骤S720中,在第一程序代码中添加第一附加代码以得到修改后的第一程序代码,其中,第一附加代码用于基于第一内核程序在数据处理器之外的内存空间中的第一指令地址发出对第一内核程序的至少部分指令代码的读取请求,来将第一内核程序的至少部分指令代码发送到数据处理器的片内存储器中缓存。
在步骤S730中,由修改后的第一程序代码获取第一内核程序的至少部分指令代码。
如此,根据本公开的至少一实施例的内核程序的编译方法可以通过对用于第一内核程序的第一程序代码的修改,来促进内核程序在执行时将自己的程序代码(例如可执行代码)预先装载到数据处理器的片内存储器中,进而减少数据处理器读取指令的时候由于例如在二级缓存中不命中而需要从片外存储单元中的读取该指令所带来的惩罚性开销,从而提高指令代码的读取效率和执行效率。
例如,第一附加代码加入在第一内核程序中开始被执行的部分,这样有助于更早地实现指令的自我读取,进一步提高指令代码的读取效率和执行效率。本公开的实施例对于第一附加代码的具体实现方式不做限制。
下面描述根据本公开的至少一实施例的内核程序的编译方法的附加方面。
在一些实施例中,根据本公开的至少一实施例的内核程序的编译方法,还可以包括:在第一程序代码中添加用于传送第一指令地址的代码部分。如此,根据本公开的至少一实施例的内核程序的编译方法可以促进内核程序获取自己的程序代码在数据处理器之外的内存空间中的地址。
在一些实施例中,根据本公开的至少一实施例的内核程序的编译方法,在第一程序代码中添加用于传送第一指令地址的代码部分,可以包括:在第一内核程序的参数接口中添加用于传送第一指令地址的地址参数,其中,第一附加代码在运行的过程使用地址参数以获得第一指令地址。如此,根据本公开的至少一实施例的内核程序的编译方法可以通过在参数接口添加地址参数的方式获取第一指令地址。例如,第一内核程序的参数接口还包括其他参数,这些参数通常用于传输数据,例如用于计算的张量数据的尺度信息等,例如,进行神经网络计算的输入特征图的参数和卷积核的参数等,输入特征图的参考参数包括高度、宽度、输入通道等,卷积核的参数包括高度、宽度、数量等。
在一些实施例中,根据本公开的至少一实施例的内核程序的编译方法,第一指令地址可以包括第一内核程序在内存空间中的基地址。如此,根据本公开的至少一实施例的内核程序的编译方法可以促进通过基地址和可选地偏移量来获得第一内核程序的读取地址,进而可以基于该读取地址来获取第一内核程序。
在一些实施例中,根据本公开的至少一实施例的内核程序的编译方法,数据处理器可以包括多个计算单元,读取请求可以包括多个子读取请求,并且多个计算单元可以并行发出多个子读取请求。如此,根据本公开的至少一实施例的内核程序的编译方法可以促进数据处理器通过并行地方式获取内核程序的各个部分的指令代码。
在一些实施例中,根据本公开的至少一实施例的内核程序的编译方法,片内存储器可以包括数据处理器的二级缓存、一级缓存和/或寄存器。如此,根据本公开的至少一实施例的内核程序的编译方法可以促进数据处理器在执行内核程序时高速地从片内存储器中获取相应的可执行指令代码,从而提高指令代码的执行效率。
以上参见图5至图7描述的各个方面可以相互引用,而不超出本公开的范围。
与根据本公开的至少一实施例的主机的操作方法相对应,本公开还提供了一种主机。
图8示出了根据本公开的至少一实施例的主机800的示意图。如图8所示,该主机800包括提取单元810、地址发送单元820以及指令代码发送单元830。
提取单元810被配置为提取第一内核程序在主机的内存空间存放的第一指令地址。
地址发送单元820被配置为响应于在数据处理器上调用第一内核程序,将第一指令地址发送给数据处理器。
指令代码发送单元830被配置为响应于数据处理器执行第一内核程序从而基于第一指令地址发出对第一内核程序的至少部分指令代码的读取请求,将第一内核程序的至少部分指令代码发送给数据处理器的片内存储器。
如此,根据本公开的至少一实施例的主机,可以通过向执行内核程序的数据处理器提供内核程序在主机的内存空间存放的指令地址,来促进内核程序将自己的程序代码(例如可执行代码)预先装载到数据处理器的片内存储器中,进而减少数据处理器读取指令的时候由于例如在二级缓存中不命中而需要从片外存储单元中的读取该指令所带来的惩罚性开销,从而提高指令代码的读取效率和执行效率。
以上仅结合图8描述了根据本公开的至少一实施例的主机800的部分,并且主机800的其余部分可以例如对本公开的结合图5描述的主机的操作方法500的各个方面进行引用,并且根据本公开的结合图5描述的主机的操作方法500的各个方面的效果同样可以映射到本公开的结合图8描述的主机800,在此不在赘述。
与根据本公开的至少一实施例的数据处理器的操作方法相对应,本公开还提供了一种数据处理器。
图9示出了根据本公开的至少一实施例的数据处理器900的示意图。如图9所示,该数据处理器900包括地址接收单元910、执行单元920以及指令代码接收单元930。
地址接收单元910被配置为从主机接收要在数据处理器上执行的第一内核程序在主机的内存空间的第一指令地址。
执行单元920被配置为执行第一内核程序从而基于第一指令地址向主机发送对第一内核程序的至少部分指令代码的读取请求。在一些示例中,数据处理器可以是GUGPU,并且执行单元可以是计算单元。
指令代码接收单元930被配置为接收第一内核程序的至少部分指令代码并存储到数据处理器的片内存储器。
如此,根据本公开的至少一实施例的数据处理器,可以通过从主机接收的内核程序在主机的内存空间存放的指令地址,来促进内核程序将自己的程序代码(例如可执行代码)预先装载到数据处理器的片内存储器中,进而减少数据处理器读取指令的时候由于例如在二级缓存中不命中而需要从片外存储单元中的读取该指令所带来的惩罚性开销,从而提高指令代码的读取效率和执行效率。
以上仅结合图9描述了根据本公开的至少一实施例的数据处理器900的部分,并且数据处理器900的其余部分可以例如对本公开的结合图6描述的数据处理器的操作方法600的各个方面进行引用,并且根据本公开的结合图6描述的数据处理器的操作方法600的各个方面的效果同样可以映射到本公开的结合图9描述的数据处理器900,在此不在赘述。
与根据本公开的至少一实施例的内核程序的编译方法700相对应,本公开还提供了一种内核程序的编译器。
图10示出了根据本公开的至少一实施例的内核程序的编译器1000的示意图。如图10所示,该内核程序的编译器1000包括接收单元1010、添加单元1020以及指令代码获取单元1030。
接收单元1010被配置为接收用于第一内核程序的第一程序代码,其中,第一内核程序用于在数据处理器上执行。
添加单元1020被配置为在第一程序代码中添加第一附加代码以得到修改后的第一程序代码,其中,第一附加代码用于基于第一内核程序在数据处理器之外的内存空间中的第一指令地址发出对第一内核程序的至少部分指令代码的读取请求,来将第一内核程序的至少部分指令代码发送到数据处理器的片内存储器中缓存。
指令代码获取单元1030被配置为由修改后的第一程序代码获取第一内核程序的至少部分指令代码。
如此,根据本公开的至少一实施例的内核程序的编译器,可以通过对用于第一内核程序的第一程序代码的修改来促进内核程序将自己的程序代码(例如可执行代码)预先装载到数据处理器的片内存储器中,进而减少数据处理器读取指令的时候由于例如在二级缓存中不命中而需要从片外存储单元中的读取该指令所带来的惩罚性开销,从而提高指令代码的读取效率和执行效率。
在一些实施例中,该内核程序的编译器可以应用于数据处理器执行的内核程序的编译,以用于例如从源程序得到可执行代码,该编译器例如运行在主机侧。如此,该内核程序的编译器实现内核程序的修改,例如在程序员编写的内核程序的基础上,添加传递指令代码地址的参数,例如,程序员编写的内核程序为void vecAdd(float*A,float*B,float*C,int n),编译之后,自动修改为void vecAdd(float*A,float*B,float*C,int n,CodeAddr),这里添加的参数(变量)CodeAddr用于传输该内核程序在运行时在主机侧的内存中的地址,然后在内核程序中添加用于读取内核程序的后续指令代码到数据处理器的缓存中的功能性代码,该功能性代码通过上述参数CodeAddr获取该内核程序在运行时在主机侧的内存中的地址,并给予该地址发出读取请求,以这种方式实现内核程序的指令代码从数据处理器的片外存储空间到数据处理器的片内缓存的搬运,减少数据处理器在执行指令时缓存不命中的概率,进而降低因片外读取而导致的惩罚性开销,提升指令读取效率,减少指令调度器空闲情况,进而提高整体执行性能指标。
以上仅结合图10描述了根据本公开的至少一实施例的内核程序的编译器1000的部分,并且内核程序的编译器1000的其余部分可以例如对本公开的结合图7描述的内核程序的编译方法700的各个方面进行引用,并且根据本公开的结合图7描述的内核程序的编译方法700的各个方面的效果同样可以映射到本公开的结合图10描述的内核程序的编译器1000,在此不在赘述。
在一些其他方面,本公开的至少一实施例还可以提供一种处理器系统,包括如上的主机800、数据处理器900以及编译器1000。在一些实施例中,编译器1000可以通过主机800来运行或执行。如此,主机800、数据处理器900以及编译器1000的技术效果可以同样映射到该处理器系统中,在此不再赘述。
下面通过图11来描述可以利用根据本公开的至少一实施例的主机的操作方法、数据处理器的操作方法或内核程序的编译方法的示例应用场景。可以理解的是,图11所示出的应用场景仅是示例性的,而没有穷尽列举说明上述主机的操作方法、数据处理器的操作方法或内核程序的编译方法的各个方面,并且结合图11描述的各个方面与例如上文结合图5至图10描述的各个方面可以相互引用,而不超出本公开的范围。
图11示出了根据本公开的至少一实施例的与数据和指令的流向相关的架构1100的示意图。结合图11描述的架构1100可以与结合图1描述的架构100相对应,以突出二者之间的区别。
参见图11,与图1相似地,架构1100包括指令调度器1110、指令调度器缓存1120、数据一级缓存1130、芯片内部二级缓存1140以及芯片外部存储单元1150。其中,指令调度器1110、指令调度器缓存1120、数据一级缓存1130、芯片内部二级缓存1140可以分别与参见图1描述的指令调度器110、指令调度器缓存120、数据一级缓存130、芯片内部二级缓存140以及芯片外部存储单元150相同或类似,这里不再赘述。
参见图11,架构1100可以在不改变图1所示的示例性硬件架构和硬件模块功能的基础上,从数据处理器的内核程序上添加自我读取的功能来避免读取指令时去访问片外存储单元。图11的虚线部分体现了架构1100相对于架构100的改进,从而可以通过对内核程序的指令代码的主动读取,将指令代码(至少部分指令代码)保存在例如二级缓存中。示例性的实现可以包括以下步骤1至步骤3。
步骤1,在内核程序的参数接口上加入内核程序自身的二进制代码所在片外内存存放的基地址,目的可以让内核程序知道自己在内存上所处的地址空间。相比之下,图1所示的架构都是硬件自行读取指令,内核程序不感知。
步骤2,内核程序拿到自己在内存上所在的地址之后,运用例如并行读取的方式,即每个计算单元读取一部分内核程序的指令代码的方式读取,计算出每个计算单元读取的地址,即每个计算单元计算出内核程序的指令代码的对应部分的读取地址。
步骤3,用例如矢量数据读取指令并行读取到内部寄存器、二级缓存或一级缓存。这些二进制指令数据不需要保存,因为内核程序本身不需要对指令代码做任何操作,如此可以在很短的时间内将指令代码读取到二级缓存中。
下面结合图12和图13描述结合图11描述的架构1100中指令调度器读取指令的效果。图12示出了根据本公开的至少一实施例的指令发射的时序图。图13示出了根据本公开的至少一实施例的指令分布图。
在图12所示的指令发射的时序图和图13所示的指令分布图中,空白部分同样为指令调度器的空闲时间。从图12和图13可以看出,与图3和图4相比,指令调度器的空闲程度明显降低。进一步地,在数据上标尺上也可以看出指令调度器的空闲程度明显降低。例如,作为执行一模一样的内核程序的结果,示例性的指令调度器读取指令的方法是用纯硬件读取指令,执行完第一轮计算需要22248个周期(cycle)数(参见图3)。相比之下,图11描述的架构1100采用了软件协助硬件的方法读取,执行完第一轮计算只需要16512个周期数(参加图7),减少了6000个周期数左右,这对于一些总体计算时间不长的应用,尤其是AI方面低精度应用,会有20%左右的收益。
在上述结合图1描述的架构100中,在指令缓存器中使用了硬件预取的方式,就是在取当前指令的时候,会多读取后面的例如64字节,为下一条指令的读取做准备,这种被动读取指令代码的方式使得指令调度器的预取量有限,导致指令读取效率低下。相比之下,架构1100可以通过对内核程序的指令代码的主动读取,将指令代码(至少部分指令代码)保存在例如二级缓存中,不再受预取量的限制,提高了指令代码的读取效率。在上述架构1100中,内核程序自己读取自己,然而示例性架构中都是用硬件去自动读取内核程序的指令代码,然后去执行指令代码。在上述架构1100中,出于提升性能考虑,在基于功能不变的框架上,加上软件本身干预,共同配合,达到提升性能的目的。
图14示出了根据本公开的至少一实施例的电子装置1400的示意图。
如图14所示,电子装置1400包括处理器1410和存储器1420。存储器1420包括一个或多个计算机程序模块1421。一个或多个计算机程序模块1421被存储在存储器1420中并被配置为由处理器1410执行,该一个或多个计算机程序模块1421包括用于执行根据本公开的至少一实施例的主机的操作方法、数据处理器的操作方法、内核程序的编译方法及其各个附加方面中的一个或多个步骤的指令,其被处理器1410执行时,可以执行根据本公开的至少一实施例的主机的操作方法、数据处理器的操作方法、内核程序的编译方法及其各个附加方面中的一个或多个步骤。存储器1420和处理器1410可以通过总线系统和/或其他形式的连接机构(未示出)互连。例如,该总线可以是外设部件互连标准(PCI)总线或扩展工业标准结构(EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。
示例性地,处理器1410可以是中央处理单元(CPU)、数字信号处理器(DSP)或者具有数据处理能力和/或程序执行能力的其他形式的处理单元,例如现场可编程门阵列(FPGA)等;例如,中央处理单元(CPU)可以为X86或ARM架构、RISC-V架构等。处理器1410可以为通用处理器或专用处理器,可以控制电子装置1400中的其他组件以执行期望的功能。
示例性地,存储器1420可以包括一个或多个计算机程序产品的任意组合,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器、闪存等。在计算机可读存储介质上可以存储一个或多个计算机程序模块1421,处理器1410可以运行一个或多个计算机程序模块1421,以实现电子装置1400的各种功能。在计算机可读存储介质中还可以存储各种应用程序和各种数据以及应用程序使用和/或产生的各种数据等。
例如,电子装置1400还可以包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等输入装置;包括诸如液晶显示器、扬声器、振动器等输出装置;包括例如磁带、硬盘(HDD或SDD)等存储装置;例如还可以包括诸如LAN卡、调制解调器等的网络接口卡等通信装置。通信装置可以允许电子装置1400与其他设备进行无线或有线通信以交换数据,经由诸如因特网的网络执行通信处理。根据需要驱动器连接至I/O接口。可拆卸存储介质,诸如磁盘、光盘、磁光盘、半导体存储器等,根据需要安装在该驱动器上,以便于从其上读出的计算机程序根据需要被安装入存储装置。
例如,该电子装置1400还可以进一步包括外设接口(图中未示出)等。该外设接口可以为各种类型的接口,例如为USB接口、闪电(lighting)接口等。该通信装置可以通过无线通信来与网络和其他设备进行通信,该网络例如为因特网、内部网和/或诸如蜂窝电话网络之类的无线网络、无线局域网(LAN)和/或城域网(MAN)。无线通信可以使用多种通信标准、协议和技术中的任何一种,包括但不局限于全球移动通信系统(GSM)、增强型数据GSM环境(EDGE)、宽带码分多址(W-CDMA)、码分多址(CDMA)、时分多址(TDMA)、蓝牙、Wi-Fi(例如基于IEEE 802.11a、IEEE 802.11b、IEEE 802.11g和/或IEEE 802.11n标准)、基于因特网协议的语音传输(VoIP)、Wi-MAX,用于电子邮件、即时消息传递和/或短消息服务(SMS)的协议,或任何其他合适的通信协议。
该电子装置1400例如可以是片上系统(SOC)或者包括该SOC的设备,例如,可以为手机、平板电脑、笔记本电脑、电子书、游戏机、电视机、数码相框、导航仪、家用电器、通信基站、工业控制器、服务器等任何设备,也可以为任意的数据处理装置及硬件的组合,本公开的实施例对此不作限制。该电子装置1400的具体功能和技术效果可以参考上文中关于根据本公开的至少一实施例的主机的操作方法、数据处理器的操作方法、内核程序的编译方法及其各个附加方面中的描述,此处不再赘述。
图15示出了根据本公开至少一实施例的非瞬时可读存储介质1500的示意图。
如图15所示,非瞬时可读存储介质1500上存储有计算机指令1510,该计算机指令1510被处理器执行时执行如上所述的主机的操作方法、数据处理器的操作方法、内核程序的编译方法及其各个附加方面中的一个或多个步骤。
示例性地,该非瞬时可读存储介质1500可以是一个或多个计算机可读存储介质的任意组合,例如,一个计算机可读存储介质包含分别提取第一内核程序在主机的内存空间存放的第一指令地址的程序代码、用于响应于在数据处理器上调用第一内核程序,将第一指令地址发送给数据处理器的程序代码、以及用于响应于数据处理器执行第一内核程序从而基于第一指令地址发出对第一内核程序的至少部分指令代码的读取请求,将第一内核程序的至少部分指令代码发送给数据处理器的片内存储器的程序代码。
示例性地,当该程序代码由计算机读取时,计算机可以执行该计算机存储介质中存储的程序代码,执行例如根据本公开的至少一实施例的主机的操作方法、数据处理器的操作方法、内核程序的编译方法及其各个附加方面中的一个或多个步骤。
示例性地,该非瞬时可读存储介质可以包括智能电话的存储卡、平板电脑的存储部件、个人计算机的硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、闪存、以及其他的非瞬时可读存储介质或其任意组合。
在上文的详细描述中,出于解释而非限制的目的,阐述了具体细节,以便提供对本公开中描述的各个方面和实施例的透彻理解。在一些情况下,省略了对众所周知的设备、组件、电路和方法的详细描述,以免用不必要的细节来模糊本文公开的实施例的描述。本文列举本文公开的原理、方面和实施例的所有声明,以及其具体示例,旨在涵盖其结构等同物和功能等同物两者。另外,这种等同物旨在包括当前已知的等同物以及将来开发的等同物,即,开发的执行相同功能的任何元件,而不管结构如何。因此,例如,可以理解,本文的框图可以表示体现所描述的实施例的原理的说明性电路系统或其他功能单元的概念图。这样的功能和所示的功能块将被理解为是硬件实施的和/或计算机实施的。
本公开的各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
需要说明的是,在本文中,诸如第一、第二等的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且进一步包括没有明确列出的其他要素,或者是进一步包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本公开的优选实施例,并不用于限制本公开;本公开的范围由权利要求确定。
Claims (20)
1.一种主机的操作方法,包括:
提取第一内核程序在所述主机的内存空间存放的第一指令地址;
响应于在数据处理器上调用所述第一内核程序,将所述第一指令地址发送给所述数据处理器;以及
响应于所述数据处理器执行所述第一内核程序从而基于所述第一指令地址发出对所述第一内核程序的至少部分指令代码的读取请求,将所述第一内核程序的至少部分指令代码发送给所述数据处理器的片内存储器。
2.根据权利要求1所述的操作方法,其中,将所述第一指令地址发送给所述数据处理器,包括:
通过所述第一内核程序的参数接口提供所述第一指令地址。
3.根据权利要求1所述的操作方法,其中,所述第一指令地址包括所述主机为所述第一内核程序分配的基地址。
4.根据权利要求3所述的操作方法,其中,所述数据处理器包括多个计算单元,所述读取请求包括多个子读取请求,并且所述多个计算单元并行发出所述多个子读取请求,
将所述第一内核程序的至少部分指令代码发送给所述数据处理器的片内存储器,包括:
根据所述多个子读取请求,将所述第一内核程序的至少部分指令代码并行地提供给所述多个计算单元。
5.一种数据处理器的操作方法,包括:
从主机接收要在所述数据处理器上执行的第一内核程序在所述主机的内存空间的第一指令地址;
执行所述第一内核程序从而基于所述第一指令地址向所述主机发送对所述第一内核程序的至少部分指令代码的读取请求;以及
接收所述第一内核程序的至少部分指令代码并存储到所述数据处理器的片内存储器。
6.根据权利要求5所述的操作方法,其中,从所述主机接收要在所述数据处理器上执行的第一内核程序在所述主机的内存空间的第一指令地址,包括:
通过所述第一内核程序的参数接口获取所述第一指令地址。
7.根据权利要求5所述的操作方法,其中,所述第一指令地址包括所述主机为所述第一内核程序分配的基地址。
8.根据权利要求7所述的操作方法,其中,所述数据处理器包括多个计算单元,所述读取请求包括多个子读取请求,并且所述多个计算单元并行发出所述多个子读取请求,并且
所述多个计算单元并行处理根据所述多个子读取请求获取的所述第一内核程序的至少部分指令代码。
9.根据权利要求5所述的操作方法,还包括:
在执行所述第一内核程序的过程中从所述片内存储器读取所存储的所述第一内核程序的至少部分指令代码。
10.一种内核程序的编译方法,包括:
接收用于第一内核程序的第一程序代码,其中,所述第一内核程序用于在数据处理器上执行;
在所述第一程序代码中添加第一附加代码以得到修改后的第一程序代码,其中,所述第一附加代码用于基于所述第一内核程序在所述数据处理器之外的内存空间中的第一指令地址发出对所述第一内核程序的至少部分指令代码的读取请求,来将所述第一内核程序的至少部分指令代码发送到所述数据处理器的片内存储器中缓存;
由所述修改后的第一程序代码获取所述第一内核程序的至少部分指令代码。
11.根据权利要求10所述的编译方法,还包括:在所述第一程序代码中添加用于传送所述第一指令地址的代码部分。
12.根据权利要求11所述的编译方法,其中,在所述第一程序代码中添加用于传送所述第一指令地址的代码部分,包括:
在所述第一内核程序的参数接口中添加用于传送所述第一指令地址的地址参数,其中,所述第一附加代码在运行的过程使用所述地址参数以获得所述第一指令地址。
13.根据权利要求11所述的编译方法,其中,所述第一指令地址包括所述第一内核程序在所述内存空间中的基地址。
14.根据权利要求13所述的编译方法,其中,所述数据处理器包括多个计算单元,所述读取请求包括多个子读取请求,并且所述多个计算单元并行发出所述多个子读取请求。
15.根据权利要求10所述的编译方法,其中,所述片内存储器包括所述数据处理器的二级缓存、一级缓存和/或寄存器。
16.一种主机,包括:
提取单元,被配置为提取第一内核程序在所述主机的内存空间存放的第一指令地址;
地址发送单元,被配置为响应于在数据处理器上调用所述第一内核程序,将所述第一指令地址发送给所述数据处理器;以及
指令代码发送单元,被配置为响应于所述数据处理器执行所述第一内核程序从而基于所述第一指令地址发出对所述第一内核程序的至少部分指令代码的读取请求,将所述第一内核程序的至少部分指令代码发送给所述数据处理器的片内存储器。
17.一种数据处理器,包括:
地址接收单元,被配置为从主机接收要在所述数据处理器上执行的第一内核程序在所述主机的内存空间的第一指令地址;
执行单元,被配置为执行所述第一内核程序从而基于所述第一指令地址向所述主机发送对所述第一内核程序的至少部分指令代码的读取请求;以及
指令代码接收单元,被配置为接收所述第一内核程序的至少部分指令代码并存储到所述数据处理器的片内存储器。
18.一种内核程序的编译器,包括:
接收单元,被配置为接收用于第一内核程序的第一程序代码,其中,所述第一内核程序用于在数据处理器上执行;
添加单元,被配置为在所述第一程序代码中添加第一附加代码以得到修改后的第一程序代码,其中,所述第一附加代码用于基于所述第一内核程序在所述数据处理器之外的内存空间中的第一指令地址发出对所述第一内核程序的至少部分指令代码的读取请求,来将所述第一内核程序的至少部分指令代码发送到所述数据处理器的片内存储器中缓存;以及
指令代码获取单元,被配置为由所述修改后的第一程序代码获取所述第一内核程序的至少部分指令代码。
19.一种电子装置,包括:
处理器;
存储器,其上存储有指令,
其中,所述指令在被处理器执行时,使得所述处理器执行根据权利要求1-4中任一项所述的操作方法、执行根据权利要求5-9中任一项所述的操作方法或执行根据权利要求10-15中任一项所述的编译方法。
20.一种计算机可读存储介质,其上存储有指令,
其中,所述指令在被处理器执行时,使得所述处理器执行根据权利要求1-4中任一项所述的操作方法、执行根据权利要求5-9中任一项所述的操作方法或执行根据权利要求10-15中任一项所述的编译方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211676697.5A CN115951933A (zh) | 2022-12-26 | 2022-12-26 | 主机、数据处理器的操作方法以及内核程序的编译方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211676697.5A CN115951933A (zh) | 2022-12-26 | 2022-12-26 | 主机、数据处理器的操作方法以及内核程序的编译方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115951933A true CN115951933A (zh) | 2023-04-11 |
Family
ID=87281929
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211676697.5A Pending CN115951933A (zh) | 2022-12-26 | 2022-12-26 | 主机、数据处理器的操作方法以及内核程序的编译方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115951933A (zh) |
-
2022
- 2022-12-26 CN CN202211676697.5A patent/CN115951933A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10768989B2 (en) | Virtual vector processing | |
CN106991011B (zh) | 基于cpu多线程与gpu多粒度并行及协同优化的方法 | |
KR101817397B1 (ko) | 하나의 아키텍처의 코드 모듈이 다른 아키텍처의 라이브러리 모듈을 사용할 수 있게 하는 아키텍처 간 호환성 모듈 | |
US10740152B2 (en) | Technologies for dynamic acceleration of general-purpose code using binary translation targeted to hardware accelerators with runtime execution offload | |
KR20120123127A (ko) | 이종 플랫폼에서 포인터를 공유시키는 방법 및 장치 | |
US9619298B2 (en) | Scheduling computing tasks for multi-processor systems based on resource requirements | |
KR20150066526A (ko) | 이종 컴퓨팅 시스템에서 콜드 tlb 미스의 감축 | |
US20130151787A1 (en) | Mechanism for Using a GPU Controller for Preloading Caches | |
US11822958B2 (en) | Method and a device for data transmission between an internal memory of a system-on-chip and an external memory | |
CN110427337B (zh) | 基于现场可编程门阵列的处理器内核及其运行方法 | |
US11016769B1 (en) | Method and apparatus for processing information | |
CN111443949B (zh) | 一种飞腾服务器平台下的内核内存页拷贝加速方法 | |
CN114153500A (zh) | 指令调度方法、指令调度装置、处理器及存储介质 | |
KR20210021261A (ko) | 가속기에서 이종 컴포넌트들을 구성하기 위한 방법들 및 장치 | |
US9235417B2 (en) | Real time instruction tracing compression of RET instructions | |
CN111026444A (zh) | 一种gpu并行阵列simt指令处理模型 | |
US9405545B2 (en) | Method and apparatus for cutting senior store latency using store prefetching | |
CN115951933A (zh) | 主机、数据处理器的操作方法以及内核程序的编译方法 | |
WO2022166480A1 (zh) | 任务调度方法、装置及系统 | |
CN114924792A (zh) | 指令译码单元、指令执行单元及相关装置和方法 | |
CN115481072A (zh) | 核间数据传输方法、多核芯片及机器可读存储介质 | |
US11288071B2 (en) | System and method for prefetching instructions and data | |
CN114331806A (zh) | 图形处理器及图形处理方法 | |
CN114371920A (zh) | 一种基于图形处理器加速优化的网络功能虚拟化系统 | |
TW202119215A (zh) | 共用代碼之系統與代碼共用方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |