我现在正在使用Mmad实现Matmul功能。但是在数据搬运上遇到了下面这些问题,希望可以帮忙解决。
1、我想确认Matmul中,是否是L1中矩阵以NZ格式存储,在从L1加载到L0A/L0B时再做NZ->ZZ/NZ->ZN的数据格式转化?如果不是的话,Matmul是怎么做的?
2、我观察到Matmul只需要1条mte指令就可以把一个基本块从L1搬运到L0A/L0B,但是我看无论是LoadData还是LoadDataWithTranspose都只能一次加载16行,如何一条mte1指令将整个baseM*baseK/baseK*baseN的基本块搬运到L0A/L0B?
3、在ABC矩阵可以全部放进L2cache的情况下,Matmul的L2cache write_cache_miss < C矩阵的总cache line数,r0/r1_read_cache_miss < A矩阵和B矩阵的总cache line数。这是怎么做到的,是否有方法可以将数据提前预加载到L2 cache使得cache miss变少?
1、我想确认Matmul中,是否是L1中矩阵以NZ格式存储,在从L1加载到L0A/L0B时再做NZ->ZZ/NZ->ZN的数据格式转化?如果不是的话,Matmul是怎么做的?
2、我观察到Matmul只需要1条mte指令就可以把一个基本块从L1搬运到L0A/L0B,但是我看无论是LoadData还是LoadDataWithTranspose都只能一次加载16行,如何一条mte1指令将整个baseM*baseK/baseK*baseN的基本块搬运到L0A/L0B?
3、在ABC矩阵可以全部放进L2cache的情况下,Matmul的L2cache write_cache_miss < C矩阵的总cache line数,r0/r1_read_cache_miss < A矩阵和B矩阵的总cache line数。这是怎么做到的,是否有方法可以将数据提前预加载到L2 cache使得cache miss变少?