修改思路
- 对原来的
Flex-GPUSim模拟器进行修改,采用变精度设计,兼容原来的单一Crossbar设计 - 新的
Crossbar的设计为:- 将
L1 + SM和L2都分成gpm_num块; - 将
Crossbar也分成gpm_num块,新增crossbar_latency_queue,模拟各个Crossbars数据传输延迟的情况(这样GPM的分块才有意义) - 在原有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 - 将四个
Crossbar封装为一个MCM_icnt,仿照原先只有一个Crossbar的情况定义相应的接口,使其对外看起来就像原来的一个Crossbar。- 事实上,根据2017HPCA的论文
MCM-GPU,为了简化软硬件协同,我们必须这么做
- 事实上,根据2017HPCA的论文
- 将
引用自:
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> |
- 其规则是:如果顺时针和逆时针一样近,就顺时针。

- 如图所示
时间
2023年1月10日-2023年1月25日