修改思路
- 对原来的
Flex-GPUSim
模拟器进行修改,采用变精度设计,兼容原来的单一Crossbar
设计 - 新的
Crossbar
的设计为:- 将
L1 + SM
和L2
都分成gpm_num
块; - 将
Crossbar
也分成gpm_num
块,新增crossbar_latency_queue
,模拟各个Crossbar
s数据传输延迟的情况(这样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日