CN115576604A - 一种跨平台开发系统 - Google Patents
一种跨平台开发系统 Download PDFInfo
- Publication number
- CN115576604A CN115576604A CN202211210050.3A CN202211210050A CN115576604A CN 115576604 A CN115576604 A CN 115576604A CN 202211210050 A CN202211210050 A CN 202211210050A CN 115576604 A CN115576604 A CN 115576604A
- Authority
- CN
- China
- Prior art keywords
- language
- syntax tree
- abstract syntax
- code
- host
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/76—Adapting program code to run in a different environment; Porting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- 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
-
- 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/44—Encoding
- G06F8/447—Target code generation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请提供了一种跨平台开发系统,包括:计算前端,用于通过元编程技术提供适用于多种宿主语言的嵌入式的领域特定语言,供用户编程生成计算任务代码;构造单元,用于根据所述计算任务代码构造抽象语法树;转换单元,用于根据所述抽象语法树转换出可执行代码或着色器对象。通过上述技术方案可以实现跨平台编程开发。
Description
技术领域
本发明涉及但不限于计算机领域,尤其涉及跨平台开发系统。
背景技术
随着计算机图形学的发展,真实感渲染技术被广泛应用于建筑设计、影视制作等领域。真实感渲染常采用蒙特卡洛路径追踪算法,需要对图像的每个像素进行数百至数千次光路模拟,需要极大的计算量。为提高计算效率,开发者往往使用多核、向量化加速的CPU(Central Processing Unit,中央处理器)进行并行计算。近年来,GPU(GraphicsProcessing Unit,图形处理器)硬件的发展和专用光线追踪加速模块的出现,使得使用GPU进行并行渲染也越发受到关注。
然而,真实感渲染器的开发需要克服诸多困难与挑战:一方面,为了支持复杂的几何、材质、光照效果,以及灵活多样的工作流程,渲染器往往是极其复杂的软件系统,需要优秀的架构设计与扩展能力,但目前的计算编程语言往往独立于应用语言且缺乏表达力(如缺少泛型、多态等语言设施);另一方面,计算密集的特点使得渲染系统设计时需要同时考虑对相应硬件平台的针对性优化,但目前不同计算设备编程接口与语言呈现碎片化,使得开发跨平台渲染系统的难度被进一步放大。软件开发的便利性与扩展性、编程语言与模型的表达能力和系统的运行时效率等目标互相影响、互相限制,现有技术很难对其进行平衡。
发明内容
本申请所要解决的技术是提供一种跨平台开发系统,可以实现跨平台编程开发。
为了解决上述技术问题,本申请提供一种跨平台开发系统,包括:
计算前端,用于通过元编程技术提供适用于多种宿主语言的嵌入式的领域特定语言,供用户编程生成计算任务代码;
构造单元,用于根据所述计算任务代码构造抽象语法树;
转换单元,用于根据所述抽象语法树转换出可执行代码或着色器对象。
在一种示例性实施例中,所述构造单元,用于根据所述计算任务代码构造抽象语法树包括:
当宿主语言为静态语言时,记录所述计算任务代码中以下内容的一种或者多种:字面量与常量数组、变量的定义与引用、函数参数与资源绑定、变量间的算术、逻辑运算表达式、函数调用、语句块与控制流;
根据记录的内容构造抽象语法树。
在一种示例性实施例中,所述构造单元,用于根据所述计算任务代码构造抽象语法树包括:
当宿主语言为动态解释语言时,遍历所述宿主语言的源代码语法树,记录所述源代码语法树中以下内容中的一种或者多种:函数、语句、表达式、变量、字面量;
根据记录的内容构造抽象语法树。
在一种示例性实施例中,所述转换单元,用于根据所述抽象语法树转换出可执行代码或着色器对象包括:
将所述抽象语法树翻译为计算后端支持的原生语言或中间表示语言,将所述原生语言或中间表示语言动态编译为可执行代码或着色器对象。
在一种示例性实施例中,所述将所述抽象语法树翻译为计算后端支持的原生语言或中间表示语言包括:
根据计算任务代码的参数和变量生成计算函数声明和/或着色器绑定声明;
根据所述抽象语法树中定义的计算后端的变量信息,在函数定义体内生成局部变量定义;
遍历所述抽象语法树中的语句,将每条语句翻译为计算后端支持的原生语言或中间表示语言。
在一种示例性实施例中,所述系统还包括:
计算后端,用于运行所述可执行代码或着色器对象。
在一种示例性实施例中,所述系统还包括:
统一设备接口,用于实现计算任务代码在不同计算后端的运行,包括:
通过以下服务中的一种或者多种实现计算任务代码在不同计算后端的运行:应用程序上下文管理、设备管理、硬件资源管理、调度和同步管理。
在一种示例性实施例中,所述计算后端,用于运行所述可执行代码或着色器对象包括:
调用所述统一设备接口运行所述可执行代码或着色器对象。
在一种示例性实施例中,所述计算前端,用于通过元编程技术提供适用于多种宿主语言的嵌入式的领域特定语言,供用户编程生成计算任务代码包括:
当宿主语言为静态语言时,通过所述宿主语言的运算符和函数重载,提供适用于多种宿主语言的嵌入式的领域特定语言;
当宿主语言为动态解释语言时,通过所述宿主语言编程计算任务代码。
在一种示例性实施例中,所述当宿主语言为动态解释语言时,遍历所述宿主语言的源代码的语法树,记录所述源代码语法树中以下内容中的一种或者多种:函数、语句、表达式、变量、字面量;根据记录的内容构造抽象语法树包括:
对于每个宿主语言中的用户定义函数,分别通过该宿主语言中自带的源代码获取指令得到用户定义函数的源代码,并通过该宿主语言中自带的语法分析指令得到该源代码的语法树;
对于所得到的每个宿主语言的语法树,分别遍历其节点,构造相关的函数接口,构造所述抽象语法树。
本申请提供一种跨平台开发系统,包括:计算前端,用于通过元编程技术提供适用于多种宿主语言的嵌入式的领域特定语言,供用户编程生成计算任务代码;构造单元,用于根据所述计算任务代码构造抽象语法树;转换单元,用于根据所述抽象语法树转换出可执行代码或着色器对象。通过上述技术方案可以实现跨平台编程开发。
附图说明
附图用来提供对本申请技术方案的理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本申请的技术方案,并不构成对本申请技术方案的限制。
图1是本申请实施例一的跨平台开发系统的示意图;
图2是本申请实施例一的跨平台开发系统的另一示意图;
图3是本申请实施例一的跨平台开发系统的代码示例;
图4是本申请实施例一的跨平台开发系统的另一代码示例。
具体实施方式
本申请描述了多个实施例,但是该描述是示例性的,而不是限制性的,并且对于本领域的普通技术人员来说显而易见的是,在本申请所描述的实施例包含的范围内可以有更多的实施例和实现方案。尽管在附图中示出了许多可能的特征组合,并在具体实施方式中进行了讨论,但是所公开的特征的许多其它组合方式也是可能的。除非特意加以限制的情况以外,任何实施例的任何特征或元件可以与任何其它实施例中的任何其他特征或元件结合使用,或可以替代任何其它实施例中的任何其他特征或元件。
本申请包括并设想了与本领域普通技术人员已知的特征和元件的组合。本申请已经公开的实施例、特征和元件也可以与任何常规特征或元件组合,以形成由权利要求限定的独特的发明方案。任何实施例的任何特征或元件也可以与来自其它发明方案的特征或元件组合,以形成另一个由权利要求限定的独特的发明方案。因此,应当理解,在本申请中示出和/或讨论的任何特征可以单独地或以任何适当的组合来实现。因此,除了根据所附权利要求及其等同替换所做的限制以外,实施例不受其它限制。此外,可以在所附权利要求的保护范围内进行各种修改和改变。
此外,在描述具有代表性的实施例时,说明书可能已经将方法和/或过程呈现为特定的步骤序列。然而,在该方法或过程不依赖于本文所述步骤的特定顺序的程度上,该方法或过程不应限于所述的特定顺序的步骤。如本领域普通技术人员将理解的,其它的步骤顺序也是可能的。因此,说明书中阐述的步骤的特定顺序不应被解释为对权利要求的限制。此外,针对该方法和/或过程的权利要求不应限于按照所写顺序执行它们的步骤,本领域技术人员可以容易地理解,这些顺序可以变化,并且仍然保持在本申请实施例的精神和范围内。
实施例一
如图1所示,本实施例提供一种跨平台开发系统,包括:
计算前端10,用于通过元编程技术提供适用于多种宿主语言的嵌入式的领域特定语言,供用户编程生成计算任务代码;
构造单元11,用于根据所述计算任务代码构造抽象语法树;
转换单元12,用于根据所述抽象语法树转换出可执行代码或着色器对象。
在一种示例性实施例中,所述构造单元,用于根据所述计算任务代码构造抽象语法树包括:
当宿主语言为静态语言时,记录所述计算任务代码中以下内容的一种或者多种:字面量与常量数组、变量的定义与引用、函数参数与资源绑定、变量间的算术、逻辑运算表达式、函数调用、语句块与控制流;
根据记录的内容构造抽象语法树。
在一种示例性实施例中,所述构造单元,用于根据所述计算任务代码构造抽象语法树包括:
当宿主语言为动态解释语言时,遍历所述宿主语言的源代码语法树,记录所述源代码语法树中以下内容中的一种或者多种:函数、语句、表达式、变量、字面量;
根据记录的内容构造抽象语法树。
在一种示例性实施例中,所述转换单元,用于根据所述抽象语法树转换出可执行代码或着色器对象包括:
将所述抽象语法树翻译为计算后端支持的原生语言或中间表示语言,将所述原生语言或中间表示语言动态编译为可执行代码或着色器对象。
在一种示例性实施例中,所述将所述抽象语法树翻译为计算后端支持的原生语言或中间表示语言包括:
根据计算任务代码的参数和变量生成计算函数声明和/或着色器绑定声明;
根据所述抽象语法树中定义的计算后端的变量信息,在函数定义体内生成局部变量定义;
遍历所述抽象语法树中的语句,将每条语句翻译为计算后端支持的原生语言或中间表示语言。
在一种示例性实施例中,所述系统还包括:
计算后端,用于运行所述可执行代码或着色器对象。
在一种示例性实施例中,所述系统还包括:
统一设备接口,用于实现计算任务代码在不同计算后端的运行,包括:
通过以下服务中的一种或者多种实现计算任务代码在不同计算后端的运行:应用程序上下文管理、设备管理、硬件资源管理、调度和同步管理。
在一种示例性实施例中,所述计算后端,用于运行所述可执行代码或着色器对象包括:
调用所述统一设备接口运行所述可执行代码或着色器对象。
在一种示例性实施例中,所述计算前端,用于通过元编程技术提供适用于多种宿主语言的嵌入式的领域特定语言,供用户编程生成计算任务代码包括:
当宿主语言为静态语言时,通过所述宿主语言的运算符和函数重载,提供适用于多种宿主语言的嵌入式的领域特定语言;
当宿主语言为动态解释语言时,通过所述宿主语言编程计算任务代码。
在一种示例性实施例中,所述当宿主语言为动态解释语言时,遍历所述宿主语言的源代码的语法树,记录所述源代码语法树中以下内容中的一种或者多种:函数、语句、表达式、变量、字面量;根据记录的内容构造抽象语法树包括:
对于每个宿主语言中的用户定义函数,分别通过该宿主语言中自带的源代码获取指令得到用户定义函数的源代码,并通过该宿主语言中自带的语法分析指令得到该源代码的语法树;
对于所得到的每个宿主语言的语法树,分别遍历其节点,构造相关的函数接口,构造所述抽象语法树。
下面进一步说明本实施例的跨平台开发系统。
如图2所示,本实施例的跨平台开发系统可以包含五个模块:1)嵌入式领域特定语言模块21(相当于前述计算前端);2)抽象语法树构造模块22(相当于前述构造单元);3)即时代码生成与编译模块23(相当于前述转换单元);4)统一设备接口24;5)计算后端25。
用户编写渲染器等并行计算的图形应用时,仅需使用统一的嵌入式领域特定语言完成对计算任务代码的编程,通过统一设备接口完成资源管理、执行调度,而不必关心具体的计算后端的编程语言与编程接口。
其中,嵌入式的领域特定语言用于在C++、Python等宿主语言内部实现跨平台、计算后端无关的计算任务代码编程;编程后的计算任务,会在运行时被追踪并构造为抽象语法树,通过抽象语法树作为中间表示;代码生成与编译模块根据抽象语法树生成计算后端的原生计算代码、并编译为可执行对象。此外,统一设备接口为本框架提供应用程序上下文、设备、资源、指令执行等管理和调度功能,后端实现则是计算任务的最终执行器,并对统一运行时中的接口进行了实现。
以下是对这些模块的具体介绍。
1)嵌入式领域特定语言模块
如图3的代码示例所示,在以C++为宿主语言的计算前端中,用户通过宏、运算符重载、函数重载等技术,模拟了所需领域特定语言所需要的语法设施,
具体的,可以通过C++提供的运算符和函数重载能力,使用Var<T>模板类表示计算设备上的变量,并为其重载了各种运算符与内置函数(如pow等)。在调用同名函数时,C++编译器能够根据参数类型选择正确的重载,从而实现与宿主端变量进行区分。对计算后端变量的重载函数,将调用抽象语法树构造的接口。例如,对Var<T>::operator+()的调用,将构造一个双目运算加法的语法树节点。对于控制流语句,由于C++中并不存在直接追踪的方法,可以使用宏(如$if、$while、$for、$break、$continue等)对相应功能进行模拟。以上方案能够在完全遵从C++语法的前提下,提供领域特定语言所需的功能特性。
同时,可以通过模板偏特化技术对计算端变量进行类型萃取与推导。具体地,本框架使用“替代失败不是错误”(substitution failure is not an error,SFINAE)技术和C++20提供的“概念”(concepts)语法特性对计算端变量上的运算操作进行类型检查与约束。例如,二维浮点向量类型(Var<float2>)的对象与二维整数向量类型(Var<int2>)的加法操作,将使编译器检查运算符operator+(float2,int2)的合法性,并在编译期给出类型匹配错误。这使本框架可利用C++编译器本身的类型检查能力实现对计算任务代码的静态类型检查。
对于Python等动态解释型语言,无需模拟领域特定语言的语法设施,而是借用原生宿主语言语法(其中需要设定标记,如所提及的@luisa.func装饰器),将宿主语言的抽象语法树进行翻译。用户可以直接使用Python语言编写计算任务(通过装饰器标记这些函数)、调用运行时功能(通过C++导出至Python的API接口,如分配、释放缓存、贴图等)。
2)抽象语法树构造
对于用户编写的计算任务代码,在运行时对其进行追踪与记录,结果以抽象语法树的中间形式记录。
对于C++等静态语言,嵌入其中的领域特定语言通过宏、模板编程等技术实现。由于C++语言本身不具备自省获取源代码的能力,因此抽象语法树的构造可以通过追踪实现。记录内容包括字面量与常量数组;变量的定义与引用;函数参数与资源绑定;变量间的算术、逻辑等运算的表达式;函数调用;语句块与控制流等。例如,Var<T>对象的构造函数将记录计算变量的创建;关于Var<T>变量的运算符重载和函数重载将其上的算数、逻辑、关系运算与函数调用等操作记录为相应的表达式节点;前述的$if、$switch等宏则展开为抽象语法树中的语句块与控制流;对计算后端资源的访问记录为计算任务的资源绑定。图4给出了对语句auto y=x*12.92f追踪记录过程的伪代码表达。
对于Python等动态解释语言,我们则可以利用其自省能力直接获取其中源代码的抽象语法树,并翻译为本框架所使用的抽象语法树结构。Python内建包提供的抽象语法树主要为Python语言设计和使用,并不能直接用于本框架,因此我们需要将其翻译至本框架的抽象语法树表达。翻译过程通过对Python抽象语法树的遍历实现,在此过程中将Python函数、语句、表达式、变量、字面量等逐一通过调用本框架导出的外部函数接口进行抽象语法树构造。例如,对于使用@luisa.func装饰器标注的Python函数,可以通过Python内置包inspect提供的getsourcelines等方法得到被标注函数的Python源代码,再通过Python内置包ast中的parse方法得到对应Python源码的抽象语法树。对所得的Python抽象语法树,本框架遍历其节点,并通过从C++中导出的抽象语法树构造相关的函数接口,构造本框架所使用的抽象语法树。
本框架的抽象语法树与通用编程语言的抽象语法树相似,但对计算后端计算任务编程可以提供更多的支持,例如线程坐标查询、计算后端只读常量内存、线程组同步与共享内存、计算后端资源访问等内置函数。
本框架抽象语法树的构造接口在C++中实现,这些接口被导出至Python中,以Python作为宿主语言时,在抽象语法树翻译的过程中对这些接口进行调用,从而实现“将Python抽象语法树翻译为本框架抽象语法树”的功能。外部函数接口指的是从C++导出、供Python等非C++语言调用的函数接口;统一设备接口指对计算后端API进行封装后的抽象编程接口;外部函数接口的导出内容包括抽象语法树构造接口和统一设备接口两部分,可以视为本框架对接原生C++之外的其他宿主语言时提供的调用接口。
3)即时代码生成与编译模块
作为中间形式记录的抽象语法树表示并不能被直接执行,需要将其翻译为各计算后端所支持的原生计算语言(如CUDA、Metal Shading Language、ISPC、HLSL等)或编译器中间表示语言(如LLVM IR等)。翻译过程通过遍历抽象语法树完成,生成函数、语句、变量声明、表达式等原生语言结构。
可以通过以下步骤实现:
1、准备字符缓冲区用于存放生成代码;
2、在字符缓冲区中加入引用计算后端基础函数库的代码,例如对CUDA后端将包含CUDA的基本数学库;其中基础函数库的代码用于提供例如向量类型、数学运算等预定义功能的函数实现,供后续翻译代码中的相关函数调用使用。
3、根据计算任务参数与捕获变量生成相应的计算函数声明和/或着色器绑定声明;
其中,绑定声明用于根据不同的计算后端进行不同的处理,相当于着色器代码中的绑定声明、核(kernel)函数的入口参数等,用于宿主端向设备端传递参数
4、根据抽象语法树中定义的计算后端变量信息,在函数定义体(即用户编写的计算任务函数)内生成局部变量定义;
5、遍历抽象语法树中的语句,将其逐条翻译为计算后端计算语言的对应语法结构,例如,将条件语句节点翻译为计算后端if语句、将赋值节点翻译为计算后端变量的赋值语句等;
6、对于每个语句节点,将其中的表达式树翻译为计算后端计算语言的表达式,例如将双目加法节点翻译为计算后端的加法表达式、将函数调用节点翻译为计算后端的函数调用等;
表达式是语句的组成部分,对语句节点的翻译过程包括对其中所使用的表达式的翻译。
7、结束代码生成,从字符缓冲区中获得翻译后的计算后端原生计算源代码。
由于使用了抽象语法树这一中间表达形式,能够记录用户编写代码的结构信息,避免信息损失。同时也为计算后端代码生成、指令选择等过程提供了自由度,保证了系统的运行效率。
翻译过程在运行时动态完成,所得原生代码随后被相应计算后端即时编译为计算设备所支持的可执行代码。即时代码生成与编译技术的应用,使得用户对计算任务的编程成为一个“元编程”阶段。
本申请中的抽象语法树是动态构造的,用户可以利用程序运行时的信息来控制抽象语法树的构造行为,例如,可以根据程序输入选择完全跳过某一部分的生成。因此可以依托宿主语言的表达能力实现泛型编程、多态等高阶抽象模式,并直接控制计算后端代码简化、展开、特化、内联等优化,在提供完善的语言表达力的同时,保证计算后端代码的运行效率。
4)统一设备接口
统一设备接口对不同计算后端提供的具体编程接口进行了抽象和封装。对这些抽象接口的调用通过虚函数转发至计算后端的虚函数重载实现上,计算后端通过调用原生图形API的相关接口完成对应功能。运行可执行代码和着色器对象主要通过“执行调度与同步”接口来实现。
统一设备接口除支持计算任务代码的统一编程外,还需要提供对设备、硬件资源、计算命令的调度管理接口。统一设备接口提供了相应的前端编程接口与硬件抽象层以实现统一的跨平台运行时管理。
其主要功能包括:
1、应用程序上下文管理,通过解析传递给应用程序(指用户在本框架基础上设计实现的应用程序)的命令参数,获取应用程序的工作目录、运行时库目录、缓存目录等,并提供动态运行库加载等基本功能。
2、设备管理,提供动态加载计算后端插件的能力,通过解析和传递应用程序命令行的相应参数至其中的构造函数,完成计算后端的创建。
3、硬件资源管理,针对计算任务所需要的缓冲、贴图等资源的管理提供了一套抽象的虚函数接口,对其的调用将转发至实际计算后端重写的接口实现上。
4、执行调度与同步,提供了一套后端无关的中间命令表示(如贴图、缓冲数据的上传与下载;光线追踪加速结构的构建与更新;等等),以及命令队列、同步事件等设施用于计算任务的调度与同步。中间命令表示将通过抽象设备接口转发至计算后端的实际实现。
本实施例中,不同软硬件平台对这些功能提供的接口是不同的,且更为底层的。例如,目前常用的图形API有Metal、DirectX、Vulkan等,提供的设备管理、硬件资源管理、着色器编译、执行调度与同步的接口各不相同。本框架的统一设备接口对这些不同的编程接口做了抽象与包装,为用户提供了统一的编程接口。此外,本框架抽象语法树的构建与统一设备接口关系松耦合,着色器可视为一种硬件资源,因此即时代码生成与编译模块通过统一设备接口中的“硬件资源管理接口”转发至计算后端完成。执行编译后的着色器则涉及“执行调度与同步”接口,即构造计算任务派发命令后传递给计算后端执行。
5)计算后端
计算后端基于不同的平台和计算设备编程接口(如CUDA、Metal、DirectX、ISPC、LLVM JIT等)对前述的即时代码生成与编译、统一设备接口的硬件抽象层等进行了具体实现。实现时,不同后端可分别依据其特性进行针对性优化,提高系统执行效率。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
Claims (10)
1.一种跨平台开发系统,其特征在于,包括:
计算前端,用于通过元编程技术提供适用于多种宿主语言的嵌入式的领域特定语言,供用户编程生成计算任务代码;
构造单元,用于根据所述计算任务代码构造抽象语法树;
转换单元,用于根据所述抽象语法树转换出可执行代码或着色器对象。
2.如权利要求1所述的系统,其特征在于,所述构造单元,用于根据所述计算任务代码构造抽象语法树包括:
当宿主语言为静态语言时,记录所述计算任务代码中以下内容的一种或者多种:字面量与常量数组、变量的定义与引用、函数参数与资源绑定、变量间的算术、逻辑运算表达式、函数调用、语句块与控制流;
根据记录的内容构造抽象语法树。
3.如权利要求1所述的系统,其特征在于,所述构造单元,用于根据所述计算任务代码构造抽象语法树包括:
当宿主语言为动态解释语言时,遍历所述宿主语言的源代码语法树,记录所述源代码语法树中以下内容中的一种或者多种:函数、语句、表达式、变量、字面量;
根据记录的内容构造抽象语法树。
4.如权利要求1所述的系统,其特征在于,所述转换单元,用于根据所述抽象语法树转换出可执行代码或着色器对象包括:
将所述抽象语法树翻译为计算后端支持的原生语言或中间表示语言,将所述原生语言或中间表示语言动态编译为可执行代码或着色器对象。
5.如权利要求4所述的系统,其特征在于,所述将所述抽象语法树翻译为计算后端支持的原生语言或中间表示语言包括:
根据计算任务代码的参数和变量生成计算函数声明和/或着色器绑定声明;
根据所述抽象语法树中定义的计算后端的变量信息,在函数定义体内生成局部变量定义;
遍历所述抽象语法树中的语句,将每条语句翻译为计算后端支持的原生语言或中间表示语言。
6.如权利要求1所述的系统,其特征在于,所述系统还包括:
计算后端,用于运行所述可执行代码或着色器对象。
7.如权利要求6所述的系统,其特征在于,所述系统还包括:
统一设备接口,用于实现计算任务代码在不同计算后端的运行,包括:
通过以下服务中的一种或者多种实现计算任务代码在不同计算后端的运行:应用程序上下文管理、设备管理、硬件资源管理、调度和同步管理。
8.如权利要求7所述的系统,其特征在于,所述计算后端,用于运行所述可执行代码或着色器对象包括:
调用所述统一设备接口运行所述可执行代码或着色器对象。
9.如权利要求1所述的系统,其特征在于,所述计算前端,用于通过元编程技术提供适用于多种宿主语言的嵌入式的领域特定语言,供用户编程生成计算任务代码包括:
当宿主语言为静态语言时,通过所述宿主语言的运算符和函数重载,提供适用于多种宿主语言的嵌入式的领域特定语言;
当宿主语言为动态解释语言时,通过所述宿主语言编程计算任务代码。
10.如权利要求3所述的系统,其特征在于,所述当宿主语言为动态解释语言时,遍历所述宿主语言的源代码的语法树,记录所述源代码语法树中以下内容中的一种或者多种:函数、语句、表达式、变量、字面量;根据记录的内容构造抽象语法树包括:
对于每个宿主语言中的用户定义函数,分别通过该宿主语言中自带的源代码获取指令得到用户定义函数的源代码,并通过该宿主语言中自带的语法分析指令得到该源代码的语法树;
对于所得到的每个宿主语言的语法树,分别遍历其节点,构造相关的函数接口,构造所述抽象语法树。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211210050.3A CN115576604A (zh) | 2022-09-30 | 2022-09-30 | 一种跨平台开发系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211210050.3A CN115576604A (zh) | 2022-09-30 | 2022-09-30 | 一种跨平台开发系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115576604A true CN115576604A (zh) | 2023-01-06 |
Family
ID=84582380
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211210050.3A Pending CN115576604A (zh) | 2022-09-30 | 2022-09-30 | 一种跨平台开发系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115576604A (zh) |
-
2022
- 2022-09-30 CN CN202211210050.3A patent/CN115576604A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Vouillon et al. | From bytecode to JavaScript: the Js_of_ocaml compiler | |
US8756590B2 (en) | Binding data parallel device source code | |
Martinez et al. | CU2CL: A CUDA-to-OpenCL translator for multi-and many-core architectures | |
CN111831287B (zh) | 用于确定执行代码段所需的资源的方法、设备和程序产品 | |
JP5415557B2 (ja) | デバッギングのためのユーザ・スクリプト・コードの変換 | |
Auerbach et al. | A compiler and runtime for heterogeneous computing | |
US8997066B2 (en) | Emulating pointers | |
CN111832736A (zh) | 用于处理机器学习模型的方法、设备和计算机程序产品 | |
CN103858099A (zh) | 用于在异构计算机上编译和运行高级程序的技术 | |
CN111061638B (zh) | 一种iOS系统调试的方法、装置及服务器 | |
EP2805232B1 (en) | Predication of control flow instructions having associated texture load instructions for a graphics processing unit | |
JP2011065220A (ja) | コンパイラ・プログラム、コンパイル方法及びコンピュータ・システム | |
CN113196243A (zh) | 使用编译器生成的仿真优化元数据改进仿真和跟踪性能 | |
Wozniak et al. | Language features for scalable distributed-memory dataflow computing | |
US8539458B2 (en) | Transforming addressing alignment during code generation | |
WO2022237590A1 (zh) | 智能合约升级方法及区块链系统 | |
Rasch et al. | dOCAL: high-level distributed programming with OpenCL and CUDA | |
DeVito et al. | First-class runtime generation of high-performance types using exotypes | |
US9141356B2 (en) | Process for generating dynamic type | |
ES2908651T3 (es) | Instrucciones reducidas para generar direcciones de variables globales | |
McCormick et al. | Exploring the construction of a domain-aware toolchain for high-performance computing | |
US11573777B2 (en) | Method and apparatus for enabling autonomous acceleration of dataflow AI applications | |
CN115576604A (zh) | 一种跨平台开发系统 | |
Matz et al. | Automated partitioning of data-parallel kernels using polyhedral compilation | |
CN111913712A (zh) | 用于在Web端部署神经网络模型的方法和装置 |
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 |