Skip to content

Class simtix::BaseSMImpl

ClassList > simtix > BaseSMImpl

Base class for the Streaming Multiprocessor (SM) implementation. More...

  • #include <base.h>

Inherited by the following classes: simtix::AtomicSMImpl, simtix::pipelined::PipelinedSMImpl

Classes

Type Name
struct Stat
struct WorkGroupStat

Public Functions

Type Name
virtual void AttachDMem (MemoryInterface * dmem)
Connect data memory interface.
virtual void AttachIMem (MemoryInterface * imem)
Connect instruction memory interface.
BaseSMImpl (const std::string & name, uint32_t cid, const ArchParam & p=kDefaultArchParam)
Constructor for BaseSMImpl .
virtual int NotifyBarrier (uint32_t wid, uint8_t bid, uint8_t wc)
Notify the SM of a barrier instruction.
virtual void NotifyCtrlFlowChange (uint32_t wid, bool is_diverged, uint64_t wpc, uint64_t sswpc) = 0
Notify the SM of a control flow change.
virtual void NotifyException (uint32_t wid, uint64_t mcause, uint64_t mepc, uint64_t mtval)
Notify the SM of an exception.
virtual int Process (const opencl::WorkGroup & wg)
Process a work-group and initialize all threads.
int32_t ReadCSR (uint16_t addr, uint64_t * data)
Read a Control and Status Register (CSR).
virtual void Reset ()
Reset the SM to its initial state.
virtual void ResetStat ()
Reset and create a new stat for a workgroup.
virtual BaseArbitrator * arbitrator () = 0
virtual BaseLoadStoreUnit * lsu () = 0
uint32_t marchid () const
uint64_t mcycle () const
const std::vector< uint64_t > & minstrets ()
uint32_t mvendorid () const
const std::string name () const
uint32_t num_active_warps () const
uint32_t num_warps () const
uint32_t num_warps_per_warpgroup () const
void set_mcycle (uint64_t cycle)
virtual std::shared_ptr< Stat > stat () = 0
const std::vector< std::unique_ptr< Warp > > & warps () const
virtual WorkGroupStat * wg_stat () = 0
uint32_t xclgoffx () const
uint32_t xclgoffy () const
uint32_t xclgoffz () const
uint32_t xclgsx () const
uint32_t xclgsy () const
uint32_t xclgsz () const
uint32_t xclsx () const
uint32_t xclsy () const
uint32_t xclsz () const
uint32_t xclwx () const
uint32_t xclwy () const
uint32_t xclwz () const
uint32_t xdim () const
uint64_t xkernelarg () const
uint64_t xkernelpc () const
uint64_t xmhartidbase () const
virtual ~BaseSMImpl ()

Protected Attributes

Type Name
std::vector< Barrier > barriers_
uint32_t cid_
MemoryInterface * dmem_port_ = nullptr
BaseSM::FaultStatus fault_status_ = {0, 0, 0, 0}
MemoryInterface * imem_port_ = nullptr
uint32_t marchid_ = 0
uint64_t mcycle_ = 0
std::vector< uint64_t > minstrets_
uint32_t mvendorid_ = 0
const std::string name_
uint32_t num_active_warps_ = 0
const uint32_t num_threads_per_warp_
const uint32_t num_warps_
uint32_t num_warps_per_warpgroup_ = 1
std::unique_ptr< WarpSched > scheduler_
BaseSM::Status status_
std::vector< Warp * > valid_leader_warps_
std::vector< std::unique_ptr< Warp > > warps_
Barrier wg_completion_barrier_
uint32_t wg_serial_id_ = 0
uint32_t xclgoffx_ = 0
uint32_t xclgoffy_ = 0
uint32_t xclgoffz_ = 0
uint32_t xclgsx_ = 0
uint32_t xclgsy_ = 0
uint32_t xclgsz_ = 0
uint32_t xclsx_ = 0
uint32_t xclsy_ = 0
uint32_t xclsz_ = 0
uint32_t xclwx_ = 0
uint32_t xclwy_ = 0
uint32_t xclwz_ = 0
uint32_t xdim_ = 0
uint64_t xkernelarg_ = 0
uint64_t xkernelpc_ = 0
uint64_t xmhartidbase_ = 0

Protected Functions

Type Name
bool BarrierCompleted (const Barrier & b) const
virtual bool IsBusy ()
virtual void Tick ()
Advance pipeline by one cycle.

Detailed Description

This class provides the core functionality for managing warps, memory interfaces, and synchronization mechanisms within a Streaming Multiprocessor (SM).

Public Functions Documentation

function AttachDMem

Connect data memory interface.

inline virtual void simtix::BaseSMImpl::AttachDMem (
    MemoryInterface * dmem
) 

