寒武纪 MLU 是面向人工智能应用的领域专用处理器,针对人工智能领域常用的运算(例如卷积、池化和激活等)做了定制优化。与通用计算设备相比,MLU 硬件在处理人工智能应用时拥有更高的性能、能效比和灵活性。

Cambricon BANG 异构并行计算平台

Cambricon BANG 异构计算平台对寒武纪不同架构的硬件产品进行了高度抽象,向用户暴露了统一的编程模型和编程接口,并提供了配套的调试和分析工具。Cambricon BANG 异构编程模型用于开发各类人工智能应用程序和算子库。由于 Cambricon BANG 异构编程模型屏蔽了不同硬件的细微差异,使得基于 Cambricon BANG 异构编程模型开发的应用程序不经过修改便可以运行在包含终端、边缘侧和云端的所有寒武纪硬件上。

Cambricon BANG 异构并行编程模型

寒武纪硬件支持服务器级、板卡级、芯片级、Cluster 级、MLU Core 级、流水线级和 SIMD(Single Instruction Multiple Data,单指令多数据)级并行。为了简化应用开发难度,充分发掘各级并行计算能力,支持并行规模的无限扩展,实现端云一体的开发、调试和部署,寒武纪推出 Cambricon BANG 异构并行编程模型。在该编程模型下,整个计算系统会被划分为设备端和主机端,二者协同完成并行计算任务。主机端用于完成对设备资源的申请和释放,并控制设备端完成任务处理,而设备端则负责大规模的并行计算。在该编程模型下,一个完整的人工智能应用会被分解为一系列计算密集的运算核心,称为 Kernel,每个 Kernel 最终会下发到 MLU 硬件上执行。

当一个 Kernel 下发到 MLU 设备上执行时,MLU 硬件会根据主机端设置的任务规模和任务类型启动对应数量的 MLU Core 完成计算任务。一个Kernel 会被 MLU 硬件上的一个或者多个 MLU Core 执行,每个程序实例称为一个 Task。用户不需要关心每个 Task 在哪个 MLU Core 上执行,所有的调度细节都隐藏在Cambricon BANG异构计算平台的内部。

Cambricon BANG 异构并行编程模型对底层硬件进行了高度抽象,使得用户不必感知底层的硬件细节,只需要遵循 Cambricon BANG 异构并行编程模型的规范,就可以实现应用程序在不同硬件平台之间的无缝迁移。

基于 Cambricon BANG 异构并行计算模型编程时,用户需要进行以下操作:

  1. 任务划分:将一个计算密集的计算需求分解为多个可以并行执行的独立子任务,子任务之间可以通过共享存储的方式进行数据交互,也可以通过同步原语实现同步;

  2. 任务设置:指定用于执行计算任务的硬件资源的数量。

设置任务规模和任务类型后,Cambricon BANG 异构计算平台会根据具体硬件的资源情况和设备的空闲状况执行计算任务。以 图 3.2 Cambricon BANG 异构并行编程模型的可扩展性 为例,该程序具有8个任务(Task):

  • 如果底层硬件有1个 MLU Core 可用,那么8个任务会以任意顺序在同一个 MLU Core 上串行执行;
  • 如果底层硬件有1个 Cluster 可用(包含 4 个 MLU Core),那么8个任务会被分为2轮迭代,每次执行4个任务;
  • 如果底层硬件有2个 Cluster 可用(包含 8 个 MLU Core),那么8个任务可以被同时执行。

抽象硬件模型

寒武纪的 MLU 硬件是面向人工智能应用的领域专用处理器,针对人工智能算法的计算特性和访存特性,设计了高效的指令集、流水线、运算部件和访存部件。与通用处理器相比,MLU 硬件在处理人工智能任务时有更高的性能、灵活性和能效比。MLU 硬件针对人工智能中不同特征的访存数据流设计专用的数据通路和运算部件,实现了不同的数据流之间的隔离;同时向软件暴露了灵活的片上存储空间访问功能,提高了处理效率。

