《LabVIEW 编译器深层解析.docx》由会员分享,可在线阅读,更多相关《LabVIEW 编译器深层解析.docx(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、LabVIEW编译器深层解析jinyue导语:NILabVIEW软件是一种多规范的图形化编程环境,含有多种概念,包括数据流,面向对象,以及事件驱动编程。编译程序设计是一个复杂的话题,即便对内行的软件工程师来讲也要考虑很多专业知识。NILabVIEW软件是一种多规范的图形化编程环境,含有多种概念,包括数据流,面向对象,以及事件驱动编程。LabVIEW也是跨越多种平台的,能够很好地用于多种操作系统OSs,芯片组,嵌入式设备,以及现场可编程门阵列(FPGAs)。LabVIEW编译程序是一种精细的系统,在过去的20年中具有令人瞩目的发展。探索NI公司的LabVIEW编译程序的处理经过以及近来编译程序的
2、创新。LabVIEW编译程序处理经过首先一个VI的编译是类的扩展,主要负责将隐含的类解析为适于终端输出与检查句法错误的类型。在类扩展之后,VI从编辑模型转化为能够被编译程序使用的数据流中间表示(DFIR)图表。编译程序执行几种变换,例如在DFIR图表分解经过中的死码删除,优化,并为代码生成做好准备。DFIR接下来被转化成底层的虚拟机(LLVM)中间表示(IR),有关IR的一系列扫描被运行,以利于更进一步的优化与底层化最终变为机器码。DFIR提供一种高级的中间表示DFIR是一种分级的,构造图代码的,基于图表的IR。类似于G代码,DFIR包含很多具有端点的节点,能够与其它端点相连。一些节点,例如框
3、图,含有图表,这些图表可以以依此类推地包含其它节点。图1显示了一个简单VI的最初DFIR。当LabVIEW初次为VI创立一个DFIR时,这是一种G代码的直接翻译,DFIR图表中的节点具有像G代码中节点一样的一对一的对应性。随着编译程序的执行,DFIR节点有可能被移动,部分分离,或者是增加,然而编译程序将仍然保留原有的特性,例如LabVIEW代码中固有的并行特性。图1.查看一个简单VI的初始DFIR图表DFIR能够为LabVIEW编译程序提供两种可观的优势:1.DFIR将编辑程序从编译程序的表示中分离在DFIR出现以前,LabVIEW具有一个单独的VI表示,由编辑程序和编译程序分享。这样在编译经
4、过中,阻止了编译程序修改表示,也会使引入编译程序优化很困难。DFIR引入了一系列的优化与分解措施,能够极大地提高LabVIEW代码的性能,仅要求构造图节点与连线被断开并能够移动。2.DFIR作为多个编译程序的前段与后段的公用连接点今天,LabVIEW能处理很多明显不同的任务。类似地,LabVIEW也为用户提供了多种算法形式,例如LabVIEWMathScript,C一体化,仿真图表,以及状态表statecharts。DFIR提供了一种常用IR,它由前端生成而由后端使用,使不同组合的重新使用愈加便利。DFIR分解与优化一旦进入DFIR,VI运行一系列的分解变换,来缩减或标准化DFIR图表。在DF
5、IR图表彻底分解后,DFIR优化扫描开场。有超过30种分解与优化能够提高LabVIEW代码的性能。请仔细查看图2和3显示的简单VI,它被称为TrimWhitespaceVI(TrimWhitespace.vi),来自vi.lib。图2.这是任意DFIR分解前的VI图3.上面是TrimWhitespace.vi构造图的定义首先,TrimWhitespace.vi被内联到调用VI,如图4所示。如今,不可达代码与死码删除运算能够简化代码。第一个条件构造将总是执行一样的分支,由于输入的是一个恒定值。因而,其余的分支能够同整个第二个条件构造一起移走,由于它们从不执行。循环不变式代码移动将匹配形式基元Ma
6、tchPatternprimitive移出循环框,确保其只被执行一次,如图5所示。图4.subVI内联到调用程序,导致一个DFIR图表等价于该G代码图5.一次执行产生优化的DFIR图表DFIR后端变换在DFIR图表被分解与优化后,后端变换开场执行。这些变换评估并注解DFIR图表,为最终将DFIR图表降低为LLVMIR做好准备。聚丛程序负责将节点归为簇,这些簇能够并行运行。替代程序识别何时分配的数据能够重新使用,何时必须制作副本。在替代程序运行后,分配程序预留出VI执行所需的内存空间。最后,编码发生器负责将DFIR图表转化为可执行的机器指令用于目的处理器。LLVM提供一种底层的中间表示LLVM是
7、一种多用处,高性能,源代码开放的构架,原来是伊利诺斯州州立大学的作为研究项目而发明的。LLVM由于其灵敏性,简洁的API以及不受许可的限制,被广泛用于学术研究与工业生产。在LabVIEW2020版本,LabVIEW编码生成器使用LLVM来生成目的机器码。在从DFIR图表创立编码流后,LabVIEW访问每个指令并创立一个等价的LLVM表示。软件会激活多种优化扫描,最终,LLVM准时制(JIT)构架在内存中创立可执行的机器指令。如今LabVIEW能够使用LLVM来执行指令综合,跳变线程,聚合标量替代scalarreplacementofaggregates,条件扩展,尾端调用删除,循环不变代码移出,死码删除以及循环展开。DFIR与LLVM协同工作DFIR是高级的IR具有并行性,而LLVM是底层IR,具有目的机器特性的认知,二者协同工作以优化开发者为处理器构造而编写的LabVIEW代码,它们能够在处理器上被执行。ChrisWoodChrisWood是NI公司LabVIEW方面的传感器软件工程师。他拥有德克萨斯AM大学计算机工程专业的学士学位。CraigSmithCraigSmith是NI公司的首席软件工程师0