论文阅读:PIM-Comm

一篇非常深入UPMEM PIM底层实现的文章,值得深读。

问题

目前UPMEM PIM的PIM间沟通性能低,通用且高性能的Collective Communication Framework缺失。

性能低的原因有三点:

  1. 纠缠组的存在导致难以有效利用带宽
  2. 通信过程需要CPU的参与
  3. 通信流程为MRAM-VEC_REGISTER-CPU_MEMORY-VEC_REGISTER-MRAM

背景

纠缠组 Entangled Groups

alt text
要充分利用64位的访问总线,需要同时访问一个纠缠组中的8个bank,这八个bank分别位于同一个rank的8个chip中。

域转换 Domain Transfer

CPU对PIM读写数据,是通过AVX-512指令集(基于SIMD思想的x86高级向量扩展指令集)进行的。该指令集搭配的是512位向量寄存器(通常有32个),一个CPU核心可以在一个周期内,实现一条指令对单个512位寄存器中的多个数据执行相同操作(如读、写、与另一512位寄存器的多个数据进行并行算术运算等)。

CPU和PIM对数据的布局要求不同,原来的UPMEM PIM设计默认会在读写数据时,在到达向量寄存器时进行一次“矩阵转置”,称之为域转换。

通信原语

alt text

设计

  1. 设计超立方体抽象通信拓扑,支持多实例的集体通信。通过合理地生成多立方体和实际PIM单元的映射,最大程度地符合内存并行传输特性(包括bank-level、chanell-level等)。
    alt text
    多实例通信在超立方体架构中,可以并行地沿着边进行,且相比于树拓扑和环拓扑,有着更好的对称性,从而结点间通信更加灵活。

  2. 通过在PIM端增加运算,并减少无意义的域转换(当CPU不需要进行算术运算,只是作为单纯的传输中介时,域转换没必要),减少CPU的参与

  3. 通过谨慎地排布数据,使得操作尽可能在向量寄存器中即可完成,而无需放到CPU内存中。

比较对象

实验结果

启发

疑问