GPM_icnts second stage


修改思路

  1. 对原来的Flex-GPUSim模拟器进行修改,采用变精度设计,兼容原来的单一Crossbar设计
  2. 新的Crossbar的设计为:
    1. L1 + SML2都分成gpm_num块;
    2. Crossbar也分成gpm_num块,新增crossbar_latency_queue,模拟各个Crossbars数据传输延迟的情况(这样GPM的分块才有意义)
    3. 在原有2个net(每个net由1个xbar_router组成,内含1个in_buffers和1个out_buffers)的基础上添加3个in_buffers和3个out_buffers(以上的模块均在Crossbar中定义),并且把本模块自己的in_buffer/out_buffers和其他三个模块的out_buffers的引用传入对应的xbar_router
    4. 将四个Crossbar封装为一个MCM_icnt,仿照原先只有一个Crossbar的情况定义相应的接口,使其对外看起来就像原来的一个Crossbar
      • 事实上,根据2017HPCA的论文MCM-GPU,为了简化软硬件协同,我们必须这么做

引用自:
programmers are isolated from the fact that a single logical GPU may now be several GPMs working in conjunction. There are two key advantages to this organization. First, it enables resource sharing of underutilized structures within a single GPU and eliminates hardware replication among GPMs. Second, applications will be able to transparently leverage bigger and more capable GPUs, without any additional programming effort.

  • 注意:在代码实现中,Crossbar又被称为LocalInterconnect,两者本质完全相同

软硬件接口

class MCM_icnt {
public:
    MCM_icnt(inct_config& g_icnt_config, unsigned n_shader, unsigned n_mem, unsigned gpm_num, std::map<std::string, int>
            & crossbar_config) : m_inct_config(g_icnt_config), n_shader(n_shader), n_mem(n_mem), gpm_num(gpm_num) {
    }
    void icnt_cycle(); //整个GPM的大循环
    void icnt_connect_cycle(); //模拟Crossbar之间的传输延迟
    bool HasBuffer(unsigned deviceID, unsigned int size) const; //检测是否还有空间
    void Push(unsigned input_deviceID, unsigned output_deviceID, void* data, unsigned int size); //MCM-GPU弹出元素
    void* Pop(unsigned output_deviceID); //MCM-GPU插入元素

protected:
    std::vector<LocalInterconnect*> m_icnts; //各个GPU单元
    std::vector<std::vector<crossbar_latency_queue*>> m_icnt_latency_queues; //各个GPU单元之间的数据传输通道
    const inct_config& m_inct_config; //配置文件
    unsigned n_shader, n_mem; //SM||L1的数量, L2的数量
    unsigned n_subnets; //每个net所含子net数
    unsigned gpm_num; //GPM块数
};

第二阶段的主要任务

  • 下一阶段就是完成Crossbar之间的转发设计
    • 完成Packet中的std::queue<int> path的设计
    • 完成一张数据传输的映射表
From To Path
GPM0 GPM1 <1>
GPM0 GPM2 <1, 2>
GPM0 GPM3 <3>
GPM1 GPM0 <0>
GPM1 GPM2 <2>
GPM1 GPM3 <2, 3>
GPM2 GPM0 < 3, 1>
GPM2 GPM1 <1>
GPM2 GPM3 <3>
GPM3 GPM0 <0>
GPM3 GPM1 <0, 1>
GPM3 GPM2 <2>
  • 其规则是:如果顺时针和逆时针一样近,就顺时针。

图 1

  • 如图所示

时间

2023年1月10日-2023年1月25日


Author: Yixiang Zhang
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source Yixiang Zhang !
评论