2828namespace SST {
2929namespace 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.
3134typedef 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+
8094protected:
8195 uint64_t reqID;
8296 uint64_t issueTime;
8397 std::vector<uint64_t > dependsOn;
98+ ReqOperation op = INVALID;
99+
84100private:
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+
171194private:
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+
193225protected:
194226 uint64_t addr;
195227 uint64_t length;
196- ReqOperation op;
197228};
198229
199230class 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
208238protected:
@@ -213,7 +243,6 @@ class FenceOpRequest : public GeneratorRequest {
213243public:
214244 FenceOpRequest () : GeneratorRequest() {}
215245 ~FenceOpRequest () {}
216- ReqOperation getOperation () const { return REQ_FENCE; }
217246};
218247
219248class 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
0 commit comments