寒武纪硬件的基本组成单元是 MLU Core。每个 MLU Core 是具备完整计算、IO 和控制功能的处理器核心,可以独立完成一个计算任务,也可以与其他 MLU Core 协作完成一个计算任务。每4个 MLU Core 核心构成一个 Cluster,在 MLUv02 以及后续架构中,每个 Cluster 内还会包含一个额外的 Memory Core 和一块被 Memory Core 和 4 个 MLU Core 共享的 SRAM(Shared RAM,共享存储单元)。Memory Core 不能执行向量和张量计算指令,只能用于 SRAM 与 DDR (Double Data Rate Synchronous Dynamic Random Access Memory,双倍速率同步动态随机存储器,DDR SDRAM 通常简称为 DDR) 和 MLU Core 之间的数据传输。

Cambricon BANG 异构并行计算平台对底层由 MLU 硬件构成的大规模并行计算系统进行了一系列抽象,屏蔽了具体硬件之间的细微差异,向用户展示了一个高度并行、灵活扩展和易于操控的抽象硬件模型。Cambricon BANG 异构并行编程模型由通用处理器和多个 MLU 领域专用处理器组成。其中,MLU 负责核心的大规模并行计算,而通用处理器则作为控制单元,负责复杂控制和任务调度等工作。整个抽象硬件模型分为5个层级:服务器级、板卡级、芯片级、处理器簇(Cluster)级和 MLU Core 级,每个层次都包括抽象的控制单元、计算单元和存储单元

  • 第0级是服务器级,由多个 CPU 构成的控制单元、本地 DDR 存储单元和多个 MLU 板卡构成的计算单元组成;
  • 第1级是板卡级,每个 MLU 板卡由本地控制单元、DDR 存储单元和 MLU 芯片构成的计算单元组成;
  • 第2级是芯片级,每个芯片由本地控制单元、本地存储单元(例如 L2 Cache)以及一个或者多个 Cluster 构成的计算单元组成;
  • 第3级是 Cluster 级,每个 Cluster 由本地控制单元、共享存储以及多个 MLU Core 构成的计算单元组成;
  • 第4级是 MLU Core 级,每个 MLU Core 由本地控制单元、私有存储单元和计算单元组成。在 MLU Core 内部支持指令级并行和数据级并行。

  • L2 Cache(Level 2 Cache,二级缓存);
  • FU(Functional Unit,运算功能单元)。

整个抽象硬件模型可以通过增加服务器数量、板卡数量、芯片数量、Cluster 数量或者 MLU Core 数量的方式自由扩展计算能力,也可以通过在各层增加存储容量的方式自由扩展存储容量。此外,该抽象模型还可以通过增加或者减少抽象层次的方式适应不同场景的实际需求。例如,在边缘侧场景中可以省去板卡层级,直接由主机侧的 CPU 与 MLU 芯片互连;在一些计算需求不高的终端侧场景中,还可以直接省去板卡、芯片级和 Cluster 层级,将 MLU Core 作为主机侧 CPU 的协处理器。

存储模型

抽象硬件模型提供了丰富的存储层次,包括 GPR(General Purpose Register,通用寄存器)、NRAM、WRAM、SRAM、L2 Cache、LDRAM(Local DRAM,局部 DRAM 存储单元)、GDRAM(Global DRAM,全局 DRAM 存储空间)等。GPR、WRAM 和 NRAM 是一个 MLU Core 的私有存储,Memory Core 没有私有的 WRAM 和 NRAM 存储资源。L2 Cache 是芯片的全局共享存储资源,目前主要用于缓存指令、Kernel 参数以及只读数据。LDRAM 是每个 MLU Core 和 Memory Core 的私有存储空间,其容量比 WRAM 和 NRAM 更大,主要用于解决片上存储空间不足的问题。GDRAM 是全局共享的存储资源,可以用于实现主机端与设备端的数据共享,以及计算任务之间的数据共享。

计算模型

多队列间数据依赖和同步
多队列间数据依赖和同步

编程模型

中科院说的深度学习指令集 diannaoyu 到底是什么?, https://www.zhihu.com/question/41216802 寒武纪神经网络处理器效能如何 ? https://www.zhihu.com/question/41469046