高通吧 关注:176,724贴子:4,444,776
  • 30回复贴,共1

苹果SIMD/FP寄存器重命名

只看楼主收藏回复

最近在研究SME/SVE,arm的simd/fp寄存器重叠的方式和x86那边不太一样(d0,d1同时map到q0的高64和底64bit。对苹果的物理寄存器进行了一些测试。
首先测试Q0寄存器的PRF Allocation limit, m3大约在500多左右,也就是说物理寄存器大小上限为500x128bit。 接着把测试寄存器换成D0,结果和Q0寄存器一样。苹果会给所有大小的寄存器destination分配一个128bit的寄存器空间。 继续测试把destination为d0和d1的指令混合发现limit还是一样, 那么可以得出结论128bit寄存器里不存在register sharing,我猜测苹果会给每一个PHR分配了一个size参数,mapping table可以把一个128bit neon寄存器map到多个128bit的物理寄存器。 这是一种相对简单的实现和x86那边的实现类似。


IP属地:马来西亚来自iPhone客户端1楼2024-05-11 11:04回复
    这样啊(表现出看上去懂了的样子)


    IP属地:陕西来自iPhone客户端2楼2024-05-11 11:18
    收起回复
      等一波m4


      IP属地:江苏来自iPhone客户端3楼2024-05-11 11:23
      回复
        好!


        IP属地:广东来自iPhone客户端4楼2024-05-11 11:44
        回复
          能请教一下,你觉得苹果有可能用sve实现avx2的模拟吗?


          IP属地:澳大利亚来自iPhone客户端5楼2024-05-11 11:46
          收起回复
            其他arm不是这样吗?


            IP属地:广西来自iPhone客户端6楼2024-05-11 11:52
            收起回复
              arm的spec说(d0,d1)和q0是一个物理寄存器的view,如果你写读d0写读d1共用一个物理寄存器的话,那这两组指令之间就有依赖了


              IP属地:陕西7楼2024-05-11 15:15
              收起回复
                老哥sve stream mode是什么? m4可以只支持sme不支持sve吗


                IP属地:江苏来自iPhone客户端8楼2024-05-11 19:29
                收起回复
                  楼中楼发不下,回这里吧
                  你说的那种实现要求物理寄存器至少有下面几种状态
                  1. 整个寄存器map到某个q0
                  2. 高64位低64位分别map到没有依赖的d0 d1
                  3. 高64位map到某个d1,低64位是clean的
                  4. 高64位map到某个d1,低64位没被map但是是dirty的
                  5. 6. 同上
                  对3和5,你读q0的时候只要or一下两个物理寄存器就行,4 6你得先清除另一半的dirty状态,,2你还得保存另一半的状态,操作完还得还原回去,在这之间引用了map到另一半的"虚拟"寄存器的指令和当前指令有隐含的依赖。
                  这只是q0和d0 d1。对d0和s0 s1也存在一样的关系。这太复杂了


                  IP属地:陕西9楼2024-05-12 13:14
                  回复