Go to the documentation of this file.
34 #ifndef __GPU_DYN_INST_HH__
35 #define __GPU_DYN_INST_HH__
44 #include "debug/GPUMem.hh"
45 #include "enums/StorageClassType.hh"
109 bool isOpcode(
const std::string& opcodeStr)
const;
110 bool isOpcode(
const std::string& opcodeStr,
111 const std::string& extStr)
const;
260 return std::make_unique<AtomicOpAnd<c0>>(*reg0);
262 return std::make_unique<AtomicOpOr<c0>>(*reg0);
264 return std::make_unique<AtomicOpXor<c0>>(*reg0);
266 return std::make_unique<AtomicOpCAS<c0>>(*reg0, *reg1,
cu);
268 return std::make_unique<AtomicOpExch<c0>>(*reg0);
270 return std::make_unique<AtomicOpAdd<c0>>(*reg0);
272 return std::make_unique<AtomicOpSub<c0>>(*reg0);
274 return std::make_unique<AtomicOpInc<c0>>();
276 return std::make_unique<AtomicOpDec<c0>>();
278 return std::make_unique<AtomicOpMax<c0>>(*reg0);
280 return std::make_unique<AtomicOpMin<c0>>(*reg0);
282 fatal(
"Unrecognized atomic operation");
337 assert((newVal >= 0) && (newVal <= 2));
373 DPRINTF(GPUMem,
"CU%d: WF[%d][%d]: lane: %d has %d pending "
381 DPRINTF(GPUMem,
"CU%d: WF[%d][%d]: all lanes have no pending"
391 std::string statusVec_str =
"[";
398 statusVec_str +=
"]";
400 return statusVec_str;
447 #endif // __GPU_DYN_INST_HH__
#define fatal(...)
This implements a cprintf based fatal() function.
std::unique_ptr< AtomicOpFunctor > AtomicOpFunctorPtr
@ INV_L1
mem_sync_op flags
GPUDynInst(ComputeUnit *_cu, Wavefront *_wf, GPUStaticInst *static_inst, uint64_t instSeqNum)
void initiateAcc(GPUDynInstPtr gpuDynInst)
StatusVector memStatusVector
bool readsExecMask() const
bool allLanesZero() const
bool hasSgprRawDependence(GPUDynInstPtr s)
bool srcIsVgpr(int index) const
bool isKernArgSeg() const
bool isDstOperand(int operandIdx)
bool isKernelLaunch() const
void resetStatusVector(int lane)
@ ATOMIC_NO_RETURN_OP
The request is an atomic that does not return data.
const std::string to_string(sc_enc enc)
bool hasSourceVgpr() const
std::unordered_map< Addr, std::vector< int > > StatusVector
uint64_t Tick
Tick count type.
int getOperandSize(int operandIdx)
@ ATOMIC_RETURN_OP
The request is an atomic that returns data.
std::shared_ptr< Request > RequestPtr
ComputeUnit::ComputeUnitStats stats
bool isScalarRegister(int operandIdx)
AtomicOpCAS(T _c, T _s, ComputeUnit *compute_unit)
void profileRoundTripTime(Tick currentTime, int hopId)
AtomicOpFunctorPtr makeAtomicOpFunctor(c0 *reg0, c0 *reg1)
void completeAcc(GPUDynInstPtr gpuDynInst)
std::map< Addr, std::vector< Tick > > lineAddressTime
bool writesFlatScratch() const
bool isSystemCoherent() const
void doApertureCheck(const VectorMask &mask)
ComputeUnit * computeUnit
bool isAtomicExch() const
bool isUnconditionalJump() const
bool hasVgprRawDependence(GPUDynInstPtr s)
GPUStaticInst * staticInstruction()
Enums::StorageClassType executedAs()
bool hasDestinationVgpr() const
Stats::Scalar numFailedCASOps
std::string printStatusVector() const
void resolveFlatSegment(const VectorMask &mask)
constexpr unsigned NumVecElemPerVecReg
TheGpuISA::ScalarRegU32 srcLiteral() const
bool readsFlatScratch() const
void execute(GPUDynInstPtr gpuDynInst)
bool isCondBranch() const
void decrementStatusVector(int lane)
bool isGloballyCoherent() const
InstSeqNum seqNum() const
bool isAtomicNoRet() const
bool isOpcode(const std::string &opcodeStr) const
bool isPrivateSeg() const
int getRegisterIndex(int operandIdx, GPUDynInstPtr gpuDynInst)
bool isReadOnlySeg() const
void setRequestFlags(RequestPtr req) const
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
const std::string & disassemble() const
void profileLineAddressTime(Addr addr, Tick currentTime, int hopId)
const std::map< Addr, std::vector< Tick > > & getLineAddressTime() const
Tick getAccessTime() const
bool isEndOfKernel() const
bool hasDestinationSgpr() const
AtomicOpFunctor * clone()
GPUStaticInst * _staticInst
void resetEntireStatusVector()
void setAccessTime(Tick currentTime)
bool writesExecMask() const
std::vector< int > tlbHitLevel
bool isSrcOperand(int operandIdx)
std::vector< Tick > roundTripTime
bool isVectorRegister(int operandIdx)
@ SLC_BIT
user-policy flags
void setStatusVector(int lane, int newVal)
std::shared_ptr< GPUDynInst > GPUDynInstPtr
bool hasSourceSgpr() const
int numOpdDWORDs(int operandIdx)
std::vector< Tick > getRoundTripTime() const
bool isALU() const
accessor methods for the attributes of the underlying GPU static instruction
int getLaneStatus(int lane) const
std::bitset< std::numeric_limits< unsigned long long >::digits > VectorMask
std::vector< int > statusVector
Generated on Tue Jun 22 2021 15:28:28 for gem5 by doxygen 1.8.17