CN117472336B - 基于程序api的代码生成装置及其方法、设备及介质 - Google Patents
基于程序api的代码生成装置及其方法、设备及介质 Download PDFInfo
- Publication number
- CN117472336B CN117472336B CN202311832844.8A CN202311832844A CN117472336B CN 117472336 B CN117472336 B CN 117472336B CN 202311832844 A CN202311832844 A CN 202311832844A CN 117472336 B CN117472336 B CN 117472336B
- Authority
- CN
- China
- Prior art keywords
- api
- code
- program
- file
- information
- 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
- 238000000034 method Methods 0.000 title claims abstract description 69
- 230000006870 function Effects 0.000 claims description 77
- 230000000694 effects Effects 0.000 claims description 15
- 238000011161 development Methods 0.000 claims description 10
- 238000004590 computer program Methods 0.000 claims description 9
- 238000010276 construction Methods 0.000 claims description 6
- 230000004044 response Effects 0.000 claims description 4
- 239000008186 active pharmaceutical agent Substances 0.000 description 101
- 238000012545 processing Methods 0.000 description 16
- 238000009877 rendering Methods 0.000 description 10
- 238000010586 diagram Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 5
- 238000004458 analytical method Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 1
- KLDZYURQCUYZBL-UHFFFAOYSA-N 2-[3-[(2-hydroxyphenyl)methylideneamino]propyliminomethyl]phenol Chemical compound OC1=CC=CC=C1C=NCCCN=CC1=CC=CC=C1O KLDZYURQCUYZBL-UHFFFAOYSA-N 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000011960 computer-aided design Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 201000001098 delayed sleep phase syndrome Diseases 0.000 description 1
- 208000033921 delayed sleep phase type circadian rhythm sleep disease Diseases 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012800 visualization Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/22—Procedural
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请实施例公开了一种基于程序API的代码生成装置及其方法、设备及介质,其中所述装置包括:API信息记录部分,经配置为在目标程序执行时记录所使用的图形API函数调用信息以生成跟踪文件;文件解析部分,经配置为解析所述跟踪文件以生成对应的调用信息;其中,所述调用信息包括调用序号、API名称、函数信息;源码生成部分,经配置为根据所述调用信息,利用所述API名称对应的API函数生成工具生成代码工程。从而实现利用基于目标程序运行过程中所调用的API序列生成的跟踪文件,反写为目标程序对应的代码工程,同时生成的代码可读性好,且可以编译和运行。
Description
技术领域
本申请涉及计算机图形编程技术领域,涉及但不限定于基于程序API的代码生成装置及其方法、设备及介质。
背景技术
当前C/C++这块似乎没有基于程序反向生成代码的案例。对于Java、C#等基于字节码的语言来说,存在很多可以反向编译的工具可以把程序反编译为代码,不过存在生成代码难以阅读和理解问题。
发明内容
有鉴于此,本申请实施例提供一种基于程序API的代码生成装置及其方法、设备及介质,弥补了相关技术中暂无基于C/C++反向生成代码工程方案的缺陷。
本申请实施例的技术方案是这样实现的:
第一方面,本申请实施例提供一种基于程序API的代码生成装置,所述装置包括:
API信息记录部分,经配置为在目标程序执行时记录所使用的图形API函数调用信息以生成跟踪文件;
文件解析部分,经配置为解析所述跟踪文件以生成对应的调用信息;其中,所述调用信息包括调用序号、API名称、函数信息;
源码生成部分,经配置为根据所述调用信息,利用所述API名称对应的API函数生成工具生成代码工程。
第二方面,本申请实施例提供一种基于程序API的代码生成方法,所述方法包括:
在目标程序执行时记录所使用的图形API函数调用信息以生成跟踪文件;解析所述跟踪文件以生成对应的调用信息;其中,所述调用信息包括调用序号、API名称、函数信息;根据所述调用信息,利用所述API名称对应的API函数生成工具生成代码工程。
第三方面,本申请实施例提供一种开发设备,所述开发设备包括第一方面所述的基于程序API的代码生成装置。
第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述基于程序API的代码生成方法中的步骤。
本申请实施例提供的技术方案带来的有益效果至少包括:
在本申请实施例中,通过API信息记录部分在目标程序执行时记录所使用的图形API函数调用信息以生成跟踪文件,再通过文件解析部分对所述跟踪文件进行解析得到对应的调用信息,最后通过源码生成部分根据所述调用信息,利用所述API名称对应的API函数生成工具生成代码工程;如此,实现了利用基于目标程序运行过程中所调用的API序列生成的跟踪文件,反写为目标程序对应的代码工程,由于生成的代码围绕程序调用的特定API展开并忽略了其他细节,这样生成的代码可读性好且可以编译和运行,可以做二次加工后再使用。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图,其中:
图1为本申请实施例提供的计算机系统的组成结构示意图;
图2为本申请实施例提供的基于程序API的代码生成装置的组成结构示意图;
图3为本申请实施例提供的基于程序API的代码生成装置的系统框图;
图4为本申请实施例提供的基于程序API的代码生成过程的的逻辑流程图;
图5为本申请实施例提供的基于程序API的代码生成方法的流程示意图;
图6为本申请实施例提供的一种计算机设备的硬件实体示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。以下实施例用于说明本申请,但不用来限制本申请的范围。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
需要指出,本申请实施例所涉及的术语“第一\第二\第三”仅仅是是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本申请实施例所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
GPU通用操作接口(GPU General Purpose APIs)是一组用于访问GPU的通用应用程序编程接口(Application Pro gramming Interface,API),它们允许开发人员在GPU上执行通用计算任务,而不仅仅是图形渲染。这些API包括:
开放图形库或者开放式图形库(Open Graphics Library,OpenGL)是用于渲染2D、3D矢量图形的跨语言、跨平台的API。所述应用程序编程接口由近350个不同的函数调用组成,用来从简单的图形比特绘制复杂的三维图像,OpenGL常用于CAD、虚拟实境、科学可视化程序和电子游戏开发,作为独立于操作系统的开放的三维图形的软件开发包,在其基础上开发的应用程序能够简单方便的移植于各种平台。
OpenGLES是OpenGL的一个子集,也就是OpenGL的一个精简指令集,主要用于嵌入式设备,如手机、平板等,本质上是一个跨编程语言、跨平台的编程接口规范。
开放运算语言(Open Computing Langugae,OpenCL)是第一个面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计算服务器、桌面计算系统、手持设备编写高效轻便的代码,而且广泛适用于多核心中央处理器(Central Processing Unit,CPU)、图形处理器(Graphic ProcessingUnit,GPU)、Cell类型架构以及数字信号处理器(Digital Signal Processing,DSP)等其他并行处理器,在游戏、娱乐、科研、医疗等各种领域都有广阔的发展前景。
Vulkan 是 OpenGL 的下一代版本,和 DirectX 12 一样都是基于超微半导体 (AMD)私有的 Mantle API,不同的是 Vulkan 是开源的图形 API,它承诺通过给予开发者访问硬件底层的能力而大幅提升 3D 应用的性能。AMD 同时发布了支持 Vulkan API 的beta 版驱动,竞争对手英伟达(NVIDIA)也宣布将会发布新驱动支持 Vulkan。Vulkan 等新一代图形 API 让开发者自己去管理显存和指令,而不是将其留给驱动程序。一个用于图形和计算设备的编程接口。Vulkan是一个跨平台的2D和3D绘图应用程序接口API。
通用并行计算架构(Compute Unified Device Architecture,CUDA):由NVIDIA开发的GPU编程平台,支持C/C++和Fortran编程语言。
这些API都提供了一些通用的操作,如向量和矩阵运算、图像处理、信号处理等,可以在GPU上高效地执行。它们还提供了一些高级功能,如动态并行处理、内存管理和调试工具等,使开发人员能够更轻松地编写高效的GPU应用程序。
参见图1,其示出了能够实现本申请实施例技术方案的计算机系统的组成框架100,需注意,图示的系统是可能的系统的仅一个示例,并且可根据需要在各种系统中的任一系统中实现本申请的实施方案。该计算机系统框架100具体可以为任意类型的计算装置,包括且不限于台式计算机、服务器、工作站、膝上计算机、基于计算机的仿真器、无线装置、移动或蜂窝电话(包含所谓的智能电话)、个人数字助理(PDA)、视频游戏控制台(包含视频显示器、移动视频游戏装置、移动视频会议单元)、膝上型计算机、桌上型计算机、电视机顶盒、平板计算装置、电子书阅读器、固定或移动媒体播放器等。如图1所示,计算机系统框架100可以包括CPU10、GPU20、存储器30,还包括显示处理器40、显示器41以及通信接口50。显示处理器40可为与GPU 20相同的集成电路(Integrated Circuit,IC)的部分,也可在包含GPU 20的一或多个IC的外部,或可形成于在包含GPU 20的IC外部的IC中。
具体来说,CPU 10可包括控制计算机系统框架100运算的通用或专用处理器,其经配置以处理供执行的计算机程序的指令。用户可经由通信接口50与耦合到计算机系统框架100的另一输入装置(未图示)例如:轨迹球、键盘、鼠标、麦克风、触摸垫、触摸屏以及其他类型的装置将输入提供给计算机系统框架100中的CPU 10,以使得CPU 10执行一或多个软件应用程序的指令。在CPU 10上执行的应用程序可包括图形用户接口(GraphicUserInterface,GUI)应用程序、操作系统、便携式制图应用程序、用于工程或艺术应用的计算机辅助设计程序、视频游戏应用程序、文字处理器应用程序、电子邮件应用程序、电子表格应用程序、媒体播放器应用程序或使用2D、3D图形的渲染应用程序等,本申请实施例以执行图形渲染应用程序为例。此外,CPU 10上执行的渲染应用程序可包含一或多个图形渲染指令(也可以理解为待渲染的画面帧中包含一或多个所述图形),所述图形渲染指令可符合图形API,例如,开放式图形库API(OpenGL API)、开放式图形库嵌入系统(OpenGL ES)API、Direct3D API、X3D API、RenderMan API、WebGL API、开放式计算语言(OpenCLTM)、RenderScript或任何其它异构计算API,或任何其它公用或专有标准图形或计算API。
GPU 20可经配置以执行图形运算,从而将一或多个图形图元渲染到显示器41进行展示。可以理解为,CPU 10通过控制GPU驱动程序14,将OpenGL定义的图形渲染指令翻译为GPU 20可读的图形渲染命令,然后GPU 20根据收到的一或多个图形渲染命令,包括但不限于图形命令和图形数据(例如绘制命令、状态信息、图元信息、纹理信息等),以使得GPU 20执行所述图形渲染命令中的一些或者全部,从而将一或多个图形图元进行渲染并在显示器41上展示出来。
存储器30,经配置用于存储能够在CPU 10上运行的应用程序指令、GPU 20执行需要的图形数据以及其运行结果数据。例如,GPU 20可将完全形成的图像存储在存储器30中。存储器30可包含一或多个易失性或非易失性存储器或存储装置,例如,随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、快闪存储器、磁性数据媒体或光学存储媒体。显示处理器40可从存储器30检索图像且输出使显示器41的像素照亮以显示所述图像的值。显示器41可为计算机系统100的显示器,其显示由GPU 20产生的图形图像内容。显示器41可为液晶显示器(LCD)、有机发光二极管显示器(OLED)、阴极射线管(CRT)显示器、等离子显示器或另一类型的显示装置。
图2示出了本申请实施例提供的一种基于程序API的代码生成装置,如图2所示,所述代码生成装置200包括:
API信息记录部分210,经配置为在目标程序执行时记录所使用的图形API函数调用信息以生成跟踪文件;
文件解析部分220,经配置为解析所述跟踪文件以生成对应的调用信息;其中,所述调用信息包括调用序号、API名称、函数信息;
源码生成部分230,经配置为根据所述调用信息,利用所述API名称对应的API函数生成工具生成代码工程。
这里,所述目标程序理解为图形处理相关的程序,程序类型为OpenGL、OpenGLES、OpenCL、Vulkan、Cuda中的一种。
所述图形API函数调用信息为程序执行过程中所调用的一系列API函数的信息。所述跟踪文件即Trace文件中包括多条trace信息,每一条trace信息包含了调用的函数名,返回值信息,以及相关的参数信息等。所述调用序号表征不同API函数的调用顺序,所述函数信息包括函数参数信息、返回值信息等。
需要说明的是,本申请实施例的API信息记录部分210在运行程序的过程中通过跟踪写入工具实现将API函数调用信息写入到跟踪文件并保存到本地,其中跟踪写入工具至少包括OpenGL Trace Writer、OpenGLES Trace Writer、OpenCL Trace Writer、VulkanTrace Writer、Cuda Trace Writer五种类型,根据每一API函数的类别选择对应类型的跟踪写入工具。
在源码生成部分230,根据解析的调用信息,选择相同类型的API函数生成工具按照调用序号逐一生成每一调用API函数的源码,进而生成目标程序对应的代码工程。例如目标程序中调用的API函数类别为OpenGL类型,则选择OpenGL code writer生成该API函数的代码。
在一些实施方式中,上述写入本地跟踪文件实施例的代码实现方式可以包括如下步骤:对所有图形API函数进行HOOK处理;记录图形API函数的调用参数数据;执行图形API函数操作;将图形API函数名和记录的数据信息写入本地跟踪文件中。
在一些可能的实施方式中,所述API信息记录部分包括:程序选择单元,经配置为选择所述目标程序;API类别选择单元,经配置为选择所述目标程序所使用的API类别以及对应的目标跟踪写入工具;信息记录单元,经配置为响应于接收到用户的执行操作,在运行所述目标程序的过程中,利用所述目标跟踪写入工具将所述图形API函数调用信息写入所述跟踪文件。
这里,所述程序选择单元可以按照浏览路径选择目标程序,也可以手动修改目标程序的工作目录;所述API类别选择单元可以从OpenGL、OpenGLES、OpenCL、Vulkan、Cuda等API类别选择一种类型并确定对应的目标跟踪写入工具,例如选择Vulkan类型,则目标跟踪写入工具即为Vulkan Trace Writer。从而,本申请实施例提供的基于程序API的代码生成装置可以适用于多种API类别,在无源码场合下借助该装置有助于相关人员排查显卡驱动运行故障。
在实施中,在目标程序和API类别均选择完成后,用户点击确定按键开始运行目标程序,并通过目标跟踪写入工具记录程序运行过程中所调用的API函数信息。在一些实施方式中,等待程序运行结束得到完整的跟踪文件,记录了所有图形相关的API函数调用信息;在一些实施方式中,在程序运行过程中也可以主动关闭运行程序,这样得到记录运行期间内所调用的API函数信息的跟踪文件。
在一些可能的实施方式中,所述源码生成部分230包括:路径配置单元,经配置为设置所述代码工程的生成路径;存储方式配置单元,经配置为设置所述代码工程所用的资源数据的存储方式;代码生成单元,经配置为响应于接收到用户的生成代码操作,利用所述API名称对应的API函数生成工具生成所述代码工程。
这里,所述代码工程所用的资源数据的存储方式可以为单独存储方式,也可以存在于代码文件中,本申请实施例对此不作限定。在实施中,通过代码生成配置页面设置所述代码工程的生成路径和所述资源数据的存储方式,在配置完成后可以点击代码生成按键,进入代码生成过程,等待代码生成结束,得到等价于源代码的代码文件。
示例的,将一个打包好的可执行性程序文件即目标程序转化成一个原编写语言文件。比如一个后缀名为exe的程序文件,使用本申请实施例提供的基于程序API的代码生成装置,可以将它还原成cpp文件或c文件。
在一些可能的实施方式中,所述API信息记录部分还包括:参数配置单元,经配置为设置所述目标程序所需的命令行参数和/或环境变量。
这里,命令行参数为在命令行执行目标程序时需传入的参数,环境变量为库函数、着色器版本等参数。
在一些可能的实施方式中,所述装置200还包括: 构建文件生成部分,经配置为生成编译所述代码工程所需的构建文件;代码编译部分,经配置为根据所述构建文件所述代码工程进行编译,得到可执行程序;程序运行部分,经配置为运行所述可执行程序,得到与所述目标程序一致的运行效果。
这里,所述编译所述代码工程所需的构建文件包括CMakeLists.txt,在编译过程中利用该构建文件对代码工程进行编译,等待代码工程编译完成,得到可执行程序,运行生成的可执行程序,效果和原目标程序的运行效果完全一致。
需要说明的是,源代码有时也称为源程序,是指未编译的按照一定的程序设计语言规范书写的程序指令序列,也就是说,源程序是一系列人类可读的计算机语言指令。由于源程序无法被计算机直接执行,因此在计算机执行源程序的过程中,需要将人类可读的程序指令序列“翻译”成为计算机或相关硬件可以执行的指令,比如二进制指令,上述这种“翻译”的过程叫做编译。编译器的作用是读入以某种语言(源语言)编写的程序,输出等价的用另一种语言(目标语言)编写的程序。
在一些可能的实施方式中,所述装置200还包括:资源数据生成部分,经配置为生成所述图形API函数所需的内存资源数据;读写文件部分,经配置为对已生成的所述代码工程中目标代码进行读取或写入操作;对象起名部分,经配置为设置所述代码工程的名称。
这里,所示内存资源数据不区分buffer,还是着色器代码(GL)、内核函数(CL、Cuda)等。所述对象起名部分可以提供良好代码阅读功能,例如OpenGL中的vertex bufferobject 应该起名为vboXXX,比如vbo1、vbo2等,而不是一般性的v1、v2等。
在本申请实施例中,通过API信息记录部分在目标程序执行时记录所使用的图形API函数调用信息以生成跟踪文件,再通过文件解析部分对所述跟踪文件进行解析得到对应的调用信息,最后通过源码生成部分根据所述调用信息,利用所述API名称对应的API函数生成工具生成代码工程;如此,实现了利用基于目标程序运行过程中所调用的API序列生成的跟踪文件,反写为目标程序对应的代码工程,由于生成的代码围绕程序调用的特定API展开并忽略了其他细节,这样生成的代码可读性好且可以编译和运行,可以做二次加工后再使用。
下面结合一个具体实施例对基于程序API的代码生成装置进行说明,然而值得注意的是,该具体实施例仅是为了更好地说明本申请,并不构成对本申请的不当限定。
本申请实施例针对GPU对外提供接口(OpenGL、OpenGLES、OpenCL、Vulkan、Cuda)特点,提出了一种基于跟踪文件的代码工程生成技术(此跟踪文件通过运行指定程序生成,包含了一系列API函数)。整体思路为:在运行程序中,首先根据程序使用的API(OpenGL、OpenGLES等)特点,选择性的把调用的API记录在跟踪文件里。跟踪文件中每一条trace信息包含了调用的函数名,返回值信息,以及相关的参数信息等;之后使用专门的trace解析器读取trace信息,获取调用序号、函数名、函数参数等详细信息;然后使用对应的API 函数生成工具生成具体的代码和相关的工程项目等相关文件。
图3为本申请实施例提供的基于程序API的代码生成装置的系统框图,如图3所示,包括以下几个部分:
1)API信息记录部分31,即API的跟踪写入模块(包括5个跟踪写入工具,分别是OpenGL 跟踪写入工具、OpenGLES 跟踪写入工具、OpenCL 跟踪写入工具、Vulkan 跟踪写入工具、Cuda跟踪写入工具),用于把API调用信息写入本地的跟踪文件(trace file)301。
2)文件解析部分(trace parser)32,负责解析给定的跟踪文件,并生成对应的调用信息(每条调用信息里面有调用序号、API名称、函数信息等详细内容)。
3)源码生成部分(code writer)33,包括5个API函数生成工具,分别是OpenGL 代码编写工具、OpenGLES 代码编写工具、OpenCL 代码编写工具、Vulkan代码编写工具、Cuda代码编写工具。
3)辅助模块34:主要有4个功能,分别是构建文件生成功能(CMakeLists.txtwriter),用于生成编译生成代码所需的构建文件CMakeLists.txt;资源数据生成功能(resource saver),用于生成特定API所需的内存资源数据(不区分buffer,还是着色器代码(GL)、内核函数(CL、Cuda)等;读写文件功能,用于对生成的代码工程中的目标代码执行读取或写入操作;对象起名功能(resource namer),比如对于OpenGL中的vertex bufferobject 应该起名为vboXXX,比如vbo1,vbo2等,而不是一般性的v1,v2等。对于vertexarray object 应该起名vaoXXX,从而确保生成的代码具有良好代码阅读功能。
本申请实施例根据运行程序所调用的API序列生成的,反写为能编译并运行的代码工程。生成的代码围绕程序调用的特定API展开并忽略了其他细节。最终生成的代码不仅可以编译通过,而且运行效果完全和程序运行效果完全一致。
图4为本申请实施例提供的基于程序API的代码生成过程的的逻辑流程图,如图4所示,该过程包括trace生成、代码生成配置、代码生成三个阶段,具体包括以下步骤:
步骤S401,打开本装置;
步骤S402,选择程序;
步骤S403,设置命令行参数;
上述命令行参数即程序运行时所需的传入参数,在实施中根据目标程序的具体情况选择执行。
步骤S404,选择API类别;
这里,选择目标程序所使用的API类别,比如OpenGL、OpenGLES、OpenCL、Vulkan、Cuda等。
需要说明的是,根据目标程序的具体情况还可以选择设置目标程序所需的环境变量,例如库函数、着色器版本等参数。
在上述步骤完成置换,点击确定运行程序,等待程序运行结束,得到完整的跟踪文件;或者在程序运行过程中关闭运行程序,得到部分跟踪文件。
步骤S405,设置生成路径;
步骤S406,设置资源存储方式;
这里,打开代码生成配置页,设置代码工厂生成路径;设置资源数据存储方式(资源可以以单个形式存在,也可以存在于代码文件中)。
步骤S407,生成工程;
这里,点击代码生成按键,等待代码生成结束得到等价于源码的代码工程。
步骤S408,编译工程;
这里,在命令行执行代码工程生成run.sh文件,等待代码工程编译完成,得到可执行程序。
步骤S409,运行生成程序。
这里,运行生成的可执行程序,效果和原程序运行效果完全一致。
使用上述基于程序API的代码生成装置所生成的代码至少具有以下优点:不区分API类别是 GL、Vulkan还是OpenCL等;忽略无关信息,只保留API相关的关键信息;生成的代码可编译和运行;生成的代码可读性好;基于生成代码可以做二次加工后再使用。
本申请实施例提供的基于程序API的代码生成装置至少具有以下应用前景:在无源码场合下借助本装置,有助于相关人员排查显卡驱动运行故障;借助本装置,可优化驱动运行效果;借助本装置可实现一些之前实现不了的功能。比如GPU-Perf中使用本装置可以模拟测试一些大型图形程序运行效果并进行横向测评。
图5示出了本申请实施例提供的一种基于程序API的代码生成方法的流程示意图,如图5所示,所述方法至少包括以下步骤:
步骤S510,在目标程序执行时记录所使用的图形API函数调用信息以生成跟踪文件;
步骤S520,解析所述跟踪文件以生成对应的调用信息;其中,所述调用信息包括调用序号、API名称、函数信息;
步骤S530,根据所述调用信息,利用所述API名称对应的API函数生成工具生成代码工程。
在一些可能的实施方式中,所述方法还包括:生成编译所述代码工程所需的构建文件;根据所述构建文件所述代码工程进行编译,得到可执行程序;运行所述可执行程序,得到与所述目标程序一致的运行效果。从而提供本申请实施例提供的代码生成方法所生成的代码工程可编译并可运行,由该代码工程生成的程序运行效果和原目标程序的效果一致。
在本申请实施例中,首先,在目标程序执行时记录所使用的图形API函数调用信息以生成跟踪文件,再对所述跟踪文件进行解析得到对应的调用信息,最后根据所述调用信息,利用所述API名称对应的API函数生成工具生成代码工程;如此,根据目标程序运行过程中所调用的API序列生成的跟踪文件,反写为目标程序对应的代码工程,由于生成的代码围绕程序调用的特定API展开并忽略了其他细节,这样生成的代码可读性好且可以编译和运行,可以做二次加工后再使用。
对应地,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中任一所述基于程序API的代码生成方法中的步骤。
对应地,本申请实施例中,还提供了一种计算机程序产品,当该计算机程序产品被电子设备的处理器执行时,其用于实现上述实施例中任一所述基于程序API的代码生成方法中的步骤。
基于同一技术构思,图6为本申请实施例提供的开发设备600的具体硬件结构,包括基于程序API的代码生成装置,以实现本申请实施例提供的代码生成方法,如图6所示,所述开发设备600可以包括:通信接口601,存储器602、处理器603和显示器605;各个组件通过总线系统604耦合在一起。可理解,总线系统604用于实现这些组件之间的连接通信。总线系统604除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图6中将各种总线都标为总线系统604。其中,
所述通信接口601,用于在与其他外部网元之间进行收发信息过程中,信号的接收和发送;
所述存储器602,用于存储能够在所述处理器603上运行的计算机程序;
所述处理器603,用于在运行所述计算机程序时,执行以下步骤:在目标程序执行时记录所使用的图形API函数调用信息以生成跟踪文件;解析所述跟踪文件以生成对应的调用信息;其中,所述调用信息包括调用序号、API名称、函数信息;根据所述调用信息,利用所述API名称对应的API函数生成工具生成代码工程。
所述显示器605,用于显示代码生成装置的跟踪文件生成配置页面、代码生成配置页面,以及程序运行效果界面等。
可以理解,本申请实施例中的存储器602可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(Read-Only Memory,ROM)、可编程只读存储器(Programmable ROM,PROM)、可擦除可编程只读存储器(Erasable PROM,EPROM)、电可擦除可编程只读存储器(Electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(Random Access Memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(Static RAM,SRAM)、动态随机存取存储器 (Dynamic RAM,DRAM)、同步动态随机存取存储器(Synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(Double DataRateSDRAM,DDRSDRAM)、增强型同步动态随机存取存储器(Enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(Synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(DirectRambus RAM,DRRAM)。本文描述的系统和方法的存储器602旨在包括但不限于这些和任意其它适合类型的存储器。
而处理器603可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器603中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器603可以是通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field Programmable Gate Array, FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件部分组合执行完成。软件部分可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程 存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器602,处理器603读取存储器602中的信息,结合其硬件完成上述方法的步骤。
可以理解的是,本文描述的这些实施例可以用硬件、软件、固件、中间件、微码或其组合来实现。对于硬件实现,处理单元可以实现在一个或多个专用集成电路(ApplicationSpecific Integrated Circuits,ASIC)、数字信号处理器(Digital SignalProcessing,DSP)、数字信号处理设备(DSP Device,DSPD)、可编程逻辑设备(ProgrammableLogicDevice,PLD)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、通用处理器、控制器、微控制器、微处理器、用于执行本申请所述功能的其它电子单元或其组合中。
对于软件实现,可通过执行本文所述功能的部分(例如过程、函数等) 来实现本文所述的技术。软件代码可存储在存储器中并通过处理器执行。存储器可以在处理器中或在处理器外部实现。
具体来说,处理器603还配置为运行所述计算机程序时,执行前述技术方案中所述基于程序API的代码生成方法步骤,这里不再进行赘述。
可以理解地,上述开发设备600的示例性技术方案,与前述基于程序API的代码生成装置及代码生成方法的技术方案属于同一构思,因此,上述对于开发设备600的技术方案未详细描述的细节内容,均可以参见前述基于程序API的代码生成装置及代码生成方法的技术方案的描述。本申请实施例对此不做赘述。
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本申请实施例方案的目的。
另外,在本申请各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得设备自动测试线执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、磁碟或者光盘等各种可以存储程序代码的介质。
本申请所提供的几个方法实施例中所揭露的方法,在不冲突的情况下可以任意组合,得到新的方法实施例。本申请所提供的几个方法或设备实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的方法实施例或设备实施例。
以上所述,仅为本申请的实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种基于程序API的代码生成装置,其特征在于,所述装置包括:
API信息记录部分,经配置为在目标程序执行时记录所使用的图形API函数调用信息以生成跟踪文件;其中,所述目标程序为 OpenGL、OpenGLES、OpenCL、Vulkan、Cuda 中任一种类型的图形处理程序;
文件解析部分,经配置为解析所述跟踪文件以生成对应的调用信息;其中,所述调用信息包括调用序号、API名称、函数信息;
源码生成部分,经配置为根据所述调用信息,利用所述API名称对应的API函数生成工具生成代码工程。
2.根据权利要求1所述的装置,其特征在于,所述API信息记录部分包括:
程序选择单元,经配置为选择所述目标程序;
API类别选择单元,经配置为选择所述目标程序所使用的API类别以及对应的目标跟踪写入工具;
信息记录单元,经配置为响应于接收到用户的执行操作,在运行所述目标程序的过程中,利用所述目标跟踪写入工具将所述图形API函数调用信息写入所述跟踪文件。
3.根据权利要求1所述的装置,其特征在于,所述源码生成部分包括:
路径配置单元,经配置为设置所述代码工程的生成路径;
存储方式配置单元,经配置为设置所述代码工程所用的资源数据的存储方式;
代码生成单元,经配置为响应于接收到用户的生成代码操作,利用所述API名称对应的API函数生成工具生成所述代码工程。
4.根据权利要求2所述的装置,其特征在于,所述API信息记录部分还包括:
参数配置单元,经配置为设置所述目标程序所需的命令行参数和/或环境变量。
5.根据权利要求1至4任一项所述的装置,其特征在于,所述装置还包括:
构建文件生成部分,经配置为生成编译所述代码工程所需的构建文件;
代码编译部分,经配置为根据所述构建文件所述代码工程进行编译,得到可执行程序;
程序运行部分,经配置为运行所述可执行程序,得到与所述目标程序一致的运行效果。
6.根据权利要求1至4任一项所述的装置,其特征在于,所述装置还包括:
资源数据生成部分,经配置为生成所述图形API函数所需的内存资源数据;
读写文件部分,经配置为对已生成的所述代码工程中目标代码进行读取或写入操作;
对象起名部分,经配置为设置所述代码工程的名称。
7.一种基于程序API的代码生成方法,其特征在于,所述方法包括:
在目标程序执行时记录所使用的图形API函数调用信息以生成跟踪文件;其中,所述目标程序为 OpenGL、OpenGLES、OpenCL、Vulkan、Cuda 中任一种类型的图形处理程序;
解析所述跟踪文件以生成对应的调用信息;其中,所述调用信息包括调用序号、API名称、函数信息;
根据所述调用信息,利用所述API名称对应的API函数生成工具生成代码工程。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
生成编译所述代码工程所需的构建文件;
根据所述构建文件所述代码工程进行编译,得到可执行程序;
运行所述可执行程序,得到与所述目标程序一致的运行效果。
9.一种开发设备,其特征在于,所述开发设备包括权利要求1至6任一项所述的基于程序API的代码生成装置。
10.一种计算机存储介质,其特征在于,所述计算机存储介质存储有计算机程序或指令,所述计算机程序或指令被至少一个处理器执行时实现权利要求7或8所述基于程序API的代码生成方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311832844.8A CN117472336B (zh) | 2023-12-28 | 2023-12-28 | 基于程序api的代码生成装置及其方法、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311832844.8A CN117472336B (zh) | 2023-12-28 | 2023-12-28 | 基于程序api的代码生成装置及其方法、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117472336A CN117472336A (zh) | 2024-01-30 |
CN117472336B true CN117472336B (zh) | 2024-04-12 |
Family
ID=89640156
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311832844.8A Active CN117472336B (zh) | 2023-12-28 | 2023-12-28 | 基于程序api的代码生成装置及其方法、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117472336B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020173128A1 (zh) * | 2019-02-27 | 2020-09-03 | 平安科技(深圳)有限公司 | 软件开发工具包的生成方法、装置及终端设备 |
CN112748914A (zh) * | 2020-03-18 | 2021-05-04 | 腾讯科技(深圳)有限公司 | 一种应用程序开发方法、装置、电子设备和存储介质 |
CN113805882A (zh) * | 2021-09-18 | 2021-12-17 | 上海波顿诺华智能科技有限公司 | 应用程序开发的方法、装置、电子设备及存储介质 |
CN113867848A (zh) * | 2020-06-30 | 2021-12-31 | 腾讯科技(深圳)有限公司 | 图形接口的调用方法、装置、设备及可读存储介质 |
CN115599359A (zh) * | 2022-10-28 | 2023-01-13 | 中国建设银行股份有限公司(Cn) | 一种代码生成方法、装置、设备及介质 |
CN117008923A (zh) * | 2023-09-28 | 2023-11-07 | 北京智源人工智能研究院 | 基于ai大模型的代码生成和编译部署方法、平台和设备 |
CN117215540A (zh) * | 2023-09-28 | 2023-12-12 | 杭州长川科技股份有限公司 | 远程过程调用框架的代码生成方法、装置和系统 |
CN117270864A (zh) * | 2023-09-13 | 2023-12-22 | 中国银联股份有限公司 | 代码编译方法、装置、设备及存储介质 |
-
2023
- 2023-12-28 CN CN202311832844.8A patent/CN117472336B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020173128A1 (zh) * | 2019-02-27 | 2020-09-03 | 平安科技(深圳)有限公司 | 软件开发工具包的生成方法、装置及终端设备 |
CN112748914A (zh) * | 2020-03-18 | 2021-05-04 | 腾讯科技(深圳)有限公司 | 一种应用程序开发方法、装置、电子设备和存储介质 |
CN113867848A (zh) * | 2020-06-30 | 2021-12-31 | 腾讯科技(深圳)有限公司 | 图形接口的调用方法、装置、设备及可读存储介质 |
CN113805882A (zh) * | 2021-09-18 | 2021-12-17 | 上海波顿诺华智能科技有限公司 | 应用程序开发的方法、装置、电子设备及存储介质 |
CN115599359A (zh) * | 2022-10-28 | 2023-01-13 | 中国建设银行股份有限公司(Cn) | 一种代码生成方法、装置、设备及介质 |
CN117270864A (zh) * | 2023-09-13 | 2023-12-22 | 中国银联股份有限公司 | 代码编译方法、装置、设备及存储介质 |
CN117008923A (zh) * | 2023-09-28 | 2023-11-07 | 北京智源人工智能研究院 | 基于ai大模型的代码生成和编译部署方法、平台和设备 |
CN117215540A (zh) * | 2023-09-28 | 2023-12-12 | 杭州长川科技股份有限公司 | 远程过程调用框架的代码生成方法、装置和系统 |
Non-Patent Citations (3)
Title |
---|
kernel_slicer: high-level approach on top of GPU programming API;Vladimir Frolov Etc.;2022 Ivannikov Ispras Open Conference (ISPRAS);20230422;全文 * |
基于QEMU的动态函数调用跟踪;向勇;曹睿东;毛英明;;计算机研究与发展;20170715(07);全文 * |
嵌入式装置图形化程序代码生成技术;陈宏君 等;电脑编程技巧与维护;20150418;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN117472336A (zh) | 2024-01-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2359247B1 (en) | Transforming user script code for debugging | |
US11694299B2 (en) | Methods and apparatus to emulate graphics processing unit instructions | |
CN102246146B (zh) | 针对使用本地代码模块的web应用的硬件加速图形 | |
US8935683B2 (en) | Inline function linking | |
US8610731B2 (en) | Dynamic graphics pipeline and in-place rasterization | |
US20100306651A1 (en) | Method for creating, exporting, sharing, and installing graphics functional blocks | |
US20100050159A1 (en) | System and process for debugging object-oriented programming code leveraging runtime metadata | |
US20120174079A1 (en) | Systems and methods for simulating a mobile device application | |
WO2015183855A1 (en) | Graphics pipeline state object and model | |
US20140359585A1 (en) | Method and device for compiling a source program | |
CN113918195A (zh) | 应用界面更新方法、装置、电子设备及可读存储介质 | |
US20120284701A1 (en) | Efficient conditional flow control compilation | |
CN112199087A (zh) | 一种应用开发环境的配置方法、装置、设备及存储介质 | |
CN115357516A (zh) | 一种渲染问题的调试方法、装置、设备及存储介质 | |
Lapinski | Vulkan Cookbook | |
Kosarevsky et al. | 3D Graphics Rendering Cookbook: A comprehensive guide to exploring rendering algorithms in modern OpenGL and Vulkan | |
CN117472336B (zh) | 基于程序api的代码生成装置及其方法、设备及介质 | |
US10620980B2 (en) | Techniques for native runtime of hypertext markup language graphics content | |
CN111383164A (zh) | 图形处理单元、计算系统及其操作方法 | |
Szűcs | Improving graphics programming with shader tests | |
Gohil et al. | Performance optimization opportunities in the Android software stack | |
Bier et al. | Development of the multi-platform human-computer interaction for mobile and wearable devices | |
Liang et al. | A mobile integrated development environment for C programming | |
Bechini et al. | Performance‐steered design of software architectures for embedded multicore systems | |
Olsson et al. | Investigation of High-Level Language Support in a Resource-Constrained Embedded Environment |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |