gpu_dyn_inst.cc revision 12697
111308Santhony.gutierrez@amd.com/* 212697Santhony.gutierrez@amd.com * Copyright (c) 2015-2017 Advanced Micro Devices, Inc. 311308Santhony.gutierrez@amd.com * All rights reserved. 411308Santhony.gutierrez@amd.com * 511308Santhony.gutierrez@amd.com * For use for simulation and test purposes only 611308Santhony.gutierrez@amd.com * 711308Santhony.gutierrez@amd.com * Redistribution and use in source and binary forms, with or without 811308Santhony.gutierrez@amd.com * modification, are permitted provided that the following conditions are met: 911308Santhony.gutierrez@amd.com * 1011308Santhony.gutierrez@amd.com * 1. Redistributions of source code must retain the above copyright notice, 1111308Santhony.gutierrez@amd.com * this list of conditions and the following disclaimer. 1211308Santhony.gutierrez@amd.com * 1311308Santhony.gutierrez@amd.com * 2. Redistributions in binary form must reproduce the above copyright notice, 1411308Santhony.gutierrez@amd.com * this list of conditions and the following disclaimer in the documentation 1511308Santhony.gutierrez@amd.com * and/or other materials provided with the distribution. 1611308Santhony.gutierrez@amd.com * 1712697Santhony.gutierrez@amd.com * 3. Neither the name of the copyright holder nor the names of its 1812697Santhony.gutierrez@amd.com * contributors may be used to endorse or promote products derived from this 1912697Santhony.gutierrez@amd.com * software without specific prior written permission. 2011308Santhony.gutierrez@amd.com * 2111308Santhony.gutierrez@amd.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 2211308Santhony.gutierrez@amd.com * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2311308Santhony.gutierrez@amd.com * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2411308Santhony.gutierrez@amd.com * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 2511308Santhony.gutierrez@amd.com * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2611308Santhony.gutierrez@amd.com * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2711308Santhony.gutierrez@amd.com * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2811308Santhony.gutierrez@amd.com * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2911308Santhony.gutierrez@amd.com * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 3011308Santhony.gutierrez@amd.com * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 3111308Santhony.gutierrez@amd.com * POSSIBILITY OF SUCH DAMAGE. 3211308Santhony.gutierrez@amd.com * 3312697Santhony.gutierrez@amd.com * Authors: Anthony Gutierrez 3411308Santhony.gutierrez@amd.com */ 3511308Santhony.gutierrez@amd.com 3611308Santhony.gutierrez@amd.com#include "gpu-compute/gpu_dyn_inst.hh" 3711308Santhony.gutierrez@amd.com 3811308Santhony.gutierrez@amd.com#include "debug/GPUMem.hh" 3911308Santhony.gutierrez@amd.com#include "gpu-compute/gpu_static_inst.hh" 4011308Santhony.gutierrez@amd.com#include "gpu-compute/shader.hh" 4111308Santhony.gutierrez@amd.com#include "gpu-compute/wavefront.hh" 4211308Santhony.gutierrez@amd.com 4311308Santhony.gutierrez@amd.comGPUDynInst::GPUDynInst(ComputeUnit *_cu, Wavefront *_wf, 4411692Santhony.gutierrez@amd.com GPUStaticInst *static_inst, uint64_t instSeqNum) 4511534Sjohn.kalamatianos@amd.com : GPUExecContext(_cu, _wf), addr(computeUnit()->wfSize(), (Addr)0), 4611692Santhony.gutierrez@amd.com n_reg(0), useContinuation(false), 4711692Santhony.gutierrez@amd.com statusBitVector(0), _staticInst(static_inst), _seqNum(instSeqNum) 4811308Santhony.gutierrez@amd.com{ 4911534Sjohn.kalamatianos@amd.com tlbHitLevel.assign(computeUnit()->wfSize(), -1); 5011534Sjohn.kalamatianos@amd.com d_data = new uint8_t[computeUnit()->wfSize() * 16]; 5111534Sjohn.kalamatianos@amd.com a_data = new uint8_t[computeUnit()->wfSize() * 8]; 5211534Sjohn.kalamatianos@amd.com x_data = new uint8_t[computeUnit()->wfSize() * 8]; 5311534Sjohn.kalamatianos@amd.com for (int i = 0; i < (computeUnit()->wfSize() * 8); ++i) { 5411534Sjohn.kalamatianos@amd.com a_data[i] = 0; 5511534Sjohn.kalamatianos@amd.com x_data[i] = 0; 5611534Sjohn.kalamatianos@amd.com } 5711534Sjohn.kalamatianos@amd.com for (int i = 0; i < (computeUnit()->wfSize() * 16); ++i) { 5811534Sjohn.kalamatianos@amd.com d_data[i] = 0; 5911534Sjohn.kalamatianos@amd.com } 6011534Sjohn.kalamatianos@amd.com} 6111534Sjohn.kalamatianos@amd.com 6211534Sjohn.kalamatianos@amd.comGPUDynInst::~GPUDynInst() 6311534Sjohn.kalamatianos@amd.com{ 6411534Sjohn.kalamatianos@amd.com delete[] d_data; 6511534Sjohn.kalamatianos@amd.com delete[] a_data; 6611534Sjohn.kalamatianos@amd.com delete[] x_data; 6711308Santhony.gutierrez@amd.com} 6811308Santhony.gutierrez@amd.com 6911308Santhony.gutierrez@amd.comvoid 7011692Santhony.gutierrez@amd.comGPUDynInst::execute(GPUDynInstPtr gpuDynInst) 7111308Santhony.gutierrez@amd.com{ 7211692Santhony.gutierrez@amd.com _staticInst->execute(gpuDynInst); 7311308Santhony.gutierrez@amd.com} 7411308Santhony.gutierrez@amd.com 7511308Santhony.gutierrez@amd.comint 7611308Santhony.gutierrez@amd.comGPUDynInst::numSrcRegOperands() 7711308Santhony.gutierrez@amd.com{ 7811692Santhony.gutierrez@amd.com return _staticInst->numSrcRegOperands(); 7911308Santhony.gutierrez@amd.com} 8011308Santhony.gutierrez@amd.com 8111308Santhony.gutierrez@amd.comint 8211308Santhony.gutierrez@amd.comGPUDynInst::numDstRegOperands() 8311308Santhony.gutierrez@amd.com{ 8411692Santhony.gutierrez@amd.com return _staticInst->numDstRegOperands(); 8511308Santhony.gutierrez@amd.com} 8611308Santhony.gutierrez@amd.com 8711308Santhony.gutierrez@amd.comint 8811308Santhony.gutierrez@amd.comGPUDynInst::getNumOperands() 8911308Santhony.gutierrez@amd.com{ 9011692Santhony.gutierrez@amd.com return _staticInst->getNumOperands(); 9111308Santhony.gutierrez@amd.com} 9211308Santhony.gutierrez@amd.com 9311308Santhony.gutierrez@amd.combool 9411308Santhony.gutierrez@amd.comGPUDynInst::isVectorRegister(int operandIdx) 9511308Santhony.gutierrez@amd.com{ 9611692Santhony.gutierrez@amd.com return _staticInst->isVectorRegister(operandIdx); 9711308Santhony.gutierrez@amd.com} 9811308Santhony.gutierrez@amd.com 9911308Santhony.gutierrez@amd.combool 10011308Santhony.gutierrez@amd.comGPUDynInst::isScalarRegister(int operandIdx) 10111308Santhony.gutierrez@amd.com{ 10211692Santhony.gutierrez@amd.com return _staticInst->isScalarRegister(operandIdx); 10311308Santhony.gutierrez@amd.com} 10411308Santhony.gutierrez@amd.com 10511699Santhony.gutierrez@amd.combool 10611699Santhony.gutierrez@amd.comGPUDynInst::isCondRegister(int operandIdx) 10711699Santhony.gutierrez@amd.com{ 10811699Santhony.gutierrez@amd.com return _staticInst->isCondRegister(operandIdx); 10911699Santhony.gutierrez@amd.com} 11011699Santhony.gutierrez@amd.com 11111308Santhony.gutierrez@amd.comint 11211699Santhony.gutierrez@amd.comGPUDynInst::getRegisterIndex(int operandIdx, GPUDynInstPtr gpuDynInst) 11311308Santhony.gutierrez@amd.com{ 11411699Santhony.gutierrez@amd.com return _staticInst->getRegisterIndex(operandIdx, gpuDynInst); 11511308Santhony.gutierrez@amd.com} 11611308Santhony.gutierrez@amd.com 11711308Santhony.gutierrez@amd.comint 11811308Santhony.gutierrez@amd.comGPUDynInst::getOperandSize(int operandIdx) 11911308Santhony.gutierrez@amd.com{ 12011692Santhony.gutierrez@amd.com return _staticInst->getOperandSize(operandIdx); 12111308Santhony.gutierrez@amd.com} 12211308Santhony.gutierrez@amd.com 12311308Santhony.gutierrez@amd.combool 12411308Santhony.gutierrez@amd.comGPUDynInst::isDstOperand(int operandIdx) 12511308Santhony.gutierrez@amd.com{ 12611692Santhony.gutierrez@amd.com return _staticInst->isDstOperand(operandIdx); 12711308Santhony.gutierrez@amd.com} 12811308Santhony.gutierrez@amd.com 12911308Santhony.gutierrez@amd.combool 13011308Santhony.gutierrez@amd.comGPUDynInst::isSrcOperand(int operandIdx) 13111308Santhony.gutierrez@amd.com{ 13211692Santhony.gutierrez@amd.com return _staticInst->isSrcOperand(operandIdx); 13311308Santhony.gutierrez@amd.com} 13411308Santhony.gutierrez@amd.com 13511308Santhony.gutierrez@amd.comconst std::string& 13611308Santhony.gutierrez@amd.comGPUDynInst::disassemble() const 13711308Santhony.gutierrez@amd.com{ 13811692Santhony.gutierrez@amd.com return _staticInst->disassemble(); 13911308Santhony.gutierrez@amd.com} 14011308Santhony.gutierrez@amd.com 14111308Santhony.gutierrez@amd.comuint64_t 14211308Santhony.gutierrez@amd.comGPUDynInst::seqNum() const 14311308Santhony.gutierrez@amd.com{ 14411308Santhony.gutierrez@amd.com return _seqNum; 14511308Santhony.gutierrez@amd.com} 14611308Santhony.gutierrez@amd.com 14711308Santhony.gutierrez@amd.comEnums::StorageClassType 14811308Santhony.gutierrez@amd.comGPUDynInst::executedAs() 14911308Santhony.gutierrez@amd.com{ 15011692Santhony.gutierrez@amd.com return _staticInst->executed_as; 15111308Santhony.gutierrez@amd.com} 15211308Santhony.gutierrez@amd.com 15311308Santhony.gutierrez@amd.com// Process a memory instruction and (if necessary) submit timing request 15411308Santhony.gutierrez@amd.comvoid 15511308Santhony.gutierrez@amd.comGPUDynInst::initiateAcc(GPUDynInstPtr gpuDynInst) 15611308Santhony.gutierrez@amd.com{ 15711308Santhony.gutierrez@amd.com DPRINTF(GPUMem, "CU%d: WF[%d][%d]: mempacket status bitvector=%#x\n", 15811308Santhony.gutierrez@amd.com cu->cu_id, simdId, wfSlotId, exec_mask); 15911308Santhony.gutierrez@amd.com 16011692Santhony.gutierrez@amd.com _staticInst->initiateAcc(gpuDynInst); 16111308Santhony.gutierrez@amd.com time = 0; 16211308Santhony.gutierrez@amd.com} 16311308Santhony.gutierrez@amd.com 16411693Santhony.gutierrez@amd.comvoid 16511693Santhony.gutierrez@amd.comGPUDynInst::completeAcc(GPUDynInstPtr gpuDynInst) 16611693Santhony.gutierrez@amd.com{ 16711693Santhony.gutierrez@amd.com _staticInst->completeAcc(gpuDynInst); 16811693Santhony.gutierrez@amd.com} 16911693Santhony.gutierrez@amd.com 17011692Santhony.gutierrez@amd.com/** 17111692Santhony.gutierrez@amd.com * accessor methods for the attributes of 17211692Santhony.gutierrez@amd.com * the underlying GPU static instruction 17311692Santhony.gutierrez@amd.com */ 17411308Santhony.gutierrez@amd.combool 17511692Santhony.gutierrez@amd.comGPUDynInst::isALU() const 17611308Santhony.gutierrez@amd.com{ 17711692Santhony.gutierrez@amd.com return _staticInst->isALU(); 17811692Santhony.gutierrez@amd.com} 17911692Santhony.gutierrez@amd.com 18011692Santhony.gutierrez@amd.combool 18111692Santhony.gutierrez@amd.comGPUDynInst::isBranch() const 18211692Santhony.gutierrez@amd.com{ 18311692Santhony.gutierrez@amd.com return _staticInst->isBranch(); 18411692Santhony.gutierrez@amd.com} 18511692Santhony.gutierrez@amd.com 18611692Santhony.gutierrez@amd.combool 18711692Santhony.gutierrez@amd.comGPUDynInst::isNop() const 18811692Santhony.gutierrez@amd.com{ 18911692Santhony.gutierrez@amd.com return _staticInst->isNop(); 19011692Santhony.gutierrez@amd.com} 19111692Santhony.gutierrez@amd.com 19211692Santhony.gutierrez@amd.combool 19311692Santhony.gutierrez@amd.comGPUDynInst::isReturn() const 19411692Santhony.gutierrez@amd.com{ 19511692Santhony.gutierrez@amd.com return _staticInst->isReturn(); 19611692Santhony.gutierrez@amd.com} 19711692Santhony.gutierrez@amd.com 19811692Santhony.gutierrez@amd.combool 19911692Santhony.gutierrez@amd.comGPUDynInst::isUnconditionalJump() const 20011692Santhony.gutierrez@amd.com{ 20111692Santhony.gutierrez@amd.com return _staticInst->isUnconditionalJump(); 20211692Santhony.gutierrez@amd.com} 20311692Santhony.gutierrez@amd.com 20411692Santhony.gutierrez@amd.combool 20511692Santhony.gutierrez@amd.comGPUDynInst::isSpecialOp() const 20611692Santhony.gutierrez@amd.com{ 20711692Santhony.gutierrez@amd.com return _staticInst->isSpecialOp(); 20811692Santhony.gutierrez@amd.com} 20911692Santhony.gutierrez@amd.com 21011692Santhony.gutierrez@amd.combool 21111692Santhony.gutierrez@amd.comGPUDynInst::isWaitcnt() const 21211692Santhony.gutierrez@amd.com{ 21311692Santhony.gutierrez@amd.com return _staticInst->isWaitcnt(); 21411692Santhony.gutierrez@amd.com} 21511692Santhony.gutierrez@amd.com 21611692Santhony.gutierrez@amd.combool 21711692Santhony.gutierrez@amd.comGPUDynInst::isBarrier() const 21811692Santhony.gutierrez@amd.com{ 21911692Santhony.gutierrez@amd.com return _staticInst->isBarrier(); 22011692Santhony.gutierrez@amd.com} 22111692Santhony.gutierrez@amd.com 22211692Santhony.gutierrez@amd.combool 22311692Santhony.gutierrez@amd.comGPUDynInst::isMemFence() const 22411692Santhony.gutierrez@amd.com{ 22511692Santhony.gutierrez@amd.com return _staticInst->isMemFence(); 22611692Santhony.gutierrez@amd.com} 22711692Santhony.gutierrez@amd.com 22811692Santhony.gutierrez@amd.combool 22911692Santhony.gutierrez@amd.comGPUDynInst::isMemRef() const 23011692Santhony.gutierrez@amd.com{ 23111692Santhony.gutierrez@amd.com return _staticInst->isMemRef(); 23211692Santhony.gutierrez@amd.com} 23311692Santhony.gutierrez@amd.com 23411692Santhony.gutierrez@amd.combool 23511692Santhony.gutierrez@amd.comGPUDynInst::isFlat() const 23611692Santhony.gutierrez@amd.com{ 23711692Santhony.gutierrez@amd.com return _staticInst->isFlat(); 23811692Santhony.gutierrez@amd.com} 23911692Santhony.gutierrez@amd.com 24011692Santhony.gutierrez@amd.combool 24111692Santhony.gutierrez@amd.comGPUDynInst::isLoad() const 24211692Santhony.gutierrez@amd.com{ 24311692Santhony.gutierrez@amd.com return _staticInst->isLoad(); 24411692Santhony.gutierrez@amd.com} 24511692Santhony.gutierrez@amd.com 24611692Santhony.gutierrez@amd.combool 24711692Santhony.gutierrez@amd.comGPUDynInst::isStore() const 24811692Santhony.gutierrez@amd.com{ 24911692Santhony.gutierrez@amd.com return _staticInst->isStore(); 25011692Santhony.gutierrez@amd.com} 25111692Santhony.gutierrez@amd.com 25211692Santhony.gutierrez@amd.combool 25311692Santhony.gutierrez@amd.comGPUDynInst::isAtomic() const 25411692Santhony.gutierrez@amd.com{ 25511692Santhony.gutierrez@amd.com return _staticInst->isAtomic(); 25611692Santhony.gutierrez@amd.com} 25711692Santhony.gutierrez@amd.com 25811692Santhony.gutierrez@amd.combool 25911692Santhony.gutierrez@amd.comGPUDynInst::isAtomicNoRet() const 26011692Santhony.gutierrez@amd.com{ 26111692Santhony.gutierrez@amd.com return _staticInst->isAtomicNoRet(); 26211692Santhony.gutierrez@amd.com} 26311692Santhony.gutierrez@amd.com 26411692Santhony.gutierrez@amd.combool 26511692Santhony.gutierrez@amd.comGPUDynInst::isAtomicRet() const 26611692Santhony.gutierrez@amd.com{ 26711692Santhony.gutierrez@amd.com return _staticInst->isAtomicRet(); 26811692Santhony.gutierrez@amd.com} 26911692Santhony.gutierrez@amd.com 27011692Santhony.gutierrez@amd.combool 27111692Santhony.gutierrez@amd.comGPUDynInst::isScalar() const 27211692Santhony.gutierrez@amd.com{ 27311692Santhony.gutierrez@amd.com return _staticInst->isScalar(); 27411692Santhony.gutierrez@amd.com} 27511692Santhony.gutierrez@amd.com 27611692Santhony.gutierrez@amd.combool 27711692Santhony.gutierrez@amd.comGPUDynInst::readsSCC() const 27811692Santhony.gutierrez@amd.com{ 27911692Santhony.gutierrez@amd.com return _staticInst->readsSCC(); 28011692Santhony.gutierrez@amd.com} 28111692Santhony.gutierrez@amd.com 28211692Santhony.gutierrez@amd.combool 28311692Santhony.gutierrez@amd.comGPUDynInst::writesSCC() const 28411692Santhony.gutierrez@amd.com{ 28511692Santhony.gutierrez@amd.com return _staticInst->writesSCC(); 28611692Santhony.gutierrez@amd.com} 28711692Santhony.gutierrez@amd.com 28811692Santhony.gutierrez@amd.combool 28911692Santhony.gutierrez@amd.comGPUDynInst::readsVCC() const 29011692Santhony.gutierrez@amd.com{ 29111692Santhony.gutierrez@amd.com return _staticInst->readsVCC(); 29211692Santhony.gutierrez@amd.com} 29311692Santhony.gutierrez@amd.com 29411692Santhony.gutierrez@amd.combool 29511692Santhony.gutierrez@amd.comGPUDynInst::writesVCC() const 29611692Santhony.gutierrez@amd.com{ 29711692Santhony.gutierrez@amd.com return _staticInst->writesVCC(); 29811692Santhony.gutierrez@amd.com} 29911692Santhony.gutierrez@amd.com 30011692Santhony.gutierrez@amd.combool 30111692Santhony.gutierrez@amd.comGPUDynInst::isAtomicAnd() const 30211692Santhony.gutierrez@amd.com{ 30311692Santhony.gutierrez@amd.com return _staticInst->isAtomicAnd(); 30411692Santhony.gutierrez@amd.com} 30511692Santhony.gutierrez@amd.com 30611692Santhony.gutierrez@amd.combool 30711692Santhony.gutierrez@amd.comGPUDynInst::isAtomicOr() const 30811692Santhony.gutierrez@amd.com{ 30911692Santhony.gutierrez@amd.com return _staticInst->isAtomicOr(); 31011692Santhony.gutierrez@amd.com} 31111692Santhony.gutierrez@amd.com 31211692Santhony.gutierrez@amd.combool 31311692Santhony.gutierrez@amd.comGPUDynInst::isAtomicXor() const 31411692Santhony.gutierrez@amd.com{ 31511692Santhony.gutierrez@amd.com return _staticInst->isAtomicXor(); 31611692Santhony.gutierrez@amd.com} 31711692Santhony.gutierrez@amd.com 31811692Santhony.gutierrez@amd.combool 31911692Santhony.gutierrez@amd.comGPUDynInst::isAtomicCAS() const 32011692Santhony.gutierrez@amd.com{ 32111692Santhony.gutierrez@amd.com return _staticInst->isAtomicCAS(); 32211692Santhony.gutierrez@amd.com} 32311692Santhony.gutierrez@amd.com 32411692Santhony.gutierrez@amd.combool GPUDynInst::isAtomicExch() const 32511692Santhony.gutierrez@amd.com{ 32611692Santhony.gutierrez@amd.com return _staticInst->isAtomicExch(); 32711692Santhony.gutierrez@amd.com} 32811692Santhony.gutierrez@amd.com 32911692Santhony.gutierrez@amd.combool 33011692Santhony.gutierrez@amd.comGPUDynInst::isAtomicAdd() const 33111692Santhony.gutierrez@amd.com{ 33211692Santhony.gutierrez@amd.com return _staticInst->isAtomicAdd(); 33311692Santhony.gutierrez@amd.com} 33411692Santhony.gutierrez@amd.com 33511692Santhony.gutierrez@amd.combool 33611692Santhony.gutierrez@amd.comGPUDynInst::isAtomicSub() const 33711692Santhony.gutierrez@amd.com{ 33811692Santhony.gutierrez@amd.com return _staticInst->isAtomicSub(); 33911692Santhony.gutierrez@amd.com} 34011692Santhony.gutierrez@amd.com 34111692Santhony.gutierrez@amd.combool 34211692Santhony.gutierrez@amd.comGPUDynInst::isAtomicInc() const 34311692Santhony.gutierrez@amd.com{ 34411692Santhony.gutierrez@amd.com return _staticInst->isAtomicInc(); 34511692Santhony.gutierrez@amd.com} 34611692Santhony.gutierrez@amd.com 34711692Santhony.gutierrez@amd.combool 34811692Santhony.gutierrez@amd.comGPUDynInst::isAtomicDec() const 34911692Santhony.gutierrez@amd.com{ 35011692Santhony.gutierrez@amd.com return _staticInst->isAtomicDec(); 35111692Santhony.gutierrez@amd.com} 35211692Santhony.gutierrez@amd.com 35311692Santhony.gutierrez@amd.combool 35411692Santhony.gutierrez@amd.comGPUDynInst::isAtomicMax() const 35511692Santhony.gutierrez@amd.com{ 35611692Santhony.gutierrez@amd.com return _staticInst->isAtomicMax(); 35711692Santhony.gutierrez@amd.com} 35811692Santhony.gutierrez@amd.com 35911692Santhony.gutierrez@amd.combool 36011692Santhony.gutierrez@amd.comGPUDynInst::isAtomicMin() const 36111692Santhony.gutierrez@amd.com{ 36211692Santhony.gutierrez@amd.com return _staticInst->isAtomicMin(); 36311692Santhony.gutierrez@amd.com} 36411692Santhony.gutierrez@amd.com 36511692Santhony.gutierrez@amd.combool 36611692Santhony.gutierrez@amd.comGPUDynInst::isArgLoad() const 36711692Santhony.gutierrez@amd.com{ 36811692Santhony.gutierrez@amd.com return _staticInst->isArgLoad(); 36911692Santhony.gutierrez@amd.com} 37011692Santhony.gutierrez@amd.com 37111692Santhony.gutierrez@amd.combool 37211692Santhony.gutierrez@amd.comGPUDynInst::isGlobalMem() const 37311692Santhony.gutierrez@amd.com{ 37411692Santhony.gutierrez@amd.com return _staticInst->isGlobalMem(); 37511692Santhony.gutierrez@amd.com} 37611692Santhony.gutierrez@amd.com 37711692Santhony.gutierrez@amd.combool 37811692Santhony.gutierrez@amd.comGPUDynInst::isLocalMem() const 37911692Santhony.gutierrez@amd.com{ 38011692Santhony.gutierrez@amd.com return _staticInst->isLocalMem(); 38111692Santhony.gutierrez@amd.com} 38211692Santhony.gutierrez@amd.com 38311692Santhony.gutierrez@amd.combool 38411692Santhony.gutierrez@amd.comGPUDynInst::isArgSeg() const 38511692Santhony.gutierrez@amd.com{ 38611692Santhony.gutierrez@amd.com return _staticInst->isArgSeg(); 38711692Santhony.gutierrez@amd.com} 38811692Santhony.gutierrez@amd.com 38911692Santhony.gutierrez@amd.combool 39011692Santhony.gutierrez@amd.comGPUDynInst::isGlobalSeg() const 39111692Santhony.gutierrez@amd.com{ 39211692Santhony.gutierrez@amd.com return _staticInst->isGlobalSeg(); 39311692Santhony.gutierrez@amd.com} 39411692Santhony.gutierrez@amd.com 39511692Santhony.gutierrez@amd.combool 39611692Santhony.gutierrez@amd.comGPUDynInst::isGroupSeg() const 39711692Santhony.gutierrez@amd.com{ 39811692Santhony.gutierrez@amd.com return _staticInst->isGroupSeg(); 39911692Santhony.gutierrez@amd.com} 40011692Santhony.gutierrez@amd.com 40111692Santhony.gutierrez@amd.combool 40211692Santhony.gutierrez@amd.comGPUDynInst::isKernArgSeg() const 40311692Santhony.gutierrez@amd.com{ 40411692Santhony.gutierrez@amd.com return _staticInst->isKernArgSeg(); 40511692Santhony.gutierrez@amd.com} 40611692Santhony.gutierrez@amd.com 40711692Santhony.gutierrez@amd.combool 40811692Santhony.gutierrez@amd.comGPUDynInst::isPrivateSeg() const 40911692Santhony.gutierrez@amd.com{ 41011692Santhony.gutierrez@amd.com return _staticInst->isPrivateSeg(); 41111692Santhony.gutierrez@amd.com} 41211692Santhony.gutierrez@amd.com 41311692Santhony.gutierrez@amd.combool 41411692Santhony.gutierrez@amd.comGPUDynInst::isReadOnlySeg() const 41511692Santhony.gutierrez@amd.com{ 41611692Santhony.gutierrez@amd.com return _staticInst->isReadOnlySeg(); 41711692Santhony.gutierrez@amd.com} 41811692Santhony.gutierrez@amd.com 41911692Santhony.gutierrez@amd.combool 42011692Santhony.gutierrez@amd.comGPUDynInst::isSpillSeg() const 42111692Santhony.gutierrez@amd.com{ 42211692Santhony.gutierrez@amd.com return _staticInst->isSpillSeg(); 42311692Santhony.gutierrez@amd.com} 42411692Santhony.gutierrez@amd.com 42511692Santhony.gutierrez@amd.combool 42611692Santhony.gutierrez@amd.comGPUDynInst::isWorkitemScope() const 42711692Santhony.gutierrez@amd.com{ 42811692Santhony.gutierrez@amd.com return _staticInst->isWorkitemScope(); 42911692Santhony.gutierrez@amd.com} 43011692Santhony.gutierrez@amd.com 43111692Santhony.gutierrez@amd.combool 43211692Santhony.gutierrez@amd.comGPUDynInst::isWavefrontScope() const 43311692Santhony.gutierrez@amd.com{ 43411692Santhony.gutierrez@amd.com return _staticInst->isWavefrontScope(); 43511692Santhony.gutierrez@amd.com} 43611692Santhony.gutierrez@amd.com 43711692Santhony.gutierrez@amd.combool 43811692Santhony.gutierrez@amd.comGPUDynInst::isWorkgroupScope() const 43911692Santhony.gutierrez@amd.com{ 44011692Santhony.gutierrez@amd.com return _staticInst->isWorkgroupScope(); 44111692Santhony.gutierrez@amd.com} 44211692Santhony.gutierrez@amd.com 44311692Santhony.gutierrez@amd.combool 44411692Santhony.gutierrez@amd.comGPUDynInst::isDeviceScope() const 44511692Santhony.gutierrez@amd.com{ 44611692Santhony.gutierrez@amd.com return _staticInst->isDeviceScope(); 44711692Santhony.gutierrez@amd.com} 44811692Santhony.gutierrez@amd.com 44911692Santhony.gutierrez@amd.combool 45011692Santhony.gutierrez@amd.comGPUDynInst::isSystemScope() const 45111692Santhony.gutierrez@amd.com{ 45211692Santhony.gutierrez@amd.com return _staticInst->isSystemScope(); 45311692Santhony.gutierrez@amd.com} 45411692Santhony.gutierrez@amd.com 45511692Santhony.gutierrez@amd.combool 45611692Santhony.gutierrez@amd.comGPUDynInst::isNoScope() const 45711692Santhony.gutierrez@amd.com{ 45811692Santhony.gutierrez@amd.com return _staticInst->isNoScope(); 45911692Santhony.gutierrez@amd.com} 46011692Santhony.gutierrez@amd.com 46111692Santhony.gutierrez@amd.combool 46211692Santhony.gutierrez@amd.comGPUDynInst::isRelaxedOrder() const 46311692Santhony.gutierrez@amd.com{ 46411692Santhony.gutierrez@amd.com return _staticInst->isRelaxedOrder(); 46511692Santhony.gutierrez@amd.com} 46611692Santhony.gutierrez@amd.com 46711692Santhony.gutierrez@amd.combool 46811692Santhony.gutierrez@amd.comGPUDynInst::isAcquire() const 46911692Santhony.gutierrez@amd.com{ 47011692Santhony.gutierrez@amd.com return _staticInst->isAcquire(); 47111692Santhony.gutierrez@amd.com} 47211692Santhony.gutierrez@amd.com 47311692Santhony.gutierrez@amd.combool 47411692Santhony.gutierrez@amd.comGPUDynInst::isRelease() const 47511692Santhony.gutierrez@amd.com{ 47611692Santhony.gutierrez@amd.com return _staticInst->isRelease(); 47711692Santhony.gutierrez@amd.com} 47811692Santhony.gutierrez@amd.com 47911692Santhony.gutierrez@amd.combool 48011692Santhony.gutierrez@amd.comGPUDynInst::isAcquireRelease() const 48111692Santhony.gutierrez@amd.com{ 48211692Santhony.gutierrez@amd.com return _staticInst->isAcquireRelease(); 48311692Santhony.gutierrez@amd.com} 48411692Santhony.gutierrez@amd.com 48511692Santhony.gutierrez@amd.combool 48611692Santhony.gutierrez@amd.comGPUDynInst::isNoOrder() const 48711692Santhony.gutierrez@amd.com{ 48811692Santhony.gutierrez@amd.com return _staticInst->isNoOrder(); 48911692Santhony.gutierrez@amd.com} 49011692Santhony.gutierrez@amd.com 49111692Santhony.gutierrez@amd.combool 49211692Santhony.gutierrez@amd.comGPUDynInst::isGloballyCoherent() const 49311692Santhony.gutierrez@amd.com{ 49411692Santhony.gutierrez@amd.com return _staticInst->isGloballyCoherent(); 49511692Santhony.gutierrez@amd.com} 49611692Santhony.gutierrez@amd.com 49711692Santhony.gutierrez@amd.combool 49811692Santhony.gutierrez@amd.comGPUDynInst::isSystemCoherent() const 49911692Santhony.gutierrez@amd.com{ 50011692Santhony.gutierrez@amd.com return _staticInst->isSystemCoherent(); 50111308Santhony.gutierrez@amd.com} 50211308Santhony.gutierrez@amd.com 50311308Santhony.gutierrez@amd.comvoid 50411308Santhony.gutierrez@amd.comGPUDynInst::updateStats() 50511308Santhony.gutierrez@amd.com{ 50611692Santhony.gutierrez@amd.com if (_staticInst->isLocalMem()) { 50711308Santhony.gutierrez@amd.com // access to LDS (shared) memory 50811308Santhony.gutierrez@amd.com cu->dynamicLMemInstrCnt++; 50911308Santhony.gutierrez@amd.com } else { 51011308Santhony.gutierrez@amd.com // access to global memory 51111308Santhony.gutierrez@amd.com 51211308Santhony.gutierrez@amd.com // update PageDivergence histogram 51311308Santhony.gutierrez@amd.com int number_pages_touched = cu->pagesTouched.size(); 51411308Santhony.gutierrez@amd.com assert(number_pages_touched); 51511308Santhony.gutierrez@amd.com cu->pageDivergenceDist.sample(number_pages_touched); 51611308Santhony.gutierrez@amd.com 51711308Santhony.gutierrez@amd.com std::pair<ComputeUnit::pageDataStruct::iterator, bool> ret; 51811308Santhony.gutierrez@amd.com 51911308Santhony.gutierrez@amd.com for (auto it : cu->pagesTouched) { 52011308Santhony.gutierrez@amd.com // see if this page has been touched before. if not, this also 52111308Santhony.gutierrez@amd.com // inserts the page into the table. 52211308Santhony.gutierrez@amd.com ret = cu->pageAccesses 52311308Santhony.gutierrez@amd.com .insert(ComputeUnit::pageDataStruct::value_type(it.first, 52411308Santhony.gutierrez@amd.com std::make_pair(1, it.second))); 52511308Santhony.gutierrez@amd.com 52611308Santhony.gutierrez@amd.com // if yes, then update the stats 52711308Santhony.gutierrez@amd.com if (!ret.second) { 52811308Santhony.gutierrez@amd.com ret.first->second.first++; 52911308Santhony.gutierrez@amd.com ret.first->second.second += it.second; 53011308Santhony.gutierrez@amd.com } 53111308Santhony.gutierrez@amd.com } 53211308Santhony.gutierrez@amd.com 53311308Santhony.gutierrez@amd.com cu->pagesTouched.clear(); 53411308Santhony.gutierrez@amd.com 53511308Santhony.gutierrez@amd.com // total number of memory instructions (dynamic) 53611308Santhony.gutierrez@amd.com // Atomics are counted as a single memory instruction. 53711308Santhony.gutierrez@amd.com // this is # memory instructions per wavefronts, not per workitem 53811308Santhony.gutierrez@amd.com cu->dynamicGMemInstrCnt++; 53911308Santhony.gutierrez@amd.com } 54011308Santhony.gutierrez@amd.com} 541