Skip to content

Commit ef8a6ed

Browse files
committed
begin adding checkpointing to Miranda
1 parent 0cbc364 commit ef8a6ed

4 files changed

Lines changed: 111 additions & 12 deletions

File tree

src/sst/elements/miranda/mirandaCPU.cc

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,3 +544,50 @@ bool RequestGenCPU::clockTick(SST::Cycle_t cycle) {
544544

545545
return false;
546546
}
547+
548+
//void RequestGenCPU::serialize_order(SST::Core::Serialization::serializer& ser) {
549+
//SST::Component::serialize_order(ser);
550+
//SST_SER(out);
551+
//}
552+
//SST_SER(clockHandler);
553+
//SST_SER(reqGen);
554+
//SST_SER(requestsInFlight);
555+
//SST_SER(cache_link);
556+
//SST_SER(srcLink);
557+
//SST_SER(srcReqEvent);
558+
559+
560+
/*
561+
Output* out;
562+
563+
TimeConverter timeConverter;
564+
Clock::HandlerBase* clockHandler;
565+
RequestGenerator* reqGen;
566+
std::map<StandardMem::Request::id_t, CPURequest*> requestsInFlight;
567+
StandardMem* cache_link;
568+
Link* srcLink;
569+
MirandaReqEvent* srcReqEvent;
570+
StdMemHandler* stdMemHandlers;
571+
572+
MirandaRequestQueue<GeneratorRequest*> pendingRequests;
573+
MirandaMemoryManager* memMgr;
574+
575+
uint32_t maxRequestsPending[OPCOUNT];
576+
uint32_t requestsPending[OPCOUNT];
577+
uint32_t reqMaxPerCycle;
578+
uint64_t cacheLine;
579+
uint32_t maxOpLookup;
580+
581+
Statistic<uint64_t>* statReqs[OPCOUNT];
582+
Statistic<uint64_t>* statSplitReqs[OPCOUNT];
583+
Statistic<uint64_t>* statCyclesWithIssue;
584+
Statistic<uint64_t>* statMaxIssuePerCycle;
585+
Statistic<uint64_t>* statCyclesWithoutIssue;
586+
Statistic<uint64_t>* statBytes[OPCOUNT];
587+
Statistic<uint64_t>* statReqLatency;
588+
Statistic<uint64_t>* statTime;
589+
Statistic<uint64_t>* statCyclesHitFence;
590+
Statistic<uint64_t>* statCyclesHitReorderLimit;
591+
Statistic<uint64_t>* statCycles;
592+
593+
*/

