CN112579254B - 图形处理器的仿真方法、装置、电子设备和存储介质 - Google Patents
图形处理器的仿真方法、装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN112579254B CN112579254B CN202011444706.9A CN202011444706A CN112579254B CN 112579254 B CN112579254 B CN 112579254B CN 202011444706 A CN202011444706 A CN 202011444706A CN 112579254 B CN112579254 B CN 112579254B
- Authority
- CN
- China
- Prior art keywords
- graphics processor
- simulation
- kernel
- computing platform
- memory
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45508—Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
一种图形处理器的仿真方法及仿真装置、电子设备和存储介质。该仿真方法包括:获取为图形处理器创建的图形处理器模型,图形处理器模型包括模拟内核驱动器和模拟内存,图形处理器模型通过模拟内核驱动器与计算平台交互;利用模拟内核驱动器,获取待执行的内核程序的关联信息,并将关联信息存储在模拟内存中,内核程序经由计算平台存储于模拟内存中;响应于接收到执行内核程序的执行信息,根据关联信息,从模拟内存中获取内核程序,并且将内核程序发送到图形处理器模型的执行单元中;利用执行单元执行内核程序,以对图形处理器的性能进行仿真。该仿真方法可以直接利用计算平台对图形处理器模型进行性能仿真。
Description
技术领域
本公开的实施例涉及一种图形处理器的仿真方法、装置、电子设备和存储介质。
背景技术
图形处理器(Graphics Processing Unit,GPU)是一种对图形和图像进行运算工作的微处理器,它具有并行处理能力强,计算能力高,存储带宽高等特点。它可以进行部分原本由CPU运行的计算任务。而对GPU进行性能建模能够在GPU的设计研发阶段,通过软件模拟得到GPU的性能数据,从而为架构设计提供数据支撑,同时软件层面的性能调优也能在没有硬件的环境下开展。
发明内容
本公开至少一个实施例提供一种图形处理器的仿真方法,包括:获取为图形处理器创建的图形处理器模型,图形处理器模型包括模拟内核驱动器和模拟内存,图形处理器模型通过模拟内核驱动器与计算平台交互,使得图形处理器模型运行在计算平台提供的环境中;利用模拟内核驱动器,获取待执行的内核程序的关联信息,并将关联信息存储在模拟内存中,内核程序经由计算平台存储于模拟内存中;响应于接收到执行内核程序的执行信息,根据关联信息,从模拟内存中获取内核程序,并且将内核程序发送到图形处理器模型的执行单元中;以及利用执行单元执行内核程序,以对图形处理器的性能进行仿真。
例如,在本公开一实施例提供的图形处理器的仿真方法中,获取为图形处理器创建的图形处理器模型,包括:获取图形处理器的初始模型,初始模型包括模拟内存;以及在初始模型中创建模拟内核驱动器,模拟内核驱动器包括多个与计算平台进行交互的接口,以供计算平台调用。
例如,在本公开一实施例提供的图形处理器的仿真方法中,接口包括映射接口和控制接口,计算平台配置为调用映射接口获取中央处理器中与模拟内存相对应的虚拟地址空间,计算平台配置为调用控制接口对与内核程序相关联的目标队列或者事件进行管理。
例如,在本公开一实施例提供的图形处理器的仿真方法中,图形处理器模型包括命令处理器,关联信息包括内核程序的存储地址,利用模拟内核驱动器,获取待执行的内核程序的关联信息,并将关联信息存储在模拟内存中,包括:利用映射接口和控制接口,在模拟内存中创建缓冲器并且在命令处理器中建立队列映射,队列映射包括目标队列和队列信息之间的映射关系,队列信息包括缓冲器地址;以及接收来自计算平台的程序包,并且将程序包存储到缓冲器中,程序包包括内核程序的存储地址。
例如,在本公开一实施例提供的图形处理器的仿真方法中,利用所述模拟内核驱动器,获取待执行的内核程序的关联信息,并将所述关联信息存储在所述模拟内存中,还包括:响应于接收到来自计算平台的初始化信息,对图形处理器模型进行初始化。
例如,在本公开一实施例提供的图形处理器的仿真方法中,利用映射接口和控制接口,在模拟内存中创建缓冲器并且在命令处理器中建立队列映射,包括:响应于计算平台调用映射接口,图形处理器模型将模拟内存映射到处理器的虚拟地址空间,并且向计算平台返回虚拟地址空间的地址,使所述计算平台根据所述虚拟地址空间的地址在所述模拟内存中创建缓冲器;响应于计算平台调用控制接口,根据来自计算平台的队列信息,在命令处理器中创建队列映射。
例如,在本公开一实施例提供的图形处理器的仿真方法中,队列信息至少还包括:门铃偏移量,门铃偏移量用于确定目标队列对应的队列信息。
例如,在本公开一实施例提供的图形处理器的仿真方法中,队列信息还包括主机读指针,主机读指针用于指示内核程序是否执行完毕。
例如,本公开一实施例提供的图形处理器的仿真方法还包括:响应于执行单元执行内核程序完成,更新主机读指针。
例如,在本公开一实施例提供的图形处理器的仿真方法中,执行信息包括门铃偏移量,响应于接收到执行内核程序的执行信息,根据关联信息,从模拟内存中获取内核程序,并且将内核程序发送到图形处理器模型的执行单元中,包括:响应于接收到门铃偏移量,确定目标队列对应的队列信息;根据队列信息,确定缓冲器地址;根据缓冲器地址对应的缓冲器的读指针和写指针,抓取缓冲器中未被读取的程序包;解析未被读取的程序包而获得内核程序的存储地址,存储地址为虚拟地址空间中的虚拟地址;以及根据存储地址,获取内核程序。
例如,在本公开一实施例提供的图形处理器的仿真方法中,还包括:响应于计算平台创建多个事件的请求,在模拟内核驱动器中创建多个事件,并且建立多个事件的映射关系表,映射关系表包括多个事件中每个事件和事件状态信息之间的对应关系;响应于内核程序的执行状态触发多个事件中的目标事件执行,执行目标事件,执行目标事件包括更新目标事件对应的事件状态信息。
例如,在本公开一实施例提供的图形处理器的仿真方法中,计算平台包括:Radeon开发计算平台。
例如,在本公开一实施例提供的图形处理器的仿真方法中,图形处理器包括通用图形处理器,图形处理器模型包括通用图形处理器模型。
本公开至少一个实施例还提供一种图形处理器的仿真装置,包括:第一获取单元,配置为获取为图形处理器创建的图形处理器模型,图形处理器模型包括模拟内核驱动器和模拟内存,图形处理器模型通过模拟内核驱动器与计算平台交互,使得图形处理器模型运行在计算平台提供的环境中;第二获取单元,配置为利用模拟内核驱动器,获取待执行的内核程序的关联信息,并将关联信息存储在模拟内存中,内核程序经由计算平台存储于模拟内存中;第三获取单元,配置为响应于接收到执行内核程序的执行信息,根据关联信息,从模拟内存中获取内核程序,并且将内核程序发送到图形处理器模型的执行单元中;以及执行单元,配置为执行内核程序,以对图形处理器的性能进行仿真。
本公开至少一个实施例提供一种电子设备,包括处理器;存储器,包括一个或多个计算机程序模块;其中,所述一个或多个计算机程序模块被存储在所述存储器中并被配置为由所述处理器执行,所述一个或多个计算机程序模块包括用于实现本公开任一实施例提供的图形处理器的仿真方法的指令。
本公开至少一个实施例提供一种存储介质,用于存储非暂时性计算机可读指令,当所述非暂时性计算机可读指令由计算机执行时可以实现本公开任一实施例提供的图形处理器的仿真方法。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1示出了ROCm平台的示意性架构图;
图2示出了本公开至少一个实施例提供的一种图形处理器的仿真方法的流程图;
图3示出了图2所示的仿真方法中步骤S20的流程图;
图4示出了本公开至少一个实施例提供的图形处理器的仿真方法的示意图;
图5示出了图3中步骤S22的一个实施例的流程示意图;
图6示出了图2所示的仿真方法中步骤S30的流程图;
图7示出了本公开至少一个实施例提供的一种图形处理器的仿真装置700的示意框图;
图8为本公开一些实施例提供的一种电子设备的示意框图;
图9为本公开一些实施例提供的另一种电子设备的示意框图;以及
图10为本公开一些实施例提供的一种存储介质的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
目前,例如可以利用GPGPU-sim、Multi2Sim、MGPUSim等模拟器为GPU建立GPU模型。但利用这些模拟器建立的GPU模型往往无法直接在计算平台上运行执行负载程序,因此难以针对基于计算平台的计算库或应用进行GPU性能评估。计算平台例如可以是Radeon开发计算平台(Radeon Open Compute Platform,ROCm),或者是其他提供程序执行环境的计算平台。为了便于描述,在本文中以ROCm平台为例来说明本公开提供的图形处理器的仿真方法的实施例,但这并不构成对本公开实施例的限制。
图1示出了ROCm平台的示意性架构图。
ROCm平台是包括了从驱动、编译到上层计算库的一套完整的计算平台。ROCm平台提供了BLAS(basic linear algebra subroutine,基础线性代数子程序库)及MIOpen(Machine Intelligence Library)。例如,上层应用可以调用BLAS和MIOpen,而这2个库则会调用通用的API接口HIP。当然上层应用也可以不使用库而直接调用API接口HIP或OpenCL。而在API接口以下,就属于驱动部分,可以概括为3层,ROC Runtime、ROC Thunk和ROCKernel Driver,依次向下调用。其中ROC Kernel Driver位于操作系统以下,负责与GPU硬件交互。然而,GPU模型通常无法直接与ROC Kernel Driver进行交互,导致其难以直接运行在ROCm平台的环境中。因此,难以直接利用GPU模型在ROCm平台的环境中对GPU的性能进行仿真。
为此,本公开的实施例提供了一种图形处理器的仿真方法,该仿真方法包括:获取为图形处理器创建的图形处理器模型,图形处理器模型除了对图形处理器的各模块进行性能建模,还包括了模拟内核驱动器。图形处理器模型通过模拟内核驱动器与计算平台交互,使得图形处理器模型运行在计算平台提供的环境中;利用模拟内核驱动器,获取待执行的内核程序的关联信息,并将关联信息存储在模拟内存中,内核程序经由计算平台存储于模拟内存中;响应于接收到执行内核程序的执行信息,根据关联信息,从模拟内存中获取内核程序,并且将内核程序发送到图形处理器模型的执行单元中;以及利用执行单元执行内核程序,以对图形处理器的性能进行仿真。该仿真方法使得基于该图形处理器建立的图形处理器模型可以直接与计算平台交互,使得该图形处理器模型可以运行在计算平台,从而利用ROCm平台,使HIP或者OpenCL等接口编写的GPU上层应用可以直接运行在GPU建模上,从而可以对GPU的性能进行仿真。
图2示出了本公开至少一个实施例提供的一种图形处理器的仿真方法的流程图。如图2所示,该仿真方法包括步骤S10-步骤S40。
步骤S10:获取为图形处理器创建的图形处理器模型。图形处理器模型包括模拟内核驱动器和模拟内存,图形处理器模型通过模拟内核驱动器与计算平台交互,使得图形处理器模型运行在计算平台提供的环境中。
步骤S20:利用模拟内核驱动器,获取待执行的内核程序的关联信息,并将关联信息存储在模拟内存中。内核程序经由计算平台存储于模拟内存中。
步骤S30:响应于接收到执行内核程序的执行信息,根据关联信息,从模拟内存中获取内核程序,并且将内核程序发送到图形处理器模型的执行单元中。
步骤S40:利用执行单元执行内核程序,以对图形处理器的性能进行仿真。
该仿真方法通过图形处理器模型中的模拟内核驱动器与计算平台进行交互,从而使得该图形处理器模型可以运行在计算平台,并执行内核程序来对图形处理器的性能进行仿真。利用本公开实施例提供的仿真方法使得使用HIP和OpenCL接口编写的GPU上层应用可以直接运行在GPU建模上。另外,对于CUDA(Compute Unified Device Architecture,通用并行计算架构)程序,ROCm提供了将各种接口转化为HIP的方法,以此运行在建模上,用户无需对上层应用本身进行任何修改。
对于步骤S10,图形处理器例如可以是通用图形处理器(General-purposecomputing on graphics processing units,GPGPU),图形处理器模型可以是GPGPU模型。图形处理器模型可以是基于需要被仿真的图形处理器建立的。例如,某个GPGPU的性能需要仿真,那么可以获取该GPGPU的GPGPU模型。例如,图形处理器模型可以是在执行本公开实施例提供的仿真方法之前已经建立好的,或者,也可以是在执行本公开实施例提供的仿真方法时建立的(例如在执行步骤S10时建立)。
需要理解的是,图像处理器模型除包括模拟内核驱动器和模拟内存外,还可以包括其他模型,例如还可以包括命令处理器以及其他执行单元等。
在本公开的一些实施例中,GPU模型可以与待仿真的GPU具有相同的内存大小,相同的设计结构等。
在本公开的一些实施例中,模拟内存作为图形处理器模型的物理内存。
在本公开的一些实施例中,对于步骤S10,例如可以是获取图形处理器的初始模型,初始模型包括模拟内存,以及在初始模型中创建模拟内核驱动器,模拟内核驱动器包括多个与计算平台进行交互的接口,以供计算平台调用。例如,初始模型可以是在执行本公开实施例提供的仿真方法之前已经建立好的,或者,也可以是在执行本公开实施例提供的仿真方法时建立的(例如在执行步骤S10时建立)。例如,可以在执行步骤S10时执行在初始模型中创建模拟内核驱动器这一操作,也可以在执行步骤S10之前就已经在初始模型中创建了模拟内核驱动器。
例如,可以利用Multi2Sim和MGPUSim等体系工具建立图形处理器的初始模型,然后在初始模型中构建模拟内核驱动器。该模拟内核驱动器与ROCm平台架构中的ROC KernelDriver类似,用于与上层驱动进行交互,将GPU中的参数返回给上层驱动,并接受上层驱动传递下来的配置和程序内核相关的数据。上层驱动,例如可以是ROCm等计算平台位于操作系统以上的驱动部分,例如ROCm平台的ROC Runtime层和ROC Thunk层。
模拟内核驱动器中的多个与计算平台进行交互的接口,例如可以包括映射接口和控制接口。映射接口用于模拟真实的Kernel Driver中的mmap接口,控制接口用于模拟真实的Kernel Driver中的ioctl接口。
计算平台通过调用映射接口获取中央处理器中与模拟内存相对应的虚拟地址空间的地址,通过调用控制接口对与内核程序相关联的目标队列或者事件进行管理。例如,计算平台通过调用控制接口实现创建和销毁队列,获取GPU进程地址空间,创建、销毁、设置及等待事件等。
为了使得计算平台调用映射接口和控制接口等接口,需要对计算平台中的部分上层驱动进行修改。例如对于ROCm平台,需要修改ROC Thunk接口和ROC Runtime。通过修改ROCm软件栈的接口,配合GPU模型的模拟内核驱动器可以实现将GPU模型运行在ROCm环境下。
例如,若不对ROC Thunk层进行修改,那么ROC Thunk层会通过操作系统的接口将ROC runtime的部分数据和操作传递给真实的Kernel Driver。因此在调用路径上,需要将mmap和ioctl接口的调用替换为模拟内核驱动器中映射接口和控制接口的调用。即,将ROCThunk层调用mmap和ioctl接口替换为ROC Thunk层调用模拟内核驱动器中映射接口和控制接口,从而可以将Runtime的请求直接转发到图形处理器模型中。
又例如,需要对ROC Runtime层进行修改,使得ROC Runtime层通过调用GPU模型的接口向GPU模型传入写指针触发门铃,而不是直接通过ROC Runtime层的原子(atomic)操作来拉门铃。
在本公开的另一些实施例中,图形处理器模型也可以是本领域技术人员通过代码实现的,而不是基于现有的体系建模。
对于步骤S20,关联信息,例如可以包括内核程序的存储地址、内核程序的参数、内核程序的大小等。
例如,计算平台的上层驱动可以通过调用模拟内核驱动器的接口将内核程序的关联信息放入模拟内存中。当上层应用准备好内核程序之后,上层驱动可以将内核程序放入GPU的模拟内存中。
对于步骤S30,执行信息,例如可以指示GPU执行内核程序,并且通过该执行信息可以从多个内核程序中确定出要执行的内核程序。
在步骤S30,例如可以根据执行信息确定关联信息,从而根据关联信息从模拟内存中获取要执行的内核程序,以及向图形处理器模型的执行单元发送内核程序,使得执行单元执行该内核程序。执行单元,例如可以包括GPU模型中的逻辑运算单元和浮点数单元等。
对于步骤S40,例如由逻辑运算单元对内核程序中的操作数进行运算,也可以由任意类型的执行单元来执行内核程序的操作。
图3示出了图2所示的仿真方法中步骤S20的流程图。如图3所示,该仿真方法包括步骤S21-S23。
在该实施例中,图形处理器模型包括命令处理器(Command Processor,CP),关联信息包括内核程序的存储地址。
步骤S21:响应于接收到来自计算平台的初始化信息,对图形处理器模型进行初始化。
步骤S22:利用映射接口和控制接口,在模拟内存中创建缓冲器并且在命令处理器中建立队列映射,队列映射包括目标队列和队列信息之间的映射关系,队列信息包括缓冲器地址。
步骤S23:接收来自计算平台的程序包,并且将程序包存储到缓冲器中,程序包包括内核程序的存储地址。
需要说明的是,步骤S20也可以仅包括步骤S22和S23,也即,不进行初始化而直接执行步骤S22和S23。例如,在一些示例中,在执行一次本公开实施例提供的仿真方法后,图形处理器模型已经进行了初始化,因此在再次执行该仿真方法时,可以无需再进行初始化。
下面结合图4说明图3所示的实施例。
图4示出了本公开至少一个实施例提供的图形处理器的仿真方法的示意图。
如图4所示,上层应用401可以向计算平台ROCm的Runtime层402发送启动指示,以指示计算平台上层应用开始执行。Runtime层402响应于接收到启动指示执行初始化,并且调用Thunk层403执行初始化,Thunk层403调用模拟内核驱动器411的初始化接口,以使GPU模型410初始化。GPU模型410响应于初始化接口被调用,执行步骤S21,即,对GPU模型410进行初始化。
对于步骤S21,对GPU模型进行初始化,例如可以包括加载GPU模型的配置文件,创建对象,分配内存等等,以及向上层驱动返回GPU模型的参数。GPU模型的参数,例如可以包括GPU的核的数量,内存大小等参数。
对于步骤S22,例如,如图4所示,Thunk层403响应于来自Runtime层402的内存映射指令,调用映射接口来获取虚拟地址空间的地址,使得Runtime层402可以根据Thunk层403返回的虚拟地址空间的地址创建缓冲器(ring buffer)。该缓冲器可以用于存储程序包。程序包中可以存储与内核程序关联的内核程序信息。例如,程序包中可以包括内核程序的存储地址、内核程序的大小和内核程序中使用到的参数等。
例如,Thunk层403响应于来自Runtime层402创建队列的指令,调用控制接口,从而可以通过模拟内核驱动器411向命令处理器(command processer,CP)412发送目标队列和队列信息。CP 412建立目标队列和队列信息之间的映射关系。
队列信息,例如可以包括存储程序包的缓冲器地址(Ring buffer Address)和门铃偏移量(doorbell offset),门铃偏移量作为映射关系中的键,以根据键确定目标队列对应的队列信息等。队列信息还包括主机读指针(HostReadPtr),主机读指针用于指示内核程序是否执行完毕。队列信息还可以包括缓冲器的读指针(rdptr)和写指针(wrptr)。读指针表示程序包被读取到的位置,写指针表示程序包被写到的位置。
如图4所示,在CP 412维护的映射关系中,根据门铃偏移量可以确定队列信息,即,根据门铃偏移量可以确定与门铃偏移量对应的缓冲器地址、读指针、写指针和主机读指针。
在本公开的一些实施例中,缓冲器的读指针和写指针以及主机读指针可以是CP412自己维护的,不需要上层驱动维护,而门铃偏移量和缓冲器地址可以是上层驱动向CP412发送的,使得CP 412根据门铃偏移量和缓冲器地址建立映射关系。
图5示出了图3中步骤S22的一个实施例的流程示意图。
如图5所示,步骤S22可以包括步骤S221~S222。
步骤S221:响应于计算平台调用映射接口,图形处理器模型将模拟内存映射到处理器的虚拟地址空间,并且向计算平台返回虚拟地址空间的地址,使计算平台根据虚拟地址空间的地址在模拟内存中创建缓冲器。
如图4所示,计算平台可以通过Thunk层403通过调用模拟内存驱动器411提供的映射接口来执行内存映射。模拟内存驱动器411响应于映射接口被调用,模拟内存驱动器411内部会调用GPU的内存管理模块413,将GPU模型410自己管理的模拟内存映射到CPU的虚拟地址空间,并且将虚拟地址空间的地址返回给计算平台的Thunk层403以及Runtime层402。
计算平台例如可以在映射的虚拟地址空间中的任意位置创建缓冲器,并确定缓冲器的地址。
步骤S222:响应于计算平台调用控制接口,根据来自计算平台的队列信息,在命令处理器中创建队列映射。
如图4所示,在本公开的一些实施例中,计算平台的Runtime层402可以根据来自上层应用401的创建队列的请求,确定该队列的门铃偏移量。Runtime层402可以调用Thunk层403,使得Thunk层403调用控制接口,从而向CP 412发送队列信息。队列信息包括该队列的门铃偏移量和计算平台确定的缓冲器地址。CP 412响应于接收到队列信息,可以为该目标队列创建队列映射。
例如,在图4中,上层应用401向计算平台发送创建队列2的请求,Runtime层402确定队列2的门铃偏移量,以及为队列2创建的缓冲器地址。Runtime层402可以调用Thunk层403,使得Thunk层403调用控制接口,从而向CP 412发送队列信息。队列信息包括该队列2的门铃偏移量和缓冲器地址。CP 412响应于接收到队列信息,建立目标队列2和队列信息之间的映射关系。
例如,在队列映射和缓冲器创建完成后,Runtime层402可以将上层应用401准备的内核程序放入模拟内存中。Runtime层402将内核程序存储到模拟内存后,可以将内核程序的虚拟地址以及与内核程序相关联的信息打包成程序包。
如图4所示,上层应用401在准备好内核程序后,可以向Runtime层402发送备队列2的内核程序。Runtime层402将该内核程序放入虚拟地址空间中缓冲器以外的虚拟地址空间中,使得GPU模型410的模拟内存存储内核程序。在Runtime层402向模拟内存中放入内核程序后,Runtime层402准备程序包,即,将内核程序的存储地址、内核程序的大小、内核程序的参数打包成程序包。
返回参考图3,在步骤S23,接收来自计算平台的程序包,并且将程序包存储到缓冲器中,程序包包括内核程序的存储地址。
例如可以是接收来自Runtime层402的程序包,并将程序包存储到缓冲器。
图6示出了图2所示的仿真方法中步骤S30的流程图。
如图6所示,该方法可以包括步骤S31~S35。
步骤S31:响应于接收到门铃偏移量,确定目标队列对应的队列信息。
例如,如图4所示,上层应用401向计算平台发送执行内核程序的消息,该消息可以包括队列标识,队列标识例如可以是队列2。例如,该消息为前述的执行信息。Runtime层402根据该队列标识可以确定该队列的门铃偏移量,从而将执行信息传入CP 412,以此来拉门铃。执行信息,例如可以包括门铃偏移量和填好程序包后的写指针。CP 412会根据门铃偏移量确定目标队列对应的队列信息。
步骤S32:根据队列信息,确定缓冲器地址,并更新缓冲器的写指针。
队列信息可以包括缓冲器地址,从而通过队列信息可以确定缓冲器地址。
在本公开的一个实施例中,程序包存储到缓冲器中并拉门铃后,CP维护的队列映射表中该目标队列的写指针移到门铃中的写指针位置,以指示该缓冲器被程序包占用的终止位置。
例如在未向缓冲器中写入程序的情况下,CP维护的读指针和写指针都是0位置,在向缓冲器中写入队列2对应的程序包并拉门铃时,CP维护的写指针更新为门铃发送的写指针,例如被更新到位置4,此时,CP维护的读指针依然是0位置。随着队列2对应的程序包被读取,读指针的位置被不断更新,直到队列2对应的程序包被全部读取,读指针与写指针重合。当向缓冲器中接着写入队列2对应的程序包并拉门铃时,CP维护的写指针将更新到第二次门铃发送的写指针,例如被更新到位置8,此时,CP维护的读指针依然是4位置。
步骤S33:根据缓冲器地址对应的缓冲器的读指针和写指针,抓取缓冲器中未被读取的程序包。
队列信息还可以包括读指针和写指针。确定缓存器中未被读取的程序包为位于读指针和写指针之间的程序包。例如,CP 412根据缓冲器地址及读指针读取程序包,直到读指针被更新到与写指针重合,则结束从缓冲器中读取程序包。
如图4所示,在一些示例中,根据读指针位于4位置,写指针位于8位置,则确定程序包2未被读取,则从缓冲器中读取程序包2。
步骤S34:解析未被读取的程序包而获得内核程序的存储地址,其中,存储地址为虚拟地址空间中的虚拟地址。
例如可以是程序包2在CP 412进行解析,获取队列2对应的内核程序的存储地址。
步骤S35:根据虚拟地址,获取内核程序。
将内核程序的负载分发到GPU模型的执行模块。在此之后,GPU模型就开始执行真正的内核程序。在执行过程中,GPU模型会将内核程序的虚拟地址转换为物理地址,从而根据物理地址获取内核程序。
在本公开的另一实施例中,图形处理器的仿真方法还可以包括:响应于执行单元执行内核程序完成,更新主机读指针。
在GPU模型仿真执行内核程序结束后,可以将执行内核程序完成的信息返回给CP412,CP 412会通过内存管理模块去更新主机读指针。上层驱动可以通过检测这个指针来判断内核程序是否执行完毕。
在本公开的另一实施例中,图形处理器的仿真方法还可以包括:响应于计算平台创建多个事件的请求,在模拟内核驱动器中创建多个事件,并且建立多个事件的映射关系表,映射关系表包括多个事件中每个事件和事件状态信息之间的对应关系;响应于内核程序的执行状态触发多个事件中的目标事件执行,执行目标事件,执行目标事件包括更新目标事件对应的事件状态信息。
上层驱动可以通过调用控制接口来对事件进行管理。例如,上层驱动可以通过调用控制接口创建事件,模拟内核驱动器在自身创建一个事件的对象,并且将该事件的对象加入到自己维护的一个映射关系表中。该映射关系表为事件和事件状态之间的对应关系。
在内核程序的执行状态未触发多个事件中的目标事件执行的情形中,中央处理器中的某个线程处于等待状态,并通过不断地访问模拟内核驱动器来获取目标事件对应的事件状态。例如,中央处理器可以通过事件ID来找到模拟内核驱动器创建的目标事件,并且找到该目标事件的事件状态。
响应于内核程序的执行状态触发多个事件中的目标事件执行,可以执行目标事件。执行目标事件,例如可以包括更新目标事件对应的事件状态信息。例如,可以通过事件的ID到映射关系表中查找出之前创建的目标事件,并将目标事件的状态信息设置成true。
响应于目标事件对应的事件状态更新为true,中央处理器中的该线程执行下一步操作。
例如,当内核程序执行完成时触发事件event0执行,目标事件event0执行可以是将event0对应的事件状态更新为true。当event0对应的事件状态被更新为true后,中央处理器执行下一步操作。
销毁事件时,只需要将对应的目标事件从映射关系中擦除,并销毁对应内存即可。
需要说明的是,在本公开提供的上述实施例中,计算平台可以是任何版本的ROCm,但是计算平台也不限于ROCm,可以是其他任意类型的计算平台,并且本公开提供的仿真方法也可以应用于虚拟环境,针对虚拟环境(如docker,vmware等)中的ROCm进行相关开发。
图7示出了本公开至少一个实施例提供的一种图形处理器的仿真装置700的示意框图。
例如,如图7所示,该图形处理器的仿真装置700包括第一获取单元710、第二获取单元720、第三获取单元730和执行单元740。
第一获取单元710配置为获取为图形处理器创建的图形处理器模型。图形处理器模型包括模拟内核驱动器和模拟内存,图形处理器模型通过模拟内核驱动器与计算平台交互,使得图形处理器模型运行在计算平台提供的环境中。第一获取单元710例如可以执行图2描述的步骤S10,在此不再赘述。
第二获取单元720配置为利用模拟内核驱动器,获取待执行的内核程序的关联信息,并将关联信息存储在模拟内存中。内核程序经由计算平台存储于模拟内存中。第二获取单元720例如可以执行图2描述的步骤S20,在此不再赘述。
第三获取单元730配置为响应于接收到执行内核程序的执行信息,根据关联信息,从模拟内存中获取内核程序,并且将内核程序发送到图形处理器模型的执行单元中。第三获取单元730例如可以执行图2描述的步骤S30。
执行单元740配置为执行内核程序,以对图形处理器的性能进行仿真。执行单元740例如可以执行图2描述的步骤S40,在此不再赘述。
例如,第一获取单元710、第二获取单元720、第三获取单元730和执行单元740可以为硬件、软件、固件以及它们的任意可行的组合。例如,第一获取单元710、第二获取单元720、第三获取单元730和执行单元740可以为专用或通用的电路、芯片或装置等,也可以为处理器和存储器的结合。该处理器例如可以是上文提到的中央处理器。关于上述各个单元的具体实现形式,本公开的实施例对此不作限制。
需要说明的是,本公开的实施例中,图形处理器的仿真装置700的各个单元与前述的图形处理器的仿真方法的各个步骤对应,关于图形处理器的仿真装置700的具体功能可以参考关于图形处理器的仿真方法的相关描述,此处不再赘述。图7所示的图形处理器的仿真装置700的组件和结构只是示例性的,而非限制性的,根据需要,该图形处理器的仿真装置700还可以包括其他组件和结构。
本公开的至少一个实施例还提供了一种电子设备,该电子设备包括处理器和存储器,存储器包括一个或多个计算机程序模块。该处理器例如可以是上文提到的中央处理器。一个或多个计算机程序模块被存储在存储器中并被配置为由处理器执行,一个或多个计算机程序模块包括用于实现上述的图形处理器的仿真方法的指令。该电子设备可以使得基于该图形处理器建立的图形处理器模型可以直接与计算平台交互,使得该图形处理器模型可以运行在计算平台,从而利用ROCm平台,使HIP或者OpenCL等接口编写的GPU上层应用可以直接运行在GPU建模上,从而可以对GPU的性能进行仿真。
图8为本公开一些实施例提供的一种电子设备的示意框图。如图8所示,该电子设备800包括处理器810和存储器820。存储器820用于存储非暂时性计算机可读指令(例如一个或多个计算机程序模块)。处理器810用于运行非暂时性计算机可读指令,非暂时性计算机可读指令被处理器810运行时可以执行上文所述的图形处理器的仿真方法中的一个或多个步骤。该处理器例如可以是上文提到的中央处理器。存储器820和处理器810可以通过总线系统和/或其它形式的连接机构(未示出)互连。
例如,处理器810可以是中央处理单元(CPU)、图形处理单元(GPU)或者具有数据处理能力和/或程序执行能力的其它形式的处理单元。例如,中央处理单元(CPU)可以为X86或ARM架构等。处理器810可以为通用处理器或专用处理器,可以控制电子设备800中的其它组件以执行期望的功能。
例如,存储器820可以包括一个或多个计算机程序产品的任意组合,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器、闪存等。在计算机可读存储介质上可以存储一个或多个计算机程序模块,处理器810可以运行一个或多个计算机程序模块,以实现电子设备800的各种功能。在计算机可读存储介质中还可以存储各种应用程序和各种数据以及应用程序使用和/或产生的各种数据等。
需要说明的是,本公开的实施例中,电子设备800的具体功能和技术效果可以参考上文中关于图形处理器的仿真方法的描述,此处不再赘述。
图9为本公开一些实施例提供的另一种电子设备的示意框图。该电子设备900例如适于用来实施本公开实施例提供的图形处理器的仿真方法。电子设备900可以是终端设备等。需要注意的是,图9示出的电子设备900仅仅是一个示例,其不会对本公开实施例的功能和使用范围带来任何限制。
如图9所示,电子设备900可以包括处理装置(例如中央处理器、图形处理器等)910,其可以根据存储在只读存储器(ROM)920中的程序或者从存储装置980加载到随机访问存储器(RAM)930中的程序而执行各种适当的动作和处理。在RAM 930中,还存储有电子设备900操作所需的各种程序和数据。处理装置910、ROM 920以及RAM930通过总线940彼此相连。输入/输出(I/O)接口950也连接至总线940。
通常,以下装置可以连接至I/O接口950:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置960;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置970;包括例如磁带、硬盘等的存储装置980;以及通信装置990。通信装置990可以允许电子设备900与其他电子设备进行无线或有线通信以交换数据。虽然图9示出了具有各种装置的电子设备900,但应理解的是,并不要求实施或具备所有示出的装置,电子设备900可以替代地实施或具备更多或更少的装置。
例如,根据本公开的实施例,上述图形处理器的仿真方法可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包括用于执行上述图形处理器的仿真方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置990从网络上被下载和安装,或者从存储装置980安装,或者从ROM 920安装。在该计算机程序被处理装置910执行时,可以实现本公开实施例提供的图形处理器的仿真方法中限定的功能。
本公开的至少一个实施例还提供了一种计算机可读存储介质,该计算机可读存储介质用于存储非暂时性计算机可读指令,当非暂时性计算机可读指令由计算机执行时可以实现上述的图形处理器的仿真方法。利用该计算机可读存储介质,可以使得基于该图形处理器建立的图形处理器模型可以直接与计算平台交互,使得该图形处理器模型可以运行在计算平台,从而利用ROCm平台,使HIP或者OpenCL等接口编写的GPU应用程序可以直接运行在GPU建模上,从而可以对GPU的性能进行仿真。
图10为本公开一些实施例提供的一种存储介质的示意图。如图10所示,存储介质1000用于存储非暂时性计算机可读指令1010。例如,当非暂时性计算机可读指令1010由计算机执行时可以执行根据上文所述的图形处理器的仿真方法中的一个或多个步骤。
例如,该存储介质1000可以应用于上述电子设备800中。例如,存储介质1000可以为图8所示的电子设备800中的存储器820。例如,关于存储介质1000的相关说明可以参考图8所示的电子设备800中的存储器820的相应描述,此处不再赘述。
有以下几点需要说明:
(1)本公开实施例附图只涉及到本公开实施例涉及到的结构,其他结构可参考通常设计。
(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。
Claims (16)
1.一种图形处理器的仿真方法,包括:
获取为所述图形处理器创建的图形处理器模型,其中,所述图形处理器模型包括模拟内核驱动器和模拟内存,所述图形处理器模型通过所述模拟内核驱动器与计算平台交互,使得所述图形处理器模型运行在所述计算平台提供的环境中;
利用所述模拟内核驱动器,获取待执行的内核程序的关联信息,并将所述关联信息存储在所述模拟内存中,其中,所述内核程序经由所述计算平台存储于所述模拟内存中;
响应于接收到执行所述内核程序的执行信息,根据所述关联信息,从所述模拟内存中获取所述内核程序,并且将所述内核程序发送到所述图形处理器模型的执行单元中;以及
利用所述执行单元执行所述内核程序,以对所述图形处理器的性能进行仿真。
2.根据权利要求1所述的方法,其中,获取为所述图形处理器创建的图形处理器模型,包括:
获取所述图形处理器的初始模型,其中,所述初始模型包括所述模拟内存;以及
在所述初始模型中创建所述模拟内核驱动器,其中,所述模拟内核驱动器包括多个与所述计算平台进行交互的接口,以供所述计算平台调用。
3.根据权利要求2所述的方法,其中,所述接口包括映射接口和控制接口,
所述计算平台配置为调用所述映射接口获取中央处理器中与所述模拟内存相对应的虚拟地址空间,
所述计算平台配置为调用所述控制接口对与所述内核程序相关联的目标队列或者事件进行管理。
4.根据权利要求3所述的方法,其中,所述图形处理器模型包括命令处理器,所述关联信息包括所述内核程序的存储地址,
利用所述模拟内核驱动器,获取待执行的内核程序的关联信息,并将所述关联信息存储在所述模拟内存中,包括:
利用所述映射接口和所述控制接口,在所述模拟内存中创建缓冲器并且在所述命令处理器中建立队列映射,其中,所述队列映射包括所述目标队列和队列信息之间的映射关系,其中,所述队列信息包括所述缓冲器地址;以及
接收来自所述计算平台的程序包,并且将所述程序包存储到所述缓冲器中,其中,所述程序包包括所述内核程序的存储地址。
5.根据权利要求4所述的方法,其中,利用所述模拟内核驱动器,获取待执行的内核程序的关联信息,并将所述关联信息存储在所述模拟内存中,还包括:
响应于接收到来自所述计算平台的初始化信息,对所述图形处理器模型进行初始化。
6.根据权利要求4所述的方法,其中,利用所述映射接口和所述控制接口,在所述模拟内存中创建所述缓冲器并且在所述命令处理器中建立所述队列映射,包括:
响应于所述计算平台调用所述映射接口,所述图形处理器模型将所述模拟内存映射到所述处理器的虚拟地址空间,并且向所述计算平台返回所述虚拟地址空间的地址,使所述计算平台根据所述虚拟地址空间的地址在所述模拟内存中创建缓冲器;以及
响应于所述计算平台调用所述控制接口,根据来自所述计算平台的所述队列信息,在所述命令处理器中创建所述队列映射。
7.根据权利要求4所述的方法,其中,所述队列信息至少还包括:门铃偏移量,所述门铃偏移量用于确定目标队列对应的队列信息。
8.根据权利要求7所述的方法,其中,所述队列信息还包括主机读指针,所述主机读指针用于指示所述内核程序是否执行完毕。
9.根据权利要求8所述的方法,还包括:
响应于所述执行单元执行所述内核程序完成,更新所述主机读指针。
10.根据权利要求7所述的方法,其中,所述执行信息包括所述门铃偏移量,
响应于接收到执行所述内核程序的执行信息,根据所述关联信息,从所述模拟内存中获取所述内核程序,并且将所述内核程序发送到所述图形处理器模型的执行单元中,包括:
响应于接收到所述门铃偏移量,确定所述目标队列对应的所述队列信息;
根据所述队列信息,确定缓冲器地址;
根据所述缓冲器地址对应的缓冲器的读指针和写指针,抓取所述缓冲器中未被读取的程序包;
解析所述未被读取的程序包而获得所述内核程序的存储地址,其中,所述存储地址为所述虚拟地址空间中的虚拟地址;以及
根据所述存储地址,获取所述内核程序。
11.根据权利要求1-10任一所述的方法,还包括:
响应于所述计算平台创建多个事件的请求,在所述模拟内核驱动器中创建所述多个事件,并且建立所述多个事件的映射关系表,其中,所述映射关系表包括所述多个事件中每个事件和事件状态信息之间的对应关系;以及
响应于所述内核程序的执行状态触发所述多个事件中的目标事件执行,执行所述目标事件,其中,执行所述目标事件包括更新所述目标事件对应的事件状态信息。
12.根据权利要求1-10任一所述的方法,其中,所述计算平台包括Radeon 开发计算平台。
13.根据权利要求1-10任一所述的方法,其中,所述图形处理器包括通用图形处理器,所述图形处理器模型包括通用图形处理器模型。
14.一种图形处理器的仿真装置,包括:
第一获取单元,配置为获取为所述图形处理器创建的图形处理器模型,其中,所述图形处理器模型包括模拟内核驱动器和模拟内存,所述图形处理器模型通过所述模拟内核驱动器与计算平台交互,使得所述图形处理器模型运行在所述计算平台提供的环境中;
第二获取单元,配置为利用所述模拟内核驱动器,获取待执行的内核程序的关联信息,并将所述关联信息存储在所述模拟内存中,其中,所述内核程序经由所述计算平台存储于所述模拟内存中;
第三获取单元,配置为响应于接收到执行所述内核程序的执行信息,根据所述关联信息,从所述模拟内存中获取所述内核程序,并且将所述内核程序发送到所述图形处理器模型的执行单元中;以及
执行单元,配置为执行所述内核程序,以对所述图形处理器的性能进行仿真。
15.一种电子设备,包括:
处理器;
存储器,包括一个或多个计算机程序模块;
其中,所述一个或多个计算机程序模块被存储在所述存储器中并被配置为由所述处理器执行,所述一个或多个计算机程序模块包括用于实现权利要求1-13任一项所述的图形处理器的仿真方法的指令。
16.一种存储介质,非暂时性地存储计算机可读指令,当所述计算机可读指令由计算机执行时可以执行权利要求1-13任一项所述的图形处理器的仿真方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011444706.9A CN112579254B (zh) | 2020-12-08 | 2020-12-08 | 图形处理器的仿真方法、装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011444706.9A CN112579254B (zh) | 2020-12-08 | 2020-12-08 | 图形处理器的仿真方法、装置、电子设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112579254A CN112579254A (zh) | 2021-03-30 |
CN112579254B true CN112579254B (zh) | 2022-03-29 |
Family
ID=75130944
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011444706.9A Active CN112579254B (zh) | 2020-12-08 | 2020-12-08 | 图形处理器的仿真方法、装置、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112579254B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113572822A (zh) * | 2021-07-05 | 2021-10-29 | Oppo广东移动通信有限公司 | 一种云终端模拟控制方法、装置、存储介质及电子设备 |
US11966343B2 (en) | 2021-07-19 | 2024-04-23 | Samsung Electronics Co., Ltd. | Universal mechanism to access and control a computational device |
CN114116590B (zh) * | 2021-11-03 | 2023-10-31 | 中汽创智科技有限公司 | 数据获取方法、装置、车辆、存储介质和电子设备 |
CN116132375B (zh) * | 2022-12-08 | 2024-07-23 | 中船重工(武汉)凌久电子有限责任公司 | 一种基于国产dsp的多节点任意核间全域通信方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1538296A (zh) * | 2003-02-18 | 2004-10-20 | 图形处理单元的多线程内核 | |
CN108694688A (zh) * | 2017-04-07 | 2018-10-23 | 英特尔公司 | 用于在图形处理架构中管理数据偏置的设备和方法 |
CN109063340A (zh) * | 2018-08-03 | 2018-12-21 | 上海兆芯集成电路有限公司 | 基于仿真的gpu性能的测试方法及装置 |
CN109683877A (zh) * | 2018-12-11 | 2019-04-26 | 中国航空工业集团公司西安航空计算技术研究所 | 一种基于SystemC的GPU软硬件交互TLM系统 |
CN110928695A (zh) * | 2020-02-12 | 2020-03-27 | 南京芯瞳半导体技术有限公司 | 一种关于显存的管理方法、装置及计算机存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10585801B2 (en) * | 2012-11-26 | 2020-03-10 | Advanced Micro Devices, Inc. | Prefetch kernels on a graphics processing unit |
-
2020
- 2020-12-08 CN CN202011444706.9A patent/CN112579254B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1538296A (zh) * | 2003-02-18 | 2004-10-20 | 图形处理单元的多线程内核 | |
CN108694688A (zh) * | 2017-04-07 | 2018-10-23 | 英特尔公司 | 用于在图形处理架构中管理数据偏置的设备和方法 |
CN109063340A (zh) * | 2018-08-03 | 2018-12-21 | 上海兆芯集成电路有限公司 | 基于仿真的gpu性能的测试方法及装置 |
CN109683877A (zh) * | 2018-12-11 | 2019-04-26 | 中国航空工业集团公司西安航空计算技术研究所 | 一种基于SystemC的GPU软硬件交互TLM系统 |
CN110928695A (zh) * | 2020-02-12 | 2020-03-27 | 南京芯瞳半导体技术有限公司 | 一种关于显存的管理方法、装置及计算机存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112579254A (zh) | 2021-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112579254B (zh) | 图形处理器的仿真方法、装置、电子设备和存储介质 | |
US11164280B2 (en) | Graphics layer processing in a multiple operating systems framework | |
CN109544663B (zh) | 应用程序的虚拟场景识别与交互键位匹配方法及装置 | |
US9830176B2 (en) | Methods, systems, and media for binary compatible graphics support in mobile operating systems | |
JP2000500602A (ja) | エミュレーション環境をサポートするディバイスドライバアーキテクチャ | |
US20180074956A1 (en) | Method, apparatus, and electronic device for modifying memory data of a virtual machine | |
JPH08508593A (ja) | 異なるロードフォーマットに体するオブジェクト指向ローダシステム | |
WO1995004961A1 (en) | Cursor manipulation system and method | |
CN113986395B (zh) | 一种linux系统下应用依赖自包含技术的打包方法 | |
De Pascale et al. | The haptik library | |
US11406901B2 (en) | Addressable assets in software development | |
CN111427782A (zh) | 安卓动态链接库的运行方法、装置、设备及存储介质 | |
US20010027387A1 (en) | Debugging supporting apparatus, debugging supporting method and recording medium readable by computer with its programs recorded thereon | |
CN108733602B (zh) | 数据处理 | |
GB2373349A (en) | Data definition language | |
CN116954824A (zh) | 一种支持多种扩展现实 (xr) 技术规范应用程序与2d应用程序多进程混合运行的运行时系统、数据交互方法、设备及介质 | |
CN112732677A (zh) | 区块链节点部署方法、装置、设备及存储介质 | |
CN115454870A (zh) | flutter应用程序智能调试的方法、装置、设备和存储介质 | |
CN116225527A (zh) | 嵌入式系统 | |
CN109697102A (zh) | 一种实现虚拟机桌面访问的方法及装置 | |
CN114924837A (zh) | 数据处理方法、电子设备和可读存储介质 | |
Andrus et al. | Binary compatible graphics support in Android for running iOS apps | |
Antebi et al. | Cross-compiling android applications to windows phone 7 | |
CN112199087B (zh) | 一种应用开发环境的配置方法、装置、设备及存储介质 | |
CN112328472B (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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20220304 Address after: 610216 building 4, No. 171, hele'er street, Chengdu hi tech Zone, China (Sichuan) pilot Free Trade Zone, Chengdu, Sichuan Applicant after: CHENGDU HAIGUANG MICROELECTRONICS TECHNOLOGY Co.,Ltd. Address before: 300392 North 2-204 industrial incubation-3-8, 18 Haitai West Road, Huayuan Industrial Zone, Tianjin Applicant before: Haiguang Information Technology Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |