Skip to content

Class simtix::Warp

ClassList > simtix > Warp

Class for warp. More...

  • #include <warp.h>

Public Types

Type Name
enum Status

Public Functions

Type Name
std::string ActiveThreadMaskPattern (uint32_t sswid)
Get the active thread mask pattern as a binary string.
void ArbitratePC ()
Thread Arbitration function.
bool CompactActiveThreads (uint32_t sswid)
Active Threads Compaction.
void ComputeRTV ()
Building ready thread vector for each thread.
bool HasPendingCommit ()
Check if there is any pending commit.
bool HasUnissuedTSW (uint32_t sswid)
Check if there is any unissued tsw.
bool HasUnresolvedBranch ()
Query program counter scoreboard busy status.
void Initialize (uint32_t num_valid_threads, uint64_t pc, const std::vector< std::vector< uint32_t > > & local_id)
Initialize the warp for work-group execution.
void NotifyCommit (const Instr & instr)
Handles warp state update upon instruction commit.
void NotifyIssue (std::optional< uint32_t > ssw)
Updates warp state after an instruction is issued.
int32_t ReadCSR (uint16_t addr, uint64_t * data)
Read CSRs.
bool RegisterAvailable (uint8_t index, uint32_t sswid)
Query register scoreboard busy status.
void ReleasePC ()
Clear program counter scoreboard busy.
void ReleaseRegister (uint8_t index, uint8_t tswid, uint32_t sswid)
Clear register scoreboard busy.
void ReservePC ()
Set program counter scoreboard busy.
void ReserveRegister (uint8_t index, uint8_t tswid, uint32_t sswid)
Set register scoreboard busy.
void Reset ()
After work-group is completed, reset the warp status.
void ResetScoreboard ()
Clear all fields (to non-busy) in scoreboard.
bool ScoreboardClean () const
Warp (BaseSMImpl * sm, uint32_t wid, const ArchParam & p=kDefaultArchParam)
Constructor of Warp .
const std::vector< bool > & active_thread_mask (uint32_t sswid)
const std::vector< Thread * > & active_threads (uint32_t sswid)
BaseArbitrator * arbitrator ()
uint8_t bid () const
bool is_diverged () const
bool is_last_tsw (uint32_t sswid)
const uint8_t & issue_tswid (uint32_t sswid)
BaseLoadStoreUnit * lsu ()
uint64_t minstret () const
uint32_t num_threads () const
uint32_t num_tsws (uint32_t sswid)
uint32_t num_valid_threads () const
const std::vector< std::vector< std::vector< bool > > > & rtv () const
void set_active_thread_mask (uint32_t sswid, uint32_t tid, bool is_active)
void set_bid (uint8_t bid)
void set_mcause (uint64_t mcause)
void set_mepc (uint64_t mepc)
void set_mtval (uint64_t mtval)
void set_num_active_tsws (uint32_t num_active_tsws)
void set_status (Status status)
void set_wc (uint8_t wc)
uint64_t sswpc () const
Status status () const
void swap_active_thread_mask ()
Thread * thread (uint32_t tid) const
const std::vector< Thread * > & tsw_active_threads (uint32_t sswid, uint8_t * tswid)
uint8_t wc () const
uint32_t wid () const
uint64_t wpc () const
~Warp () = default

Protected Attributes

Type Name
uint8_t bid_ = 0
uint8_t wc_ = 0

Protected Functions

Type Name
void ResetActiveThreadMask ()
void UpdateCommittedInstrStat (const Instr & instr)

Detailed Description

Warp holds multiple architectural states of a group of threads and provides functionalities such as PC arbitration and CSR read/write.

Public Types Documentation

enum Status

enum simtix::Warp::Status {
    kInvalid = 0,
    kReady,
    kRunning,
    kBarrier,
    kException
};

Public Functions Documentation

function ActiveThreadMaskPattern

Get the active thread mask pattern as a binary string.

std::string simtix::Warp::ActiveThreadMaskPattern (
    uint32_t sswid
) 

Parameters:

  • sswid The sub-warp ID to retrieve the mask from.

Returns:

A string representing the active thread mask ('1' for active, '0' for inactive).


function ArbitratePC

Thread Arbitration function.

void simtix::Warp::ArbitratePC () 

Arbitrates the next program counter (PC) to execute for the warp group based on thread priorities and handles control-flow divergence by selecting active thread masks for primary and secondary PC groups.


function CompactActiveThreads

Active Threads Compaction.

bool simtix::Warp::CompactActiveThreads (
    uint32_t sswid
) 

Parameters:

  • sswid The sub-warp ID (0 for primary PC group, 1 for secondary).

Returns:

True if there is at least one active thread; false otherwise.

Compacts the active threads of the specified sub-warp (sswid) by gathering active threads from the current warp and its peer warps, ensuring each lane has at most one active thread for execution.


function ComputeRTV

Building ready thread vector for each thread.

void simtix::Warp::ComputeRTV () 


function HasPendingCommit

Check if there is any pending commit.

bool simtix::Warp::HasPendingCommit () 

Returns:

true if there is at least one pending commit, false otherwise.


function HasUnissuedTSW

Check if there is any unissued tsw.

bool simtix::Warp::HasUnissuedTSW (
    uint32_t sswid
) 

Returns:

true if there is at least one thread subgroup (tsw) that has not been issued, false otherwise.


function HasUnresolvedBranch

Query program counter scoreboard busy status.

bool simtix::Warp::HasUnresolvedBranch () 


function Initialize

Initialize the warp for work-group execution.

void simtix::Warp::Initialize (
    uint32_t num_valid_threads,
    uint64_t pc,
    const std::vector< std::vector< uint32_t > > & local_id
) 

Parameters:

  • num_valid_threads Number of threads that are active and valid in the warp.
  • pc Initial program counter (PC) to assign to all valid threads.
  • local_id A vector of 3D local IDs (x, y, z) for each thread.

Initializes valid threads in the warp with the given program counter (PC) and 3D local IDs, and sets the warp status to ready.


function NotifyCommit

Handles warp state update upon instruction commit.

void simtix::Warp::NotifyCommit (
    const Instr & instr
) 

Parameters:

  • instr The instruction being committed, used to determine control flow, barrier, and exception handling behavior.

After an instruction commits, it should call this method to update the warp's status.


function NotifyIssue

Updates warp state after an instruction is issued.

void simtix::Warp::NotifyIssue (
    std::optional< uint32_t > ssw
) 

Parameters:

  • ssw Optional sub-warp ID (0 for primary, 1 for secondary); defaults to 0.

Notifies the warp that an instruction has been issued from the specified sub-warp (ssw), updates the PC if needed, tracks pending commits, and updates issue statistics.


function ReadCSR

Read CSRs.

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

Parameters:

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

Returns:

0 on success, -1 on fail, the CSR is undefined.


function RegisterAvailable

Query register scoreboard busy status.

bool simtix::Warp::RegisterAvailable (
    uint8_t index,
    uint32_t sswid
) 


function ReleasePC

Clear program counter scoreboard busy.

void simtix::Warp::ReleasePC () 


function ReleaseRegister

Clear register scoreboard busy.

void simtix::Warp::ReleaseRegister (
    uint8_t index,
    uint8_t tswid,
    uint32_t sswid
) 

Parameters:

  • index Index of register.
  • tswid Thread sub-warp id.
  • sswid Spatial sub-warp id.

function ReservePC

Set program counter scoreboard busy.

void simtix::Warp::ReservePC () 


function ReserveRegister

Set register scoreboard busy.

void simtix::Warp::ReserveRegister (
    uint8_t index,
    uint8_t tswid,
    uint32_t sswid
) 

Parameters:

  • index Index of register.
  • tswid Thread sub-warp id.
  • sswid Spatial sub-warp id.

function Reset

After work-group is completed, reset the warp status.

void simtix::Warp::Reset () 


function ResetScoreboard

Clear all fields (to non-busy) in scoreboard.

void simtix::Warp::ResetScoreboard () 


function ScoreboardClean

bool simtix::Warp::ScoreboardClean () const

function Warp

Constructor of Warp .

simtix::Warp::Warp (
    BaseSMImpl * sm,
    uint32_t wid,
    const ArchParam & p=kDefaultArchParam
) 

Parameters:

  • sm Type of sm (atomic or pipeline).
  • wid Warp id.
  • p Architecture parameter.

function active_thread_mask

inline const std::vector< bool > & simtix::Warp::active_thread_mask (
    uint32_t sswid
) 

function active_threads

inline const std::vector< Thread * > & simtix::Warp::active_threads (
    uint32_t sswid
) 

function arbitrator

BaseArbitrator * simtix::Warp::arbitrator () 

function bid

inline uint8_t simtix::Warp::bid () const

function is_diverged

inline bool simtix::Warp::is_diverged () const

function is_last_tsw

inline bool simtix::Warp::is_last_tsw (
    uint32_t sswid
) 

function issue_tswid

inline const uint8_t & simtix::Warp::issue_tswid (
    uint32_t sswid
) 

function lsu

BaseLoadStoreUnit * simtix::Warp::lsu () 

function minstret

inline uint64_t simtix::Warp::minstret () const

function num_threads

inline uint32_t simtix::Warp::num_threads () const

function num_tsws

inline uint32_t simtix::Warp::num_tsws (
    uint32_t sswid
) 

function num_valid_threads

inline uint32_t simtix::Warp::num_valid_threads () const

function rtv

inline const std::vector< std::vector< std::vector< bool > > > & simtix::Warp::rtv () const

function set_active_thread_mask

inline void simtix::Warp::set_active_thread_mask (
    uint32_t sswid,
    uint32_t tid,
    bool is_active
) 

function set_bid

inline void simtix::Warp::set_bid (
    uint8_t bid
) 

function set_mcause

inline void simtix::Warp::set_mcause (
    uint64_t mcause
) 

function set_mepc

inline void simtix::Warp::set_mepc (
    uint64_t mepc
) 

function set_mtval

inline void simtix::Warp::set_mtval (
    uint64_t mtval
) 

function set_num_active_tsws

inline void simtix::Warp::set_num_active_tsws (
    uint32_t num_active_tsws
) 

function set_status

inline void simtix::Warp::set_status (
    Status status
) 

function set_wc

inline void simtix::Warp::set_wc (
    uint8_t wc
) 

function sswpc

inline uint64_t simtix::Warp::sswpc () const

function status

inline Status simtix::Warp::status () const

function swap_active_thread_mask

inline void simtix::Warp::swap_active_thread_mask () 

function thread

inline Thread * simtix::Warp::thread (
    uint32_t tid
) const

function tsw_active_threads

const std::vector< Thread * > & simtix::Warp::tsw_active_threads (
    uint32_t sswid,
    uint8_t * tswid
) 

function wc

inline uint8_t simtix::Warp::wc () const

function wid

inline uint32_t simtix::Warp::wid () const

function wpc

inline uint64_t simtix::Warp::wpc () const

function ~Warp

simtix::Warp::~Warp () = default

Protected Attributes Documentation

variable bid_

uint8_t simtix::Warp::bid_;

variable wc_

uint8_t simtix::Warp::wc_;

Protected Functions Documentation

function ResetActiveThreadMask

inline void simtix::Warp::ResetActiveThreadMask () 

function UpdateCommittedInstrStat

void simtix::Warp::UpdateCommittedInstrStat (
    const Instr & instr
) 


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