diff --git a/chapter_frontend_and_ir/intermediate_representation.md b/chapter_frontend_and_ir/intermediate_representation.md
index 2a04c46..5cb1f31 100644
--- a/chapter_frontend_and_ir/intermediate_representation.md
+++ b/chapter_frontend_and_ir/intermediate_representation.md
@@ -10,8 +10,8 @@
引入中间表示后,中间表示既能面向多个前端,表达多种源程序语言,又能对接多个后端,连接不同目标机器,如 :numref:`intermediate_representation`所示。在此基础上,编译流程就可以在前后端直接增加更多的优化流程,这些优化流程以现有IR为输入,又以新生成的IR为输出,被称为优化器。优化器负责分析并改进中间表示,极大程度的提高了编译流程的可拓展性,也降低了优化流程对前端和后端的破坏。
-
-:width:`800px`
+
+:width:`850px`
:label:`intermediate_representation`
随着编译器技术的不断演进,中间表示主要经历了三个发展阶段。在早期阶段,中间表示是封闭在编译器内部的,供编译器编写者使用。在中期阶段,随着编译器的开源,中间表示逐步开源公开,主要供编译器设计者、分析工具设计者使用。现阶段,中间表示朝着软件生态构建的方向发展,旨在构建统一的中间表示。
@@ -30,14 +30,14 @@
: 中间表示的分类
:::
-1\) 线性中间表示
+1\) 线性中间表示/Users/liangzhibo/Desktop/中间表示-中间表示结构.png
线性中间表示类似抽象机的汇编代码,将被编译代码表示为操作的有序序列,对操作序列规定了一种清晰且实用的顺序。由于大多数处理器采用线性的汇编语言,线性中间表示广泛应用于编译器设计。
常用线性中间表示有堆栈机代码(Stack-Machine Code)和三地址代码(Three
Address Code) :cite:`2007Compilers` 。堆栈机代码是一种单地址代码,提供了简单紧凑的表示。堆栈机代码的指令通常只有一个操作码,其操作数存在一个栈中。大多数操作指令从栈获得操作数,并将其结果推入栈中。三地址代码,简称为3AC,模拟了现代RISC机器的指令格式。它通过一组四元组实现,每个四元组包括一个运算符和三个地址(两个操作数、一个目标)。对于表达式a-b\*5,堆栈机代码和三地址代码如 :numref:`linear_ir`所示。
-
+
:width:`800px`
:label:`linear_ir`
@@ -61,8 +61,8 @@ IR使用线性中间表示表示基本块,使用图中间表示表示这些块
Single Assignment, SSA) :cite:`Richard1995A`
形式呈现,这些指令构成一个指令线性列表。SSA形式要求每个变量只赋值一次,并且每个变量在使用之前定义。控制流图中,每个节点为一个基本块,基本块之间通过边实现控制转移。
-
-:width:`600px`
+
+:width:`800px`
:label:`LLVM_IR`
### 机器学习框架的中间表示
@@ -182,8 +182,8 @@ TensorFlow框架同时支持静态图和动态图,是一个基于数据流编
为了适配不同的硬件平台,基于静态计算图,TensorFlow采用了多种IR设计,其编译生态系统如 :numref:`TFIR`所示。蓝色部分是基于图的中间表示,绿色部分是基于SSA的中间表示。在中间表示的转换过程中,各个层级的中间表示各自为政,无法互相有效地沟通信息,也不清楚其他层级的中间表示做了哪些优化,因此每个中间表示只能尽力将当前的优化做到最好,造成了很多优化在每个层级的中间表示中重复进行, 从而导致优化效率的低下。尤其是从图中间表示到SSA中间表示的变化过大,转换开销极大。此外,各个层级的相同优化的代码无法复用,也降低了开发效率。
-
-:width:`600px`
+
+:width:`1000px`
:label:`TFIR`
4、MLIR
@@ -228,8 +228,8 @@ typed)。每个节点需要有一个具体的类型,这个对于性能最大
在结合MindSpore框架的自身特点后,MindIR的定义如 :numref:`MindIR`所示。
-
-:width:`800px`
+
+:width:`1100px`
:label:`MindIR`
接下来我们通过如下的一段程序作为示例,来进一步分析MindIR。
diff --git a/chapter_frontend_and_ir/summary.md b/chapter_frontend_and_ir/summary.md
index c8a36c3..e341f8e 100644
--- a/chapter_frontend_and_ir/summary.md
+++ b/chapter_frontend_and_ir/summary.md
@@ -1,11 +1,11 @@
-## 总结
+总结
----
- 中间表示是编译器的核心数据结构之一,是程序编译过程中介于源语言和目标语言之间的程序表示。
- 传统编译器的中间表示从组织结构出发,可以分为线性中间表示,图中间表示以及混合中间表示。
-- 机器学习框架的中间对中间表示有一系列新的需求,这些新的需求是传统中间表示所不能完美支持的。因此需要在传统中间表示的基础上扩展新的,更适用于机器学习框架的中间表示。
+- 机器学习框架对中间表示有一系列新的需求,这些新的需求是传统中间表示所不能完美支持的。因此需要在传统中间表示的基础上扩展新的,更适用于机器学习框架的中间表示。
- 自动微分的基本思想是将计算机程序中的运算操作分解为一个有限的基本操作集合,且集合中基本操作的求导规则均为已知,在完成每一个基本操作的求导后,使用链式法则将结果组合得到整体程序的求导结果。
@@ -22,7 +22,7 @@
- 编译优化意在解决编译生成的中间表示的低效性,前端执行的均为与硬件无关的编译优化。
-## 扩展阅读
+扩展阅读
- 一种基于图的中间表示类型: [综述](https://dl.acm.org/doi/10.1145/202530.202534)
diff --git a/img/ch04/中间表示-LLVMIR.png b/img/ch04/中间表示-LLVMIR.png
new file mode 100644
index 0000000..f03bcc7
Binary files /dev/null and b/img/ch04/中间表示-LLVMIR.png differ
diff --git a/img/ch04/中间表示-LLVMIR.svg b/img/ch04/中间表示-LLVMIR.svg
deleted file mode 100644
index a3aa537..0000000
--- a/img/ch04/中间表示-LLVMIR.svg
+++ /dev/null
@@ -1,197 +0,0 @@
-
-
-
-
diff --git a/img/ch04/中间表示-MLIR.png b/img/ch04/中间表示-MLIR.png
new file mode 100644
index 0000000..24affc3
Binary files /dev/null and b/img/ch04/中间表示-MLIR.png differ
diff --git a/img/ch04/中间表示-MLIR.svg b/img/ch04/中间表示-MLIR.svg
deleted file mode 100644
index fddf16b..0000000
--- a/img/ch04/中间表示-MLIR.svg
+++ /dev/null
@@ -1,321 +0,0 @@
-
-
-
-
diff --git a/img/ch04/中间表示-MindIR.png b/img/ch04/中间表示-MindIR.png
new file mode 100644
index 0000000..d831996
Binary files /dev/null and b/img/ch04/中间表示-MindIR.png differ
diff --git a/img/ch04/中间表示-MindIR.svg b/img/ch04/中间表示-MindIR.svg
deleted file mode 100644
index 8dfce81..0000000
--- a/img/ch04/中间表示-MindIR.svg
+++ /dev/null
@@ -1,380 +0,0 @@
-
-
-
-
diff --git a/img/ch04/中间表示-中间表示结构.png b/img/ch04/中间表示-中间表示结构.png
new file mode 100644
index 0000000..4fb9ddd
Binary files /dev/null and b/img/ch04/中间表示-中间表示结构.png differ
diff --git a/img/ch04/中间表示-中间表示结构.svg b/img/ch04/中间表示-中间表示结构.svg
deleted file mode 100644
index 7f8a454..0000000
--- a/img/ch04/中间表示-中间表示结构.svg
+++ /dev/null
@@ -1,364 +0,0 @@
-
-
-
-
diff --git a/img/ch04/中间表示-线性中间表示.png b/img/ch04/中间表示-线性中间表示.png
new file mode 100644
index 0000000..be66275
Binary files /dev/null and b/img/ch04/中间表示-线性中间表示.png differ
diff --git a/img/ch04/中间表示-线性中间表示.svg b/img/ch04/中间表示-线性中间表示.svg
deleted file mode 100644
index e1a6444..0000000
--- a/img/ch04/中间表示-线性中间表示.svg
+++ /dev/null
@@ -1,744 +0,0 @@
-
-
-
-
diff --git a/img/ch04/自动微分-前向模式自动微分示例.png b/img/ch04/自动微分-前向模式自动微分示例.png
index ac7f559..4fb73ab 100644
Binary files a/img/ch04/自动微分-前向模式自动微分示例.png and b/img/ch04/自动微分-前向模式自动微分示例.png differ
diff --git a/img/ch04/自动微分-反向模式自动微分示例.png b/img/ch04/自动微分-反向模式自动微分示例.png
index f6f3615..7d8f189 100644
Binary files a/img/ch04/自动微分-反向模式自动微分示例.png and b/img/ch04/自动微分-反向模式自动微分示例.png differ