zoukankan      html  css  js  c++  java
  • Rocket

    https://mp.weixin.qq.com/s/elOGjaVCWc48gs9c_cTqww

     

    简单介绍TLDebugModuleInner中HALTSUM寄存器的实现。

     

     

    1. numHaltedStatus

     

    为了记录每个核心的暂停状态,需要的宽度为32位的窗口数:

     

    numHaltedStatus = (nComponents + 31) / 32

    = (nComponents - 1 + 32) / 32

    = (nComponents - 1) / 32 + 1

     

    当前实现最多只支持1024个核心,所以numHaltedStatus的最大值为32.

     

    2. haltedStatus

     

    单个元素为32位宽度的向量,每个元素表示32个核心的暂停状态:

     

    3. haltedSummary

     

    计算每32个核心中是否有核心暂停,即暂停摘要信息:

     

    4. HALTSUM1RdData

     

    HALTSUM1RdData是读取HALTSUM1寄存器时使用的数据源。

     

    HALTSUM1以hartsel高10位选择一个窗口,低5位选择一个比特,该比特代表最低5位表示的32个核心中是否有核心暂停。

    因为当前实现只支持1024个核心,所以高10位实际上可以认为一直是0。也就是不需要再对haltedSumary做截取,而可以直接作为HALTSUM1使用:

     

    5. selectedHaltedStatus

     

    根据hartsel的值,从haltedStatus中选择一个32位窗口使用:

     

    6. HALTSUM0RdData

     

    HALTSUM0RdData是读取HALTSUM0寄存器时使用的数据源。

     

    HALTSUM0以hartsel的高15位选择一个窗口,低5位选择一个比特,每个比特代表一个核心是否暂停。

     

    这里选择的窗口就是selectedHaltedStatus:

     

    7. HALTSUM2/HALTSUM3

     

    不支持:

                 

     

  • 相关阅读:
    Docker多主机互联
    数据结构
    广度优先算法走出迷宫
    golang反射
    waitGroup的使用
    golang中的mutex锁
    goroutine和channel
    如何优雅的关闭Golang Channel?
    使用context关闭协程以及协程中的协程
    golang对不同系统的编译
  • 原文地址:https://www.cnblogs.com/wjcdx/p/12433887.html
Copyright © 2011-2022 走看看