Parameters:

  • dmem Pointer to the data memory interface.

function AttachIMem

Connect instruction memory interface.

inline virtual void simtix::BaseSMImpl::AttachIMem (
    MemoryInterface * imem
) 

Parameters:

  • imem Pointer to the instruction memory interface.

function BaseSMImpl

Constructor for BaseSMImpl .

explicit simtix::BaseSMImpl::BaseSMImpl (
    const std::string & name,
    uint32_t cid,
    const ArchParam & p=kDefaultArchParam
) 

Parameters:

  • name The name of the SM instance.
  • cid Core ID.
  • p Architecture parameters from param.h.

function NotifyBarrier

Notify the SM of a barrier instruction.

virtual int simtix::BaseSMImpl::NotifyBarrier (
    uint32_t wid,
    uint8_t bid,
    uint8_t wc
) 

Parameters:

Returns:

0 if successful, -1 if failed.

This method should be called when a warp reaches a barrier instruction.


function NotifyCtrlFlowChange

Notify the SM of a control flow change.

virtual void simtix::BaseSMImpl::NotifyCtrlFlowChange (
    uint32_t wid,
    bool is_diverged,
    uint64_t wpc,
    uint64_t sswpc
) = 0

Parameters:

  • wid Warp ID.
  • is_diverged Whether the warp is diverged.
  • wpc Warp PC.
  • sswpc Spatial-subwarp PC.

This method should be called when a warp encounters a control flow change.


function NotifyException

Notify the SM of an exception.

virtual void simtix::BaseSMImpl::NotifyException (
    uint32_t wid,
    uint64_t mcause,
    uint64_t mepc,
    uint64_t mtval
) 

Parameters:

  • wid Warp ID.
  • mcause Machine cause register value.
  • mepc Machine exception PC.
  • mtval Machine trap value.

This method should be called when a warp generates an exception.


function Process

Process a work-group and initialize all threads.

virtual int simtix::BaseSMImpl::Process (
    const opencl::WorkGroup & wg
) 

Parameters:

  • wg The work-group to process.

Returns:

0 if successful, -1 if failed.

This method accepts a work-group from the task dispatcher and initializes all threads. The implementation should override this method to determine how a work-group is dispatched.


function ReadCSR

Read a Control and Status Register (CSR).

int32_t simtix::BaseSMImpl::ReadCSR (
    uint16_t addr,
    uint64_t * data
) 

Parameters:

  • addr Address of the CSR.
  • data Pointer to store the read value.

Returns:

0 if successful, -1 if the CSR is undefined.


function Reset

Reset the SM to its initial state.

virtual void simtix::BaseSMImpl::Reset () 

This method is called when the SM transitions to the kCompleted or kFault state. It resets the execution environment.


function ResetStat

Reset and create a new stat for a workgroup.

inline virtual void simtix::BaseSMImpl::ResetStat () 


function arbitrator

virtual BaseArbitrator * simtix::BaseSMImpl::arbitrator () = 0

function lsu

virtual BaseLoadStoreUnit * simtix::BaseSMImpl::lsu () = 0

function marchid

inline uint32_t simtix::BaseSMImpl::marchid () const

function mcycle

inline uint64_t simtix::BaseSMImpl::mcycle () const

function minstrets

inline const std::vector< uint64_t > & simtix::BaseSMImpl::minstrets () 

function mvendorid

inline uint32_t simtix::BaseSMImpl::mvendorid () const

function name

inline const std::string simtix::BaseSMImpl::name () const

function num_active_warps

inline uint32_t simtix::BaseSMImpl::num_active_warps () const

function num_warps

inline uint32_t simtix::BaseSMImpl::num_warps () const

function num_warps_per_warpgroup

inline uint32_t simtix::BaseSMImpl::num_warps_per_warpgroup () const

function set_mcycle

inline void simtix::BaseSMImpl::set_mcycle (
    uint64_t cycle
) 

function stat

virtual std::shared_ptr< Stat > simtix::BaseSMImpl::stat () = 0

function warps

inline const std::vector< std::unique_ptr< Warp > > & simtix::BaseSMImpl::warps () const

function wg_stat

virtual WorkGroupStat * simtix::BaseSMImpl::wg_stat () = 0

function xclgoffx

inline uint32_t simtix::BaseSMImpl::xclgoffx () const

function xclgoffy

inline uint32_t simtix::BaseSMImpl::xclgoffy () const

function xclgoffz

inline uint32_t simtix::BaseSMImpl::xclgoffz () const

function xclgsx

inline uint32_t simtix::BaseSMImpl::xclgsx () const

function xclgsy

inline uint32_t simtix::BaseSMImpl::xclgsy () const

function xclgsz

inline uint32_t simtix::BaseSMImpl::xclgsz () const

