gem5  v20.1.0.0
Classes | Public Member Functions | Static Public Attributes | Private Attributes | List of all members
FetchUnit Class Reference

#include <fetch_unit.hh>


class  FetchBufDesc
 fetch buffer descriptor. More...

Public Member Functions

 FetchUnit (const ComputeUnitParams *p, ComputeUnit &cu)
 ~FetchUnit ()
void init ()
void exec ()
void bindWaveList (std::vector< Wavefront * > *list)
void initiateFetch (Wavefront *wavefront)
void fetch (PacketPtr pkt, Wavefront *wavefront)
void processFetchReturn (PacketPtr pkt)
void flushBuf (int wfSlotId)

Static Public Attributes

static uint32_t globalFetchUnitID

Private Attributes

bool timingSim
TheGpuISA::Decoder decoder
Scheduler fetchScheduler
std::vector< Wavefront * > fetchQueue
std::vector< std::pair< Wavefront *, bool > > fetchStatusQueue
std::vector< Wavefront * > * waveList
std::vector< FetchBufDescfetchBuf
int fetchDepth
 number of cache lines we can fetch and buffer. More...

Detailed Description

Definition at line 49 of file fetch_unit.hh.

Constructor & Destructor Documentation

◆ FetchUnit()

FetchUnit::FetchUnit ( const ComputeUnitParams *  p,
ComputeUnit cu 

Definition at line 48 of file

◆ ~FetchUnit()

FetchUnit::~FetchUnit ( )

Definition at line 54 of file

References fetchQueue, and fetchStatusQueue.

Member Function Documentation

◆ bindWaveList()

void FetchUnit::bindWaveList ( std::vector< Wavefront * > *  list)

Definition at line 311 of file

References waveList.

◆ exec()

void FetchUnit::exec ( )

now we check if any of the fetch buffers have buffered instruction data that can be decoded and sent to its wavefront's instruction buffer. then we check if any of the fetch buffer entries can be released. we only check if we can release a buffer

Definition at line 80 of file

References Scheduler::chooseWave(), computeUnit, fetchBuf, fetchQueue, fetchScheduler, fetchStatusQueue, Wavefront::getStatus(), initiateFetch(), ArmISA::j, Shader::n_wf, Wavefront::pendingFetch, Wavefront::S_RUNNING, Wavefront::S_WAITCNT, ComputeUnit::shader, Wavefront::stopFetch(), and Wavefront::wfSlotId.

◆ fetch()

void FetchUnit::fetch ( PacketPtr  pkt,
Wavefront wavefront 

this is necessary because the GPU TLB receives packets instead of requests. when the translation is complete, all relevent fields in the request will be populated, but not in the packet. here we create the new packet so we can set the size, addr, and proper flags.

if we have not reserved an entry in the fetch buffer, stop fetching. this can happen due to a branch instruction flushing the fetch buffer while an ITLB or I-cache request is still pending, in the same cycle another instruction is trying to fetch.

we should have reserved an entry in the fetch buffer for this cache line. here we get the pointer to the entry used to buffer this request's line data.

Definition at line 217 of file

References Packet::cmd, computeUnit, ComputeUnit::cu_id, Packet::dataStatic(), DPRINTF, fetchBuf, processFetchReturn(), Packet::req, ComputeUnit::SQCPort::retries, Packet::senderState, RequestPort::sendFunctional(), RequestPort::sendTimingReq(), Wavefront::simdId, ComputeUnit::sqcPort, timingSim, and Wavefront::wfSlotId.

Referenced by initiateFetch().

◆ flushBuf()

void FetchUnit::flushBuf ( int  wfSlotId)

Definition at line 305 of file

References fetchBuf.

Referenced by Wavefront::discardFetch(), and Gcn3ISA::Inst_SOPP__S_ENDPGM::execute().

◆ init()

void FetchUnit::init ( )

◆ initiateFetch()

void FetchUnit::initiateFetch ( Wavefront wavefront)

◆ processFetchReturn()

void FetchUnit::processFetchReturn ( PacketPtr  pkt)

Member Data Documentation

◆ computeUnit

ComputeUnit& FetchUnit::computeUnit

Definition at line 237 of file fetch_unit.hh.

Referenced by exec(), fetch(), init(), initiateFetch(), and processFetchReturn().

◆ decoder

TheGpuISA::Decoder FetchUnit::decoder

Definition at line 238 of file fetch_unit.hh.

Referenced by init().

◆ fetchBuf

std::vector<FetchBufDesc> FetchUnit::fetchBuf

Definition at line 258 of file fetch_unit.hh.

Referenced by exec(), fetch(), flushBuf(), init(), initiateFetch(), and processFetchReturn().

◆ fetchDepth

int FetchUnit::fetchDepth

number of cache lines we can fetch and buffer.

this includes the currently fetched line (i.e., the line that corresponds to the WF's current PC), as well as any lines that may be prefetched.

Definition at line 265 of file fetch_unit.hh.

Referenced by FetchUnit::FetchBufDesc::flushBuf(), init(), and FetchUnit::FetchBufDesc::reserveBuf().

◆ fetchQueue

std::vector<Wavefront*> FetchUnit::fetchQueue

Definition at line 248 of file fetch_unit.hh.

Referenced by exec(), init(), and ~FetchUnit().

◆ fetchScheduler

Scheduler FetchUnit::fetchScheduler

Definition at line 244 of file fetch_unit.hh.

Referenced by exec(), and init().

◆ fetchStatusQueue

std::vector<std::pair<Wavefront*, bool> > FetchUnit::fetchStatusQueue

Definition at line 253 of file fetch_unit.hh.

Referenced by exec(), init(), and ~FetchUnit().

◆ globalFetchUnitID

uint32_t FetchUnit::globalFetchUnitID

Definition at line 61 of file fetch_unit.hh.

◆ timingSim

bool FetchUnit::timingSim

Definition at line 236 of file fetch_unit.hh.

Referenced by fetch(), init(), and initiateFetch().

◆ waveList

std::vector<Wavefront*>* FetchUnit::waveList

Definition at line 256 of file fetch_unit.hh.

Referenced by bindWaveList(), and init().

The documentation for this class was generated from the following files:

Generated on Wed Sep 30 2020 14:02:24 for gem5 by doxygen 1.8.17