---
title: 流水线编排加速实例
description: "接下来通过几个实例介绍一下流水线编排的应用效果。"
url: https://www.hikunpeng.com/document/detail/zh/perftuning/progtuneg/kunpengprogramming_05_0010.html
sourcePath: /source/zh/perftuning/progtuneg/kunpengprogramming_05_0010.html
indexId: 60c2c446781565f31a45e8e4e0862aab84cd5030a900ebd0df46ef32b964781d63
---
# 流水线编排加速实例

接下来通过几个实例介绍一下流水线编排的应用效果。

#### 消除流水线的数据依赖

```
ADD x1, x2, x3
SUB x4, x1, x5
```

上述代码中，SUB指令的计算依赖ADD指令中x1寄存器的结果，因此在SUB指令之前插入气泡（空指令）等待SUB指令将计算的结果写入寄存器文件，在增加-mtune=tsv110之后，编译器会增加两条无关指令以消除数据冒险：

```
ADD x1, x2, x3
其他指令1
其他指令2
SUB x4, x1, x5
```


#### 消除流水线的结构依赖

```
ADD x1, x2, x3
SUB x4, x5, x6
LDR x6, [ x7, #12 ]
SDR x6, [ x7, #12 ]
```

上述代码中，ADD与SUB指令需要同时使用ALU资源，LDR与SDR需要同时使用MEM资源。当硬件不足以支持多条指令在同一时刻执行时，会发生结构冒险，在增加-mtune=tsv110之后，编译器会增加两条无关指令以消除结构依赖：

```
ADD x1, x2, x3
其他指令1
SUB x4, x5, x6
其他指令2
LDR x6, [ x7, #12 ]
其他指令3
SDR x6, [ x7, #12 ]
```