function xclsx

inline uint32_t simtix::BaseSMImpl::xclsx () const

function xclsy

inline uint32_t simtix::BaseSMImpl::xclsy () const

function xclsz

inline uint32_t simtix::BaseSMImpl::xclsz () const

function xclwx

inline uint32_t simtix::BaseSMImpl::xclwx () const

function xclwy

inline uint32_t simtix::BaseSMImpl::xclwy () const

function xclwz

inline uint32_t simtix::BaseSMImpl::xclwz () const

function xdim

inline uint32_t simtix::BaseSMImpl::xdim () const

function xkernelarg

inline uint64_t simtix::BaseSMImpl::xkernelarg () const

function xkernelpc

inline uint64_t simtix::BaseSMImpl::xkernelpc () const

function xmhartidbase

inline uint64_t simtix::BaseSMImpl::xmhartidbase () const

function ~BaseSMImpl

virtual simtix::BaseSMImpl::~BaseSMImpl () 

Protected Attributes Documentation

variable barriers_

std::vector<Barrier> simtix::BaseSMImpl::barriers_;

variable cid_

uint32_t simtix::BaseSMImpl::cid_;

variable dmem_port_

MemoryInterface* simtix::BaseSMImpl::dmem_port_;

variable fault_status_

BaseSM::FaultStatus simtix::BaseSMImpl::fault_status_;

variable imem_port_

MemoryInterface* simtix::BaseSMImpl::imem_port_;

variable marchid_

uint32_t simtix::BaseSMImpl::marchid_;

variable mcycle_

uint64_t simtix::BaseSMImpl::mcycle_;

variable minstrets_

std::vector<uint64_t> simtix::BaseSMImpl::minstrets_;

variable mvendorid_

uint32_t simtix::BaseSMImpl::mvendorid_;

variable name_

const std::string simtix::BaseSMImpl::name_;

variable num_active_warps_

uint32_t simtix::BaseSMImpl::num_active_warps_;

variable num_threads_per_warp_

const uint32_t simtix::BaseSMImpl::num_threads_per_warp_;

variable num_warps_

const uint32_t simtix::BaseSMImpl::num_warps_;

variable num_warps_per_warpgroup_

uint32_t simtix::BaseSMImpl::num_warps_per_warpgroup_;

variable scheduler_

std::unique_ptr<WarpSched> simtix::BaseSMImpl::scheduler_;

variable status_

BaseSM::Status simtix::BaseSMImpl::status_;

variable valid_leader_warps_

std::vector<Warp *> simtix::BaseSMImpl::valid_leader_warps_;

variable warps_

std::vector<std::unique_ptr<Warp> > simtix::BaseSMImpl::warps_;

variable wg_completion_barrier_

Barrier simtix::BaseSMImpl::wg_completion_barrier_;

variable wg_serial_id_

uint32_t simtix::BaseSMImpl::wg_serial_id_;

variable xclgoffx_

uint32_t simtix::BaseSMImpl::xclgoffx_;

variable xclgoffy_

uint32_t simtix::BaseSMImpl::xclgoffy_;

variable xclgoffz_

uint32_t simtix::BaseSMImpl::xclgoffz_;

variable xclgsx_

uint32_t simtix::BaseSMImpl::xclgsx_;

variable xclgsy_

uint32_t simtix::BaseSMImpl::xclgsy_;

variable xclgsz_

uint32_t simtix::BaseSMImpl::xclgsz_;

variable xclsx_

uint32_t simtix::BaseSMImpl::xclsx_;

variable xclsy_

uint32_t simtix::BaseSMImpl::xclsy_;

variable xclsz_

uint32_t simtix::BaseSMImpl::xclsz_;

variable xclwx_

uint32_t simtix::BaseSMImpl::xclwx_;

variable xclwy_

uint32_t simtix::BaseSMImpl::xclwy_;

variable xclwz_

uint32_t simtix::BaseSMImpl::xclwz_;

variable xdim_

uint32_t simtix::BaseSMImpl::xdim_;

variable xkernelarg_

uint64_t simtix::BaseSMImpl::xkernelarg_;

variable xkernelpc_

uint64_t simtix::BaseSMImpl::xkernelpc_;

variable xmhartidbase_

uint64_t simtix::BaseSMImpl::xmhartidbase_;

Protected Functions Documentation

function BarrierCompleted

inline bool simtix::BaseSMImpl::BarrierCompleted (
    const Barrier & b
) const

function IsBusy

inline virtual bool simtix::BaseSMImpl::IsBusy () 

function Tick

Advance pipeline by one cycle.

inline virtual void simtix::BaseSMImpl::Tick () 



The documentation for this class was generated from the following file projects/simtix/src/simtix/sm/base.h