cpu: Rename GpuThread in gpu_ruby_test tester
The GpuThread class will be used as an abstract class for any thread type (CPU, GPU, DMA) therefore changing to a more appropriate name. Change-Id: If241edb53ea405c95b0315c609176c6470b29931 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/39935 Reviewed-by: Matt Sinclair <mattdsinclair@gmail.com> Reviewed-by: Jason Lowe-Power <power.jg@gmail.com> Maintainer: Matt Sinclair <mattdsinclair@gmail.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
|
||||
# Copyright (c) 2017-2021 Advanced Micro Devices, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# For use for simulation and test purposes only
|
||||
@@ -32,8 +32,8 @@
|
||||
from m5.params import *
|
||||
from m5.proxy import *
|
||||
|
||||
from m5.objects.GpuThread import GpuThread
|
||||
from m5.objects.TesterThread import TesterThread
|
||||
|
||||
class CpuThread(GpuThread):
|
||||
class CpuThread(TesterThread):
|
||||
type = 'CpuThread'
|
||||
cxx_header = "cpu/testers/gpu_ruby_test/cpu_thread.hh"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
|
||||
# Copyright (c) 2017-2021 Advanced Micro Devices, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# For use for simulation and test purposes only
|
||||
@@ -32,9 +32,9 @@
|
||||
from m5.params import *
|
||||
from m5.proxy import *
|
||||
|
||||
from m5.objects.GpuThread import GpuThread
|
||||
from m5.objects.TesterThread import TesterThread
|
||||
|
||||
class GpuWavefront(GpuThread):
|
||||
class GpuWavefront(TesterThread):
|
||||
type = 'GpuWavefront'
|
||||
cxx_header = "cpu/testers/gpu_ruby_test/gpu_wavefront.hh"
|
||||
cu_id = Param.Int("Compute Unit ID")
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
|
||||
* Copyright (c) 2017-2021 Advanced Micro Devices, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* For use for simulation and test purposes only
|
||||
@@ -113,11 +113,11 @@ AddressManager.hh/cc -- This manages address space, randomly maps address to
|
||||
location, generates locations for all episodes,
|
||||
maintains per-location last writer and validates
|
||||
values returned from load actions.
|
||||
GpuThread.hh/cc -- This is abstract class for CPU threads and GPU
|
||||
TesterThread.hh/cc -- This is abstract class for CPU threads and GPU
|
||||
wavefronts. It generates and executes a series of
|
||||
episodes.
|
||||
CpuThread.hh/cc -- Thread class for CPU threads. Not fully implemented yet
|
||||
GpuWavefront.hh/cc -- GpuThread class for GPU wavefronts.
|
||||
GpuWavefront.hh/cc -- Thread class for GPU wavefronts.
|
||||
Episode.hh/cc -- Class to encapsulate an episode, notably including
|
||||
episode load/store structure and ordering.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
|
||||
# Copyright (c) 2017-2021 Advanced Micro Devices, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# For use for simulation and test purposes only
|
||||
@@ -40,15 +40,15 @@ if env['PROTOCOL'] == 'None':
|
||||
Return()
|
||||
|
||||
SimObject('ProtocolTester.py')
|
||||
SimObject('GpuThread.py')
|
||||
SimObject('CpuThread.py')
|
||||
SimObject('GpuWavefront.py')
|
||||
SimObject('TesterThread.py')
|
||||
|
||||
Source('address_manager.cc')
|
||||
Source('episode.cc')
|
||||
Source('protocol_tester.cc')
|
||||
Source('gpu_thread.cc')
|
||||
Source('cpu_thread.cc')
|
||||
Source('gpu_wavefront.cc')
|
||||
Source('tester_thread.cc')
|
||||
|
||||
DebugFlag('ProtocolTest')
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
|
||||
# Copyright (c) 2017-2021 Advanced Micro Devices, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# For use for simulation and test purposes only
|
||||
@@ -33,10 +33,10 @@ from m5.objects.ClockedObject import ClockedObject
|
||||
from m5.params import *
|
||||
from m5.proxy import *
|
||||
|
||||
class GpuThread(ClockedObject):
|
||||
type = 'GpuThread'
|
||||
class TesterThread(ClockedObject):
|
||||
type = 'TesterThread'
|
||||
abstract = True
|
||||
cxx_header = "cpu/testers/gpu_ruby_test/gpu_thread.hh"
|
||||
thread_id = Param.Int("Unique GpuThread ID")
|
||||
cxx_header = "cpu/testers/gpu_ruby_test/tester_thread.hh"
|
||||
thread_id = Param.Int("Unique TesterThread ID")
|
||||
num_lanes = Param.Int("Number of lanes this thread has")
|
||||
deadlock_threshold = Param.Cycles(1000000000, "Deadlock threshold")
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
|
||||
* Copyright (c) 2017-2021 Advanced Micro Devices, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* For use for simulation and test purposes only
|
||||
@@ -161,7 +161,7 @@ class AddressManager
|
||||
|
||||
const std::string print() const
|
||||
{
|
||||
return "(GpuThread ID " + std::to_string(threadId) +
|
||||
return "(TesterThread ID " + std::to_string(threadId) +
|
||||
", CU ID " + std::to_string(cuId) +
|
||||
", Episode ID " + std::to_string(episodeId) +
|
||||
", Value " + std::to_string(value) +
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
|
||||
* Copyright (c) 2017-2021 Advanced Micro Devices, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* For use for simulation and test purposes only
|
||||
@@ -36,7 +36,7 @@
|
||||
#include "debug/ProtocolTest.hh"
|
||||
|
||||
CpuThread::CpuThread(const Params &p)
|
||||
:GpuThread(p)
|
||||
: TesterThread(p)
|
||||
{
|
||||
threadName = "CpuThread(Thread ID " + std::to_string(threadId) + ")";
|
||||
threadEvent.setDesc("CpuThread tick");
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
|
||||
* Copyright (c) 2017-2021 Advanced Micro Devices, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* For use for simulation and test purposes only
|
||||
@@ -34,11 +34,11 @@
|
||||
#ifndef CPU_TESTERS_PROTOCOL_TESTER_CPU_THREAD_HH_
|
||||
#define CPU_TESTERS_PROTOCOL_TESTER_CPU_THREAD_HH_
|
||||
|
||||
#include "cpu/testers/gpu_ruby_test/gpu_thread.hh"
|
||||
#include "cpu/testers/gpu_ruby_test/tester_thread.hh"
|
||||
#include "params/CpuThread.hh"
|
||||
#include "sim/clocked_object.hh"
|
||||
|
||||
class CpuThread : public GpuThread
|
||||
class CpuThread : public TesterThread
|
||||
{
|
||||
public:
|
||||
typedef CpuThreadParams Params;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
|
||||
* Copyright (c) 2017-2021 Advanced Micro Devices, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* For use for simulation and test purposes only
|
||||
@@ -36,10 +36,10 @@
|
||||
#include <fstream>
|
||||
#include <unordered_set>
|
||||
|
||||
#include "cpu/testers/gpu_ruby_test/gpu_thread.hh"
|
||||
#include "cpu/testers/gpu_ruby_test/protocol_tester.hh"
|
||||
#include "cpu/testers/gpu_ruby_test/tester_thread.hh"
|
||||
|
||||
Episode::Episode(ProtocolTester* _tester, GpuThread* _thread, int num_loads,
|
||||
Episode::Episode(ProtocolTester* _tester, TesterThread* _thread, int num_loads,
|
||||
int num_stores)
|
||||
: tester(_tester),
|
||||
thread(_thread),
|
||||
@@ -156,8 +156,8 @@ Episode::initActions()
|
||||
normal_loc, false) ||
|
||||
!this->checkDRF(atomicLocs[lane], normal_loc,
|
||||
false, lane)) {
|
||||
panic("GpuTh %d - Data race detected. STOPPED!\n",
|
||||
thread->getGpuThreadId());
|
||||
panic("TestTh %d - Data race detected. STOPPED!\n",
|
||||
thread->getTesterThreadId());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -175,8 +175,8 @@ Episode::initActions()
|
||||
normal_loc, true) ||
|
||||
!this->checkDRF(atomicLocs[lane], normal_loc,
|
||||
true, lane)) {
|
||||
panic("GpuTh %d - Data race detected. STOPPED!\n",
|
||||
thread->getGpuThreadId());
|
||||
panic("TestTh %d - Data race detected. STOPPED!\n",
|
||||
thread->getTesterThreadId());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -250,13 +250,13 @@ Episode::checkDRF(Location atomic_loc, Location loc, bool isStore,
|
||||
!action->isMemFenceAction()) {
|
||||
if (isStore && loc == action->getLocation(lane)) {
|
||||
warn("ST at location %d races against thread %d\n",
|
||||
loc, thread->getGpuThreadId());
|
||||
loc, thread->getTesterThreadId());
|
||||
return false;
|
||||
} else if (!isStore &&
|
||||
action->getType() == Action::Type::STORE &&
|
||||
loc == action->getLocation(lane)) {
|
||||
warn("LD at location %d races against thread %d\n",
|
||||
loc, thread->getGpuThreadId());
|
||||
loc, thread->getTesterThreadId());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
|
||||
* Copyright (c) 2017-2021 Advanced Micro Devices, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* For use for simulation and test purposes only
|
||||
@@ -39,7 +39,7 @@
|
||||
#include "cpu/testers/gpu_ruby_test/address_manager.hh"
|
||||
|
||||
class ProtocolTester;
|
||||
class GpuThread;
|
||||
class TesterThread;
|
||||
|
||||
class Episode
|
||||
{
|
||||
@@ -74,7 +74,7 @@ class Episode
|
||||
LocationList locations;
|
||||
};
|
||||
|
||||
Episode(ProtocolTester* tester, GpuThread* thread, int num_loads,
|
||||
Episode(ProtocolTester* tester, TesterThread* thread, int num_loads,
|
||||
int num_stores);
|
||||
~Episode();
|
||||
|
||||
@@ -97,7 +97,7 @@ class Episode
|
||||
private:
|
||||
// pointers to tester, thread and address amanger structures
|
||||
ProtocolTester *tester;
|
||||
GpuThread *thread;
|
||||
TesterThread *thread;
|
||||
AddressManager *addrManager;
|
||||
|
||||
// a unique episode id
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
|
||||
* Copyright (c) 2017-2021 Advanced Micro Devices, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* For use for simulation and test purposes only
|
||||
@@ -36,9 +36,9 @@
|
||||
#include "debug/ProtocolTest.hh"
|
||||
|
||||
GpuWavefront::GpuWavefront(const Params &p)
|
||||
: GpuThread(p), cuId(p.cu_id)
|
||||
: TesterThread(p), cuId(p.cu_id)
|
||||
{
|
||||
threadName = "GpuWavefront(GpuThread ID = " + std::to_string(threadId) +
|
||||
threadName = "GpuWavefront(TesterThread ID = " + std::to_string(threadId) +
|
||||
", CU ID = " + std::to_string(cuId) + ")";
|
||||
threadEvent.setDesc("GpuWavefront tick");
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
|
||||
* Copyright (c) 2017-2021 Advanced Micro Devices, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* For use for simulation and test purposes only
|
||||
@@ -34,11 +34,11 @@
|
||||
#ifndef CPU_TESTERS_PROTOCOL_TESTER_GPU_WAVEFRONT_HH_
|
||||
#define CPU_TESTERS_PROTOCOL_TESTER_GPU_WAVEFRONT_HH_
|
||||
|
||||
#include "cpu/testers/gpu_ruby_test/gpu_thread.hh"
|
||||
#include "cpu/testers/gpu_ruby_test/tester_thread.hh"
|
||||
#include "params/GpuWavefront.hh"
|
||||
#include "sim/clocked_object.hh"
|
||||
|
||||
class GpuWavefront : public GpuThread
|
||||
class GpuWavefront : public TesterThread
|
||||
{
|
||||
public:
|
||||
typedef GpuWavefrontParams Params;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
|
||||
* Copyright (c) 2017-2021 Advanced Micro Devices, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* For use for simulation and test purposes only
|
||||
@@ -39,8 +39,8 @@
|
||||
#include <random>
|
||||
|
||||
#include "cpu/testers/gpu_ruby_test/cpu_thread.hh"
|
||||
#include "cpu/testers/gpu_ruby_test/gpu_thread.hh"
|
||||
#include "cpu/testers/gpu_ruby_test/gpu_wavefront.hh"
|
||||
#include "cpu/testers/gpu_ruby_test/tester_thread.hh"
|
||||
#include "debug/ProtocolTest.hh"
|
||||
#include "mem/request.hh"
|
||||
#include "sim/sim_exit.hh"
|
||||
@@ -183,7 +183,7 @@ ProtocolTester::init()
|
||||
|
||||
// connect cpu threads to cpu's ports
|
||||
for (int cpu_id = 0; cpu_id < numCpus; ++cpu_id) {
|
||||
cpuThreads[cpu_id]->attachGpuThreadToPorts(this,
|
||||
cpuThreads[cpu_id]->attachTesterThreadToPorts(this,
|
||||
static_cast<SeqPort*>(cpuPorts[cpu_id]));
|
||||
cpuThreads[cpu_id]->scheduleWakeup();
|
||||
cpuThreads[cpu_id]->scheduleDeadlockCheckEvent();
|
||||
@@ -202,7 +202,7 @@ ProtocolTester::init()
|
||||
|
||||
for (int i = 0; i < numWfsPerCu; ++i) {
|
||||
wfId = cu_id * numWfsPerCu + i;
|
||||
wfs[wfId]->attachGpuThreadToPorts(this,
|
||||
wfs[wfId]->attachTesterThreadToPorts(this,
|
||||
static_cast<SeqPort*>(cuVectorPorts[vectorPortId]),
|
||||
cuTokenPorts[vectorPortId],
|
||||
static_cast<SeqPort*>(cuSqcPorts[sqcPortId]),
|
||||
@@ -270,12 +270,12 @@ ProtocolTester::checkDRF(Location atomic_loc,
|
||||
{
|
||||
if (debugTester) {
|
||||
// go through all active episodes in all threads
|
||||
for (const GpuThread* th : wfs) {
|
||||
for (const TesterThread* th : wfs) {
|
||||
if (!th->checkDRF(atomic_loc, loc, isStore))
|
||||
return false;
|
||||
}
|
||||
|
||||
for (const GpuThread* th : cpuThreads) {
|
||||
for (const TesterThread* th : cpuThreads) {
|
||||
if (!th->checkDRF(atomic_loc, loc, isStore))
|
||||
return false;
|
||||
}
|
||||
@@ -314,7 +314,7 @@ ProtocolTester::SeqPort::recvTimingResp(PacketPtr pkt)
|
||||
// get the requesting thread from the original sender state
|
||||
ProtocolTester::SenderState* senderState =
|
||||
safe_cast<ProtocolTester::SenderState*>(pkt->senderState);
|
||||
GpuThread *th = senderState->th;
|
||||
TesterThread *th = senderState->th;
|
||||
|
||||
th->hitCallback(pkt);
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
|
||||
* Copyright (c) 2017-2021 Advanced Micro Devices, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* For use for simulation and test purposes only
|
||||
@@ -37,9 +37,9 @@
|
||||
/*
|
||||
* The tester includes the main ProtocolTester that manages all ports to the
|
||||
* memory system.
|
||||
* GpuThreads are mapped to certain data port(s)
|
||||
* TesterThreads are mapped to certain data port(s)
|
||||
*
|
||||
* GpuThreads inject memory requests through their data ports.
|
||||
* TesterThreads inject memory requests through their data ports.
|
||||
* The tester receives and validates responses from the memory.
|
||||
*
|
||||
* Main components
|
||||
@@ -61,7 +61,7 @@
|
||||
#include "mem/token_port.hh"
|
||||
#include "params/ProtocolTester.hh"
|
||||
|
||||
class GpuThread;
|
||||
class TesterThread;
|
||||
class CpuThread;
|
||||
class GpuWavefront;
|
||||
|
||||
@@ -98,8 +98,8 @@ class ProtocolTester : public ClockedObject
|
||||
|
||||
struct SenderState : public Packet::SenderState
|
||||
{
|
||||
GpuThread* th;
|
||||
SenderState(GpuThread* _th)
|
||||
TesterThread* th;
|
||||
SenderState(TesterThread* _th)
|
||||
{
|
||||
assert(_th);
|
||||
th = _th;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
|
||||
* Copyright (c) 2017-2021 Advanced Micro Devices, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* For use for simulation and test purposes only
|
||||
@@ -31,15 +31,15 @@
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "cpu/testers/gpu_ruby_test/gpu_thread.hh"
|
||||
#include "cpu/testers/gpu_ruby_test/tester_thread.hh"
|
||||
|
||||
#include <fstream>
|
||||
|
||||
#include "debug/ProtocolTest.hh"
|
||||
|
||||
GpuThread::GpuThread(const Params &p)
|
||||
TesterThread::TesterThread(const Params &p)
|
||||
: ClockedObject(p),
|
||||
threadEvent(this, "GpuThread tick"),
|
||||
threadEvent(this, "TesterThread tick"),
|
||||
deadlockCheckEvent(this),
|
||||
threadId(p.thread_id),
|
||||
numLanes(p.num_lanes),
|
||||
@@ -51,7 +51,7 @@ GpuThread::GpuThread(const Params &p)
|
||||
{
|
||||
}
|
||||
|
||||
GpuThread::~GpuThread()
|
||||
TesterThread::~TesterThread()
|
||||
{
|
||||
for (auto ep : episodeHistory) {
|
||||
assert(ep != nullptr);
|
||||
@@ -60,7 +60,7 @@ GpuThread::~GpuThread()
|
||||
}
|
||||
|
||||
void
|
||||
GpuThread::wakeup()
|
||||
TesterThread::wakeup()
|
||||
{
|
||||
// this thread is waken up by one of the following events
|
||||
// - hitCallback is called
|
||||
@@ -108,14 +108,14 @@ GpuThread::wakeup()
|
||||
}
|
||||
|
||||
void
|
||||
GpuThread::scheduleWakeup()
|
||||
TesterThread::scheduleWakeup()
|
||||
{
|
||||
assert(!threadEvent.scheduled());
|
||||
schedule(threadEvent, nextCycle());
|
||||
}
|
||||
|
||||
void
|
||||
GpuThread::scheduleDeadlockCheckEvent()
|
||||
TesterThread::scheduleDeadlockCheckEvent()
|
||||
{
|
||||
// after this first schedule, the deadlock event is scheduled by itself
|
||||
assert(!deadlockCheckEvent.scheduled());
|
||||
@@ -123,7 +123,7 @@ GpuThread::scheduleDeadlockCheckEvent()
|
||||
}
|
||||
|
||||
void
|
||||
GpuThread::attachGpuThreadToPorts(ProtocolTester *_tester,
|
||||
TesterThread::attachTesterThreadToPorts(ProtocolTester *_tester,
|
||||
ProtocolTester::SeqPort *_port,
|
||||
ProtocolTester::GMTokenPort *_tokenPort,
|
||||
ProtocolTester::SeqPort *_scalarPort,
|
||||
@@ -141,7 +141,7 @@ GpuThread::attachGpuThreadToPorts(ProtocolTester *_tester,
|
||||
}
|
||||
|
||||
void
|
||||
GpuThread::issueNewEpisode()
|
||||
TesterThread::issueNewEpisode()
|
||||
{
|
||||
int num_reg_loads = random() % tester->getEpisodeLength();
|
||||
int num_reg_stores = tester->getEpisodeLength() - num_reg_loads;
|
||||
@@ -152,7 +152,7 @@ GpuThread::issueNewEpisode()
|
||||
}
|
||||
|
||||
bool
|
||||
GpuThread::isNextActionReady()
|
||||
TesterThread::isNextActionReady()
|
||||
{
|
||||
if (!curEpisode->hasMoreActions()) {
|
||||
return false;
|
||||
@@ -241,7 +241,7 @@ GpuThread::isNextActionReady()
|
||||
}
|
||||
|
||||
void
|
||||
GpuThread::issueNextAction()
|
||||
TesterThread::issueNextAction()
|
||||
{
|
||||
switch(curAction->getType()) {
|
||||
case Episode::Action::Type::ATOMIC:
|
||||
@@ -278,7 +278,7 @@ GpuThread::issueNextAction()
|
||||
}
|
||||
|
||||
void
|
||||
GpuThread::addOutstandingReqs(OutstandingReqTable& req_table, Addr address,
|
||||
TesterThread::addOutstandingReqs(OutstandingReqTable& req_table, Addr address,
|
||||
int lane, Location loc, Value stored_val)
|
||||
{
|
||||
OutstandingReqTable::iterator it = req_table.find(address);
|
||||
@@ -294,8 +294,8 @@ GpuThread::addOutstandingReqs(OutstandingReqTable& req_table, Addr address,
|
||||
}
|
||||
}
|
||||
|
||||
GpuThread::OutstandingReq
|
||||
GpuThread::popOutstandingReq(OutstandingReqTable& req_table, Addr addr)
|
||||
TesterThread::OutstandingReq
|
||||
TesterThread::popOutstandingReq(OutstandingReqTable& req_table, Addr addr)
|
||||
{
|
||||
OutstandingReqTable::iterator it = req_table.find(addr);
|
||||
|
||||
@@ -321,7 +321,7 @@ GpuThread::popOutstandingReq(OutstandingReqTable& req_table, Addr addr)
|
||||
}
|
||||
|
||||
void
|
||||
GpuThread::validateAtomicResp(Location loc, int lane, Value ret_val)
|
||||
TesterThread::validateAtomicResp(Location loc, int lane, Value ret_val)
|
||||
{
|
||||
if (!addrManager->validateAtomicResp(loc, ret_val)) {
|
||||
std::stringstream ss;
|
||||
@@ -345,7 +345,7 @@ GpuThread::validateAtomicResp(Location loc, int lane, Value ret_val)
|
||||
}
|
||||
|
||||
void
|
||||
GpuThread::validateLoadResp(Location loc, int lane, Value ret_val)
|
||||
TesterThread::validateLoadResp(Location loc, int lane, Value ret_val)
|
||||
{
|
||||
if (ret_val != addrManager->getLoggedValue(loc)) {
|
||||
std::stringstream ss;
|
||||
@@ -354,7 +354,7 @@ GpuThread::validateLoadResp(Location loc, int lane, Value ret_val)
|
||||
// basic info
|
||||
ss << threadName << ": Loaded value is not consistent with "
|
||||
<< "the last stored value\n"
|
||||
<< "\tGpuThread " << threadId << "\n"
|
||||
<< "\tTesterThread " << threadId << "\n"
|
||||
<< "\tEpisode " << curEpisode->getEpisodeId() << "\n"
|
||||
<< "\tLane ID " << lane << "\n"
|
||||
<< "\tAddress " << printAddress(addr) << "\n"
|
||||
@@ -372,7 +372,7 @@ GpuThread::validateLoadResp(Location loc, int lane, Value ret_val)
|
||||
}
|
||||
|
||||
bool
|
||||
GpuThread::checkDRF(Location atomic_loc, Location loc, bool isStore) const
|
||||
TesterThread::checkDRF(Location atomic_loc, Location loc, bool isStore) const
|
||||
{
|
||||
if (curEpisode && curEpisode->isEpsActive()) {
|
||||
// check against the current episode this thread is executing
|
||||
@@ -383,7 +383,7 @@ GpuThread::checkDRF(Location atomic_loc, Location loc, bool isStore) const
|
||||
}
|
||||
|
||||
void
|
||||
GpuThread::checkDeadlock()
|
||||
TesterThread::checkDeadlock()
|
||||
{
|
||||
if ((curCycle() - lastActiveCycle) > deadlockThreshold) {
|
||||
// deadlock detected
|
||||
@@ -408,7 +408,7 @@ GpuThread::checkDeadlock()
|
||||
}
|
||||
|
||||
void
|
||||
GpuThread::printOutstandingReqs(const OutstandingReqTable& table,
|
||||
TesterThread::printOutstandingReqs(const OutstandingReqTable& table,
|
||||
std::stringstream& ss) const
|
||||
{
|
||||
Cycles cur_cycle = curCycle();
|
||||
@@ -423,7 +423,7 @@ GpuThread::printOutstandingReqs(const OutstandingReqTable& table,
|
||||
}
|
||||
|
||||
void
|
||||
GpuThread::printAllOutstandingReqs(std::stringstream& ss) const
|
||||
TesterThread::printAllOutstandingReqs(std::stringstream& ss) const
|
||||
{
|
||||
// dump all outstanding requests of this thread
|
||||
ss << "\t\tOutstanding Loads:\n";
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2020 Advanced Micro Devices, Inc.
|
||||
* Copyright (c) 2017-2021 Advanced Micro Devices, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* For use for simulation and test purposes only
|
||||
@@ -32,11 +32,11 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* GPU thread issues requests to and receives responses from Ruby memory
|
||||
* Tester thread issues requests to and receives responses from Ruby memory
|
||||
*/
|
||||
|
||||
#ifndef CPU_TESTERS_PROTOCOL_TESTER_GPU_THREAD_HH_
|
||||
#define CPU_TESTERS_PROTOCOL_TESTER_GPU_THREAD_HH_
|
||||
#ifndef CPU_TESTERS_PROTOCOL_TESTER_TESTER_THREAD_HH_
|
||||
#define CPU_TESTERS_PROTOCOL_TESTER_TESTER_THREAD_HH_
|
||||
|
||||
#include "cpu/testers/gpu_ruby_test/address_manager.hh"
|
||||
#include "cpu/testers/gpu_ruby_test/episode.hh"
|
||||
@@ -45,12 +45,12 @@
|
||||
#include "mem/token_port.hh"
|
||||
#include "sim/clocked_object.hh"
|
||||
|
||||
class GpuThread : public ClockedObject
|
||||
class TesterThread : public ClockedObject
|
||||
{
|
||||
public:
|
||||
typedef GpuThreadParams Params;
|
||||
GpuThread(const Params &p);
|
||||
virtual ~GpuThread();
|
||||
typedef TesterThreadParams Params;
|
||||
TesterThread(const Params &p);
|
||||
virtual ~TesterThread();
|
||||
|
||||
typedef AddressManager::Location Location;
|
||||
typedef AddressManager::Value Value;
|
||||
@@ -60,7 +60,7 @@ class GpuThread : public ClockedObject
|
||||
void checkDeadlock();
|
||||
void scheduleDeadlockCheckEvent();
|
||||
|
||||
void attachGpuThreadToPorts(ProtocolTester *_tester,
|
||||
void attachTesterThreadToPorts(ProtocolTester *_tester,
|
||||
ProtocolTester::SeqPort *_port,
|
||||
ProtocolTester::GMTokenPort *_tokenPort = nullptr,
|
||||
ProtocolTester::SeqPort *_sqcPort = nullptr,
|
||||
@@ -71,7 +71,7 @@ class GpuThread : public ClockedObject
|
||||
// must be implemented by a child class
|
||||
virtual void hitCallback(PacketPtr pkt) = 0;
|
||||
|
||||
int getGpuThreadId() const { return threadId; }
|
||||
int getTesterThreadId() const { return threadId; }
|
||||
int getNumLanes() const { return numLanes; }
|
||||
// check if the input location would satisfy DRF constraint
|
||||
bool checkDRF(Location atomic_loc, Location loc, bool isStore) const;
|
||||
@@ -79,14 +79,14 @@ class GpuThread : public ClockedObject
|
||||
void printAllOutstandingReqs(std::stringstream& ss) const;
|
||||
|
||||
protected:
|
||||
class GpuThreadEvent : public Event
|
||||
class TesterThreadEvent : public Event
|
||||
{
|
||||
private:
|
||||
GpuThread* thread;
|
||||
TesterThread* thread;
|
||||
std::string desc;
|
||||
|
||||
public:
|
||||
GpuThreadEvent(GpuThread* _thread, std::string _description)
|
||||
TesterThreadEvent(TesterThread* _thread, std::string _description)
|
||||
: Event(CPU_Tick_Pri), thread(_thread), desc(_description)
|
||||
{}
|
||||
void setDesc(std::string _description) { desc = _description; }
|
||||
@@ -94,15 +94,15 @@ class GpuThread : public ClockedObject
|
||||
const std::string name() const override { return desc; }
|
||||
};
|
||||
|
||||
GpuThreadEvent threadEvent;
|
||||
TesterThreadEvent threadEvent;
|
||||
|
||||
class DeadlockCheckEvent : public Event
|
||||
{
|
||||
private:
|
||||
GpuThread* thread;
|
||||
TesterThread* thread;
|
||||
|
||||
public:
|
||||
DeadlockCheckEvent(GpuThread* _thread)
|
||||
DeadlockCheckEvent(TesterThread* _thread)
|
||||
: Event(CPU_Tick_Pri), thread(_thread)
|
||||
{}
|
||||
void process() override { thread->checkDeadlock(); }
|
||||
@@ -204,4 +204,4 @@ class GpuThread : public ClockedObject
|
||||
std::stringstream& ss) const;
|
||||
};
|
||||
|
||||
#endif /* CPU_TESTERS_PROTOCOL_TESTER_GPU_THREAD_HH_ */
|
||||
#endif /* CPU_TESTERS_PROTOCOL_TESTER_TESTER_THREAD_HH_ */
|
||||
Reference in New Issue
Block a user