控制单元

控制单元为整个计算过程提供了指令控制,负责整个AI Core的运行。AI Core包含的控制单元如图1所示,每个模块的具体介绍请参考表1

图1 控制单元
表1 控制单元及相关的指令队列介绍

控制单元/指令队列

描述

标量计算单元(Scalar)

Scalar计算单元。

矩阵运算队列(Cube Queue)

Cube指令队列。同一个队列里的指令顺序执行,不同队列之间可以并行执行。

向量运算队列(Vector Queue)

Vector指令队列。同一个队列里的指令顺序执行,不同队列之间可以并行执行。

存储转换队列(MTE Queue)

MTE指令队列。同一个队列里的指令顺序执行,不同队列之间可以并行执行。

事件同步模块(Event Sync)

用于控制不同队列指令(也叫做不同指令流水)之间的依赖和同步的模块。

多条指令从系统内存通过总线接口进入到AI Core的指令缓存模块(Instruction Cache)中,后续的指令执行过程,根据指令的类型,有两种可能:

同一个指令执行队列中的指令是按照进入队列的顺序进行执行的,不同指令执行队列之间可以并行执行,通过多个指令执行队列的并行执行可以提升整体执行效率。对于并行执行过程中可能出现的数据依赖,通过事件同步模块插入同步指令来控制流水线的同步,提供PipeBarrier、SetFlag/WaitFlag两种指令,保证队列内部以及队列之间按照逻辑关系执行。

Ascend C API提供了用于同步控制的接口同步控制,开发者可以使用这类API来自行完成同步控制。需要注意的是,通常情况下,开发者基于编程模型中介绍的编程模型和范式进行编程时不需要关注同步,编程模型帮助开发者完成了同步控制;使用编程模型和范式是我们推荐的编程方式,自行同步控制可能会带来一定的编程复杂度。

但是我们仍然希望开发者可以理解同步的基本原理,便于后续更好的理解设计并行计算程序;同时少数情况需要开发者手动插入同步,您可以通过什么时候需要开发者手动插入同步来了解具体内容。