The translation of article about MT-3000
原论文为 MT‑3000: a heterogeneous multi‑zone processor for HPCAbstract
随着高性能计算(HPC)技术的不断发展,高性能微处理器——超级计算机的核心构建模块,已成为高性能计算领域的璀璨明珠。为此,我们提出了MT-3000,这是一种专为高性能计算设计的异构多区域处理器,由国防科技大学完全自主设计和实现。MT-3000包含16个通用CPU、96个控制核心和1536个加速核心,它们被分为一个通用区域和一个加速区域。加速区域进一步被划分为四个集群。通过这种多区域组织、互联和内存子系统的精心设计,MT-3000在1.2GHz工作频率下实现了11.6TFLOPS双精度性能和45.4Gflops/w的功率效率。基于MT-300芯片,我们实现了一个峰值性能接近12万亿次浮点运算的超级计算机原型,其Linpack计算效率达到80%。本文还阐述了基于MT-3000芯片构建更大规模超级计算机的可能性。
3.1 Heterogeneous multi‑zone microarchitecture
为了有效地管理16个CPU、96个控制核心以及1536个加速核心,MT-3000引入了多区域微架构(如图1所示),其中16个CPU分组到一个通用区域,96个控制核心和1536个加速核心分组到一个加速区域,该区域被平均划分为四个独立的加速集群。每个加速集群拥有24个控制核心、384个加速核心以及片上全局共享内存(GSM)、高带宽共享内存(HBSM)和片外DDR内存空间。每个加速集群相互独立地执行任务。通用区域中的CPU可以访问不同加速集群的所有HBSM和DDR空间,而控制和加速核心只能访问其自身加速集群内的GSM、HBSM和DDR。不同加速集群之间的数据共享通过CPU完成。加速区域能够处理计算密集型应用。通用区域中的 16个 CPU具有其自身的L1 和L2缓存,并通过启用缓存一致性的网格网络互连方式相互连接。通用区域能够进行整体任务控制、操作系统启动以及通用处理,而加速区域则专为计算密集型任务设计。
通用区域和加速区域以松散耦合的方式协同工作,加速区域内的不同加速集群彼此独立地运行。由于通用区域能够访问四个计算区域的整个HBSM和DDR空间,它可以在内存空间中准备数据,并向计算区域内的集群发送计算任务,从而能够在原地进行密集计算,从而有效地消除了CPU和加速器之间的数据移动成本。只有在不同自主加速集群之间进行必要的通信时,才需要进行数据移动。这种数据移动可以通过在不同的HBSM 或 DDR空间之间传输数据由CPU来完成。自主加速器集群的设计理念在于充分利用每个集群内部的局部性,从而降低总体数据通信成本和控制开销。此外,这种设计还使得高性能处理器能够实现模块化设计,从而能够整合更多的计算资源,同时仍能很好地控制整体设计的复杂性。这还使得MT-3000具有更好的可扩展性,以便在未来能够整合更多的区域,从而实现更高的性能。
Fig. 1 The overall block diagram of MT-3000
3.2 Hybrid memory hierarchy
为了提供一种系统化的设计,提出了混合内存层次结构以与多区域架构相协调。这种内存层次结构包含两个系统视图。第一个视图是通用区域的内存层次结构。如图2所示,通用区域中的每个CPU都有自己的私有二级缓存。二级缓存容量为512KB,采用16路组相联方式,每个缓存块大小为64字节。替换策略为随机。LI缓存是包含式的,这意味着对于L1中的每个数据元素,L2中都有一个副本。但这个副本可能会过时,因此当其他CPU请求L2中的数据元素时,如果L1中的数据被标记为脏,则L2将从LI中获取最新的数据。为了充分利用L2中的512KB空间,支持可选的预取功能。在缓存未命中时,根据预取配置,0、2、4或8个缓存块可以预取到L2中。引入了基于目录的缓存一致性协议。有两个目录部分,一个用于包含式的L1缓存,另一个用于来自其他CPU的访问。第二部分使用修改后的独占共享无效(MESI)算法。由于512KB相当大,L2中也支持ECC以保持数据的完整性。
Fig. 2 The memory hierarchy for the general purpose zone
此外,除了私有缓存支持缓存一致性外,还有四个高带宽共享内存(HBSM),作为大型缓存区使用。每个HBSM都有48MB的容量,带宽为307GBps,并且可以被所有CPU访问。底层有四个DDR内存模块,提供32GB的容量和204GBps的内存带宽。DDR和HBSM都能有效地提高整体内存效率,并为HPC领域中不同类型的内存访问提供灵活的解决方案。
第二个内存层次结构视图适用于加速区域。如图3所示,加速区域中的每个集群都有其自身的GSM、HBSM和DDR内存。GSM为6MB,作为每个加速集群的主私有片上存储器。HBSM作为加速集群的次级片上存储器。GSM和HBSM的主要区别在于HBSM还可以被通用区域中的CPU访问。为了减少内存冲突,HBSM设计有多个存储体。结合直接内存访问,这种多存储体结构组织为运行时数据准备提供了灵活的支持。
Fig. 3 The memory hierarchy for the acceleration zone
3.3 Hierarchical interconnection network
为了有效地处理MT-3000中大量核心之间的通信,引入了一种分层互联结构。如图4所示。在通用区域中,16个CPU通过芯片上的网状网络连接在一起,这为每个CPU核心的私有L2缓存提供了缓存一致性支持。在每个加速集群中,所有的24个控制核心和384个加速核心首先被分组为24个加速阵列,然后每4个阵列进一步组合成一个超级节点。一个交叉开关连接着每个加速集群中的所有6个超级节点和GSM。在交叉区域层面,八条512位宽的数据通道作为不同区域之间的数据共享桥梁,将通用区域中的网状网络与加速区域中的四个交叉网络连接起来。这种分层混合互联网络考虑了不同区域的通信模式,并在MT-3000中庞大的处理元件之间提供了高效的通信支持,同时保持了不同区域的自主特性。
Fig. 4 The hierarchical interconnection network of MT-3000
3.4 Combined VLIW and acceleration array organization
如图5所示,在每个加速集群中,一个控制核心和16个加速核心被组合成一个加速阵列,其中每个加速核心充当计算引擎,这16个引擎由一个单一指令流驱动,并以同步方式工作。控制核心负责每个加速阵列内的整体控制流程,并将SIMD指令卸载到所有16个加速核心上。此外,控制核心还负责那些难以并行化的标量计算应用程序。加速数组构建了一个坚实的基础,能够有效地利用数据级并行性(DLP),这是许多高性能计算工作负载中的一种主要并行形式。
Fig. 5 The organization of control and accelerator cores in the acceleration cluster
为了进一步提高整体效率,在每个加速器核心中,我们采用非常长指令字(VLIW)的方式组织计算单元,其中三个乘法与累加(MAC)单元、一个整数执行单元(IEU)以及两个加载/存储单元并行排列,且在单个周期内最多可同时向每个加速器核心并发发送六条指令。每个MAC单元能够支持混合和浮点乘法与累加运算。对于浮点运算,支持半精度、单精度和双精度浮点运算。IEU能够支持位运算和整数运算,使加速器核心成为强大的计算引擎。
VLIW能够很好地利用指令级并行性。需要注意的是,与用于提高指令级并行性的动态机制相比,VLIW选择以静态方式来利用指令级并行性,其中指令之间的依赖关系由编译器处理,而同一指令字中打包的多条指令在并发执行时能够保证彼此独立。这种静态调度方式有助于实现与动态方法相比合理的低功耗。通过结合VLIW和加速阵列组织,数据级并行性和指令级并行性都能够得到有效利用。
3.5 On chip vector memory design
加速器阵列极大地提升了MT-3000的整体性能,且控制开销极低。然而,这种架构的一个关键因素在于内存子系统,它需要为控制核心以及16个集成在一起的加速器核心提供足够的数据。为此,我们引入了阵列存储器(AM),这是一种向量存储器,最多能够为每个加速器核心提供两次加载/存储操作。AM的加载/存储的数据类型包括 half-word(32位)、float-word(64位) 和 doouble-word(128位),因此AM能够同时为16个加速器核心提供最多512字节(16×2×128位)的数据。
除了内存带宽之外,数据可靠性也是高性能处理器的另一个关键问题,因为较大的内存容量和带宽会增加内存位翻转的可能性。为了提高数据的完整性,采用了基于循环冗余校验(CRC)的错误检测和纠正(EDAC)算法。向量内存的容量为864KB,其中768KB用于数据存储,其余部分用于CRC。这种设计能够检测2位错误并纠正1位错误,这极大地提高了向量内存的可靠性。
为了提升整体性能,AM还支持非对齐向量访问(UVA)。UVA使得能够进行非对齐的向量访问,即从任意字节地址开始访问,而非从向量行的起始位置(即16×64)开始。这涵盖了数据并行应用中大量不规则的内存访问情况,并极大地提高了向量内存访问的灵活性。
3.6 The design of MT‑3000 chip
MT-3000是采用先进的纳米技术制造的。它采用了可扩展的高复用结构和分层方法,以实现处理器的高效设计。通过逻辑层和物理层的优化以及关键模块的定制设计,实现了高主频、多层级和多粒度的功耗优化。图6是芯片的物理布局图。DDR接口位于四个角上,IO单元位于顶部和底部边缘(tangingassigna ins)。加速器单元将它们连接起来。16个通用CPU位于布局的中心,以便与IO和加速器单元方便连接。MT-3000在0.8V的电压下运行,为了稳定提供大电流,我们在布局上构建了一个强大的电源网,插入了Decap电容和 MIM电容以抑制瞬态 IR 降。
Fig. 6 The layout of MT-3000
4 The MT‑3000 programming environment
4.1 Overview
为了方便使用MT-3000,我们提供了一个分层的软件栈,如图7所示。该软件栈包含四个层次:(1)操作系统和驱动程序,其中标准的Linux操作系统在CPU侧运行,而驱动程序则负责管理CPU与加速阵列之间的交互,(2)编译器(即 m3cc)、libMT和 HPML,其中 m3cc 将C 代码转换为 MT-3000二进制文件,libMT是管理加速阵列的低级接口,HPML是高性能数学库,包括 BLAS、libvm等,(3)hthreads,这是用于编程MT-3000的异构线程模型,(4)MOCL3,它为MT-3000实现了 v1.2 版本的OpenCL 标准。
Fig. 7 The heterogeneous programming environment for Matrix-3000Standard C
4.2 M3cc
M3CC是基础编译器,它将类似C语言的源代码转换为MT-3000二进制文件。它支持用户使用标准C语言进行编程、基于C的向量扩展编程,或者使用汇编语言进行编程。这个集成的编译器工具链作为编程模型的基础部分旨在探索应用程序的并行性,并最大限度地提高硬件效率。具体而言,编译工具链可以接收以下三种类型的代码作为输入。
[*]标准C。使用c语言进行编程能够有效加快应用程序的开发速度。M3cc能够利用代码的并行性,并自动生成VSIMD指令,以充分利用同一VSIMD组中的加速器。
[*]基于C语言的向量扩展。为了进一步提高并行性,我们引入了一系列向量扩展API,这些API在数据类型和运算符方面是对标准C语言的扩展。向量扩展的关键思想是明确地控制16个加速核心以同步工作的方式协同运行。这将极大地帮助编译器在MT-3000的计算区域中充分利用VSIMD微架构的潜力。基于C语言的向量扩展是通过内在技术在MT-3000编译器中实现的。
[*]使用汇编语言。除了提供高级编程支持外,我们还提供了汇编层语言,以便以精细的方式发挥MT-3000的性能,同时优化内核代码或开发数学库。使用汇编语言可以消除寄存器分配和延迟槽管理的繁琐细节,从而实现MT-3000的最佳性能。
4.3 Hthreads
MT-3000由一个通用区域(GP区域)和四个加速区域(ACC区域)组成。GP区域运行操作系统。与GP区域不同的是,加速区域是一个裸机系统,没有操作系统,所有的硬件资源都需要由用户程序进行管理。为了避免用户直接与底层硬件打交道,降低使用加速区域的门槛,并确保有足够的灵活性以满足性能需求,我们提出了一个低开销且高可用性的异构编程接口(hthreads)。该异构编程接口由通用区域一侧的API和加速域一侧的API 组成。通用区域和加速区域通过中断和共享内存进行通信。图8展示了hthreads的概念框架。虚线以上的模块是提供给用户的接口,而内部实现功能模块位于虚线以下。
通用用途区域的外部API主要由线程组管理模块以及调试和性能分析模块组成。其设计目标是实现编程的简便性,并将内核启动开销降至最低。因此,采用了类似于POSIX的线程接口来管理加速区域并降低程序员的学习难度。在减少内核启动开销方面,我们可以选择使用中断模式来启动内核函数的执行,这种方式的开销比切换时钟模式要小。
加速区侧的API主要由系统调用模块和资源管理模块组成。其设计目标是具有通用性和灵活性。在通用性方面,hthreads实现了一些关键的操作系统功能,用于资源管理、中断和异常处理以及系统调用,以满足用户对通用计算任务使用的需求。在灵活性方面,hthreads提供了丰富的硬件功能接口,如DMA接口和硬件同步接口,使用户能够在加速区域端根据需要使用所有资源。
4.4 MOCL3
MOCL3是针对MT-3000架构的OpenCL标准并行编程接口的实现。它遵循了OpenCL1.2的编程规范。在充分挖掘MT-3000的计算潜力的同时,MOCL3能够与OpenCL旧代码有效兼容,并显著提高编程的灵活性。总的来说,为MT-3000实现OpenCL编程模型包括两个部分:内核编译器和运行时系统。内核编译器将OpenCL内核编译为MT-3000上的二进制代码,而运行时系统则实现了由OpenCL规范定义的编程接口。
4.4.1 The OpenCL kernel compiler
从程序员的角度来看,一个OpenCL程序包含两个部分:主机端代码和设备端代码(内核)。在编译内核时,我们需要将 OpenCL C 代码编译成 MT-3000 二进制文件。OpenCL内核是根据OpenCLC(基于C99)规范编写的,但它也具有语法扩展和约束条件,这给编译带来了相应的挑战。
如图9所示,MT-3000的内核编译器分两步实现。首先,OpenCLC编译器首先将OpenCL内核转换为带有循环的工作组函数(WGF)。根据OpenCL程序定义的索引空间,转换后的程序就是单个工作组函数要执行的任务。不同的工作组函数共享相同的代码,但通过索引空间访问不同的数据。其次,OpenCLC 编译器将工作组函数编译为MT-3000上的二进制表示形式。此编译步骤基于m3cc 编译器。
Fig. 9 The MOCL3 kernel compiler
此处理原理和sycl/统一异构编程平台的代码处理原理有些相近,一个是基于IR进行进一步处理生成目标架构的机器码,一个是处理代码成为统一规范的IR,再匹配不同的后端
4.4.2 The MOCL3 runtime system
在将OpenCL运行时系统应用于MT-3000时,关键在于实现OpenCLAPI。OpenCL编程接口主要用于管理主机与加速器之间的交互,包括创建上下文环境、在加速区管理程序对象和编译、管理主机区与加速区之间的缓冲区和数据移动,在加速区启动目标程序等。我们在MT-3000上的OpenCL运行时系统是基于现有的异构驱动程序和hthreads构建的。
根据上述描述的OpenCL内核编译过程,大量的并发任务(即工作组函数)是由索引空间定义的。在加速区域启动目标程序后,OpenCL运行时系统需要在线分配任务。在运行时执行OpenCL程序的过程如图10所示。以OpenCL应用程序作为输入,将内核(以及相应的NDRange)通过OpencL任务队列提交给计算设备执行,该队列由运行时系统管理;在设备端,以工作组作为基本单位,将任务分配给可用的加速阵列核心。考虑到OpenCL程序属于数据并行类和规则型,我们采用静态的任务划分和调度策略。
5 The Possibility of MT‑3000 based super computer design
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]