首页 / 软件开发 / 数据结构与算法 / 为不规则应用设计新一代超大型多线程架构
为不规则应用设计新一代超大型多线程架构2013-11-30 infoq 译:陈菲目前的高性能计算系统(High-performance computing systems, HPC系统)是为能高效地执行浮点密集型 工作而设计1。HPC系统主要用于科学模拟,这些模拟有着高计算密度、高本地化和常规化分区数据结构等特性 。这些应用需求推动着处理器设计往更快的SIMD(单指令,多数据)架构单元和不断降低访问延迟的深层缓存 层次结构方向发展。在系统级别,内存和互连带宽比峰值计算性能的增长速度要慢得多,但是规则性 和本地化减轻了该问题的影响。与此同时,不断新兴的处理器架构也推动着应用开发往不断探索它们自身特性 的实现上发展。尽管如此,来自新兴领域的应用却有着不规则性,比如:生物信息学、社区发现、复 杂网络、语义数据库、知识发现、自然语言处理、模式识别和社交网络分析等。通常情况下,它们使用基于指 针的数据结构,如:不平衡树、非结构网格和图像。虽然这些数据结构大部分都是并行的,但在空间和时间上 有着比较差的本地化。有效地分割这些数据结构是一个非常大的挑战。另外,这些数据结构通常在应用程序执 行过程中动态变化,比如:添加或删除图象中一个节点。复杂的高速缓存层次结构对于这类不规则应 用来说是效率很差的。系统性能主要由片外带宽决定,该带宽用于系统内存访问本地数据,以及网络访问其他 节点上的数据。这种情况下,单一的控制线程往往无法提供足够的并发来调用所有可用带宽。因此,多线程体 系结构通常会通过以下几种方式尽量容忍,而不是降低内存访问延迟。比如:在多线程间切换,不断产生内存 引用,以及最大限度提高带宽利用率。研究动机Cray XMT是多节点超级计算机,专门设计用于 开发和执行不规则的应用程序2。它的架构基于三大“支柱”:全局地址空间、细粒度同步和多线程。XMT是一个分布式内存共享(Distributed Shared Memory ,DSM)系统,它的全局共享地址空间以很 细的粒度均匀地分布在不同节点的内存上。每个节点都集成了一个ThreadStorm定制处理器,然后以循环为基 础切换于众多硬件线程之间。该方法允许系统容忍访问本地节点内存所带来的系统延迟的同时,也容忍访问远 程节点内存所带来的网络延迟。与最新HPC系统不同的是,XMT提供了一个系统范围的编程模型,从而 在不需要优化本地化的情况下,简化了需要占用大量内存应用的执行。就算现代HPC系统集成了类似图像处理 单元(GPUs)的多线程架构,它们还是更适合规则型应用。目前为止,它们的设计并不能容忍访问其它节点内 存所带来的延迟。在很多情况下,它们甚至无法容忍访问同一节点中其它处理器内存所带来的延迟。另外,协 调内存访问和最优化带宽使用率需要对数据进行分区以及大量的编程工作。西北太平洋国家实验室的 CASS-MT项目目前正在为不规则应用研究大型多线程架构。我们将展示多线程架构中的一个分类,并讨论它们 与Cray的联系。然后我们会提出一些改进方法来演进这些架构,评估出XMT未来的可能设计。该设计将在每个 节点集成多核的同时,完成对下一代网络互连的集成。最后,我们将展示远程引用聚集的硬件机制集成如何优 化网络利用率。多线程架构多线程处理器可以同时处理来自同一管道内不同控制进程的指令。 有两种基本类型的多线程处理器:其中一类是只从循环中的单一进程发出指令,另一类是从同一循环内的多个 进程发出指令。许多先进的无序超标量处理器,如IBM Power6和Power7或最新的Intel Nehalem和 Sandy Bridge架构,都支持同步多线程技术(Simultaneous multithreading technique,SMT)。SMT保持所 有内核中多个线程处于活跃状态:处理器识别每个独立指令,然后将它们同时发送给内核中的多个执行单元, 从而保持处理器资源的高利用率。每个时钟周期从单一线程发出指令的多线程处理器,称做临时多线 程处理器,不同线程间交替来保持管道(通常按顺序)填满及避免拥塞。临时多线程可以是粗粒度(块多线程 )或细粒度的(指令/周期交错)。块多线程只有当指令产生具有长期延迟的拥塞时才从一个线程切换 到另一个,比如,高速缓存丢失了对片外存储器的访问请求。Intel 的Montecito就使用了块多线程技术。交错多线程以循环为基础来交换线程。Cray XMT中的ThreadStorm处理器,以及Tera MTA和Cray MTA-2 中的前身都是使用交错处理器。Sun UltraSPARC T1、T2和SPARC T3中的SPARC内核也采用了交错式多线程模式 。UltraSPARC T1含有8个内核,每个内核有4个线程。T2同样拥有8个内核,但却有双倍的执行单元和 线程数量,来允许它在每个时钟周期从8个线程中的两个同时发出指令。而SPARC T3则在UltraSPARC T2的基础 上加倍了内核数量。这些内核每个周期从不同的线程发出指令。当具有长延迟事件发生时,它们会将产生该事 件的线程从调度表中删出,直到该事件完成为止3。与此同时,GPU还集成了多线程调度块(弯曲或波 阵面),它能有效地在SIMD执行单元中切换以容忍长延迟的内存操作4。GPU拥有数百个浮点单元和大量内存带 宽,并有片上内存对常用数据的访问进行优化。但目前的GPU被设计为拥有私有内存的加速器,更适合常规的 工作负荷。通常基于缓存的处理器在不规则应用中会因为不可预测的内存访问遇到大量的缓存缺失。 一般说来临时多线程架构会更适合这些应用,因为它们可以在内存子系统负载或写数据时切换到其它就绪线程 来容忍长延迟内存访问,因此它们不需要缓存来降低访问延迟。