大数据,机器学习,人工智能人工智能/模式识别/机器学习精华专题我爱编程

TensorFlow技术内幕(八):模型优化之XLA(下)

2018-06-18  本文已影响21人  Jony0917

上一章我们分析了XLA在TensofFlow中的两种调用方式AOT和JIT,本章分析XLA编译器的实现。

LLVM

提到编译器就不得不提大名鼎鼎的LLVM。LLVM是一个编译器框架,由C++语言编写而成,包括一系列分模块、可重用的编译工具。

LLVM框架的主要组成部分有:

图1:LLVM框架结构

LLVM为不同的语言提供了同一种中间表示LLVM IR,这样子如果我们需要开发一种新的语言的时候,我们只需要实现对应的前端模块,如果我们想要支持一种新的硬件,我们只需要实现对应的后端模块,其他部分可以复用。

XLA目录结构

XLA的实现目录是tensorflow/compiler,目录结构如下:

目录名 功能
aot aot编译相关代码,前面分析的tfcompile_tool代码就在这里
jit jit编译相关代码,例如xlalaunch节点的OpKenel、XLA相关的计算图重构,都在这里
plugin 此模块看起来还没完成,暂不分析
tests 测试代码
tf2xla GraphDef转化为XLA Hlo IR代码
xla xla编译器核心代码,HLO IR转化为LLVM IR以及机器码的生成

XLA编译

XLA也是基于LLVM框架开发的,前端的输入是Graph,前端没有将Graph直接转化为LLVM IR,而是转化为了XLA的自定义的中间表示HLO IR.并且为HLO IR设计了一系列的优化器。经过优化的HLO IR接下来会被转化为LLVM IR。

图2:XLA框架结构

具体来说包含了下列几步:

AOT

AOT编译流程图:

图3:AOT编译流程

对照图2来分析一下AOT编译流程:

JIT

JIT编译流程图:

图4:JIT编译流程

JIT对比AOT来说,过程比较类似,略过共同的部分,我们来分析一下:

上一篇 下一篇

猜你喜欢

热点阅读