src/sst/elements/miranda/mirandaCPU.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ class CPURequest {
4242
uint64_t getIssueTime() const { return issueTime; }
4343
uint64_t getOriginalReqID() const { return originalID; }
4444
uint32_t countParts() const { return outstandingParts; }
45+
void serialize_order(SST::Core::Serialization::serializer& ser) {
46+
SST_SER(originalID);
47+
SST_SER(issueTime);
48+
SST_SER(outstandingParts);
49+
}
4550
protected:
4651
uint64_t originalID;
4752
uint64_t issueTime;
@@ -65,9 +70,14 @@ class RequestGenCPU : public SST::Component {
6570
virtual void handle(SST::Interfaces::StandardMem::WriteResp* rsp) override;
6671
virtual void handle(SST::Interfaces::StandardMem::CustomResp* rsp) override;
6772

73+
void serialize_order(SST::Core::Serialization::serializer& ser) override;
74+
6875
RequestGenCPU* cpu;
6976
};
7077

78+
//void serialize_order(SST::Core::Serialization::serializer& ser) override;
79+
//ImplementSerializable(SST::Miranda::RequestGenCPU);
80+
7181
SST_ELI_REGISTER_COMPONENT(
7282
RequestGenCPU,
7383
"miranda",

src/sst/elements/miranda/mirandaGenerator.h

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,16 @@
2828
namespace SST {
2929
namespace Miranda {
3030

31+
// OPCOUNT is used to by stats to know how many distinct types
32+
// of operations to track. INVALID is placed after OPCOUNT
33+
// as these operations should never be tracked.
3134
typedef enum {
3235
READ,
3336
WRITE,
3437
REQ_FENCE,
35-
CUSTOM,
36-
OPCOUNT
38+
CUSTOM,
39+
OPCOUNT,
40+
INVALID
3741
} ReqOperation;
3842

3943

@@ -43,8 +47,8 @@ class GeneratorRequest {
4347
reqID = nextGeneratorRequestID++;
4448
}
4549

46-
virtual ~GeneratorRequest() {}
47-
virtual ReqOperation getOperation() const = 0;
50+
~GeneratorRequest() {}
51+
ReqOperation getOperation() const { return op; };
4852
uint64_t getRequestID() const { return reqID; }
4953

5054
void addDependency(uint64_t depReq) {
@@ -77,10 +81,22 @@ class GeneratorRequest {
7781
void setIssueTime(const uint64_t now) {
7882
issueTime = now;
7983
}
84+
85+
void serialize_order(SST::Core::Serialization::serializer& ser) {
86+
SST_SER(reqID);
87+
SST_SER(issueTime);
88+
SST_SER(dependsOn);
89+
SST_SER(nextGeneratorRequestID);
90+
SST_SER(op);
91+
}
92+
//ImplementSerializable(SST::Miranda::GeneratorRequest);
93+
8094
protected:
8195
uint64_t reqID;
8296
uint64_t issueTime;
8397
std::vector<uint64_t> dependsOn;
98+
ReqOperation op = INVALID;
99+
84100
private:
85101
static std::atomic<uint64_t> nextGeneratorRequestID;
86102
};
@@ -168,6 +184,13 @@ class MirandaRequestQueue {
168184
theQ[curSize] = t;
169185
curSize++;
170186
}
187+
188+
void serialize_order(SST::Core::Serialization::serializer& ser) {
189+
SST_SER(theQ);
190+
SST_SER(maxCapacity);
191+
SST_SER(curSize);
192+
}
193+
171194
private:
172195
QueueType* theQ;
173196
uint32_t maxCapacity;
@@ -180,20 +203,28 @@ class MemoryOpRequest : public GeneratorRequest {
180203
const uint64_t cLength,
181204
const ReqOperation cOpType) :
182205
GeneratorRequest(),
183-
addr(cAddr), length(cLength), op(cOpType)
184-
{ assert (op == READ || op == WRITE); }
206+
addr(cAddr), length(cLength)
207+
{
208+
op = cOpType;
209+
assert (op == READ || op == WRITE);
210+
}
185211

212+
MemoryOpRequest() = default;
186213
~MemoryOpRequest() {}
187-
ReqOperation getOperation() const { return op; }
188214
bool isRead() const { return op == READ; }
189215
bool isWrite() const { return op == WRITE; }
190216
uint64_t getAddress() const { return addr; }
191217
uint64_t getLength() const { return length; }
192218

219+
void serialize_order(SST::Core::Serialization::serializer& ser) {
220+
SST::Miranda::GeneratorRequest::serialize_order(ser);
221+
SST_SER(addr);
222+
SST_SER(length);
223+
}
224+
193225
protected:
194226
uint64_t addr;
195227
uint64_t length;
196-
ReqOperation op;
197228
};
198229

199230
class CustomOpRequest : public GeneratorRequest {
@@ -202,7 +233,6 @@ class CustomOpRequest : public GeneratorRequest {
202233
GeneratorRequest(), data(cData) {}
203234
~CustomOpRequest() {}
204235

205-
ReqOperation getOperation() const { return CUSTOM; }
206236
Interfaces::StandardMem::CustomData* getPayload() { return data; }
207237

208238
protected:
@@ -213,7 +243,6 @@ class FenceOpRequest : public GeneratorRequest {
213243
public:
214244
FenceOpRequest() : GeneratorRequest() {}
215245
~FenceOpRequest() {}
216-
ReqOperation getOperation() const { return REQ_FENCE; }
217246
};
218247

219248
class RequestGenerator : public SubComponent {
@@ -222,14 +251,21 @@ class RequestGenerator : public SubComponent {
222251
SST_ELI_REGISTER_SUBCOMPONENT_API(SST::Miranda::RequestGenerator)
223252

224253
RequestGenerator( ComponentId_t id, Params& params) : SubComponent(id) {}
254+
RequestGenerator() = default;
225255
~RequestGenerator() {}
226256
virtual void generate(MirandaRequestQueue<GeneratorRequest*>* q) { }
227257
virtual bool isFinished() { return true; }
228258
virtual void completed() { }
229259

260+
void serialize_order(SST::Core::Serialization::serializer& ser) override {
261+
SST::SubComponent::serialize_order(ser);
262+
}
263+
ImplementSerializable(SST::Miranda::RequestGenerator);
264+
230265
};
231266

232267
}
233268
}
234269

270+
235271
#endif

src/sst/elements/miranda/mirandaMemMgr.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,14 @@ class MirandaMemoryManager {
127127

128128
return physAddress;
129129
}
130+
void serialize_order(SST::Core::Serialization::serializer& ser) {
131+
SST_SER(pageSize);
132+
SST_SER(pageCount);
133+
SST_SER(maxMemoryAddress);
134+
SST_SER(output);
135+
SST_SER(pageMap);
136+
}
137+
130138

131139
private:
132140
uint64_t pageSize;
@@ -135,8 +143,6 @@ class MirandaMemoryManager {
135143
SST::Output* output;
136144

137145
Shared::SharedArray<uint64_t> pageMap;
138-
// const uint64_t * pageMap;
139-
140146
};
141147

142148
}

0 commit comments

Comments
 (0)