1/*
2 * Copyright (c) 2006-2009 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 1049 unchanged lines hidden (view full) ---

1058 add(OP_DEQUEUE, flags, cpuid, sm, qi, count);
1059 DPRINTF(AnnotateQ, "Dequeing in queue %s size now %d/%d\n",
1060 q, qSize[qi-1], qBytes[qi-1]);
1061}
1062
1063
1064
1065void
1066CPA::serialize(std::ostream &os)
1066CPA::serialize(CheckpointOut &cp) const
1067{
1068
1069 SERIALIZE_SCALAR(numSm);
1070 SERIALIZE_SCALAR(numSmt);
1071 arrayParamOut(os, "numSt", numSt);
1072 arrayParamOut(os, "numQ", numQ);
1073 SERIALIZE_SCALAR(numSys);
1074 SERIALIZE_SCALAR(numQs);
1075 SERIALIZE_SCALAR(conId);
1076 arrayParamOut(os, "qSize", qSize);
1077 arrayParamOut(os, "qSize", qSize);
1078 arrayParamOut(os, "qBytes", qBytes);
1079
1080 std::list<AnnDataPtr>::iterator ai;
1081
1080 SCache::iterator i;
1081 int x = 0, y = 0;
1082
1083 // smtCache (SCache)
1084 x = 0;
1085 y = 0;
1086 i = smtCache.begin();
1087 while (i != smtCache.end()) {

--- 116 unchanged lines hidden (view full) ---

1204 paramOut(os, csprintf("qMap%d.id", x), qMap[x].second.second);
1205 }
1206
1207 // qData (vector<AnnotateList>)
1208 for(x = 0; x < qData.size(); x++) {
1209 if (!qData[x].size())
1210 continue;
1211 y = 0;
1214 ai = qData[x].begin();
1215 while (ai != qData[x].end()) {
1216 nameOut(os, csprintf("%s.Q%d_%d", name(), x, y));
1217 (*ai)->serialize(os);
1218 ai++;
1212 for (auto &ann : qData[x]) {
1213 ann->serializeSection(os, csprintf("Q%d_%d", x, y));
1214 y++;
1215 }
1216 }
1217}
1218
1219void
1225CPA::unserialize(Checkpoint *cp, const std::string &section)
1220CPA::unserialize(CheckpointIn &cp)
1221{
1222 UNSERIALIZE_SCALAR(numSm);
1223 UNSERIALIZE_SCALAR(numSmt);
1229 arrayParamIn(cp, section, "numSt", numSt);
1230 arrayParamIn(cp, section, "numQ", numQ);
1224 UNSERIALIZE_CONTAINER(numSt);
1225 UNSERIALIZE_CONTAINER(numQ);
1226 UNSERIALIZE_SCALAR(numSys);
1227 UNSERIALIZE_SCALAR(numQs);
1228 UNSERIALIZE_SCALAR(conId);
1234 arrayParamIn(cp, section, "qSize", qSize);
1235 arrayParamIn(cp, section, "qBytes", qBytes);
1229 UNSERIALIZE_CONTAINER(qSize);
1230 UNSERIALIZE_CONTAINER(qBytes);
1231
1232
1233 // smtCache (SCache
1234 string str;
1235 int smi;
1236 for (int x = 0; x < numSmt; x++) {
1242 paramIn(cp, section, csprintf("smtCache%d.str", x), str);
1243 paramIn(cp, section, csprintf("smtCache%d.int", x), smi);
1237 paramIn(cp, csprintf("smtCache%d.str", x), str);
1238 paramIn(cp, csprintf("smtCache%d.int", x), smi);
1239 smtCache[str] = smi;
1240 }
1241
1242 // stCache (StCache)
1243 stCache.resize(numSmt);
1244 for (int x = 0; x < numSmt; x++) {
1245 for (int y = 0; y < numSt[x]; y++) {
1251 paramIn(cp, section, csprintf("stCache%d_%d.str", x,y), str);
1252 paramIn(cp, section, csprintf("stCache%d_%d.int", x,y), smi);
1246 paramIn(cp, csprintf("stCache%d_%d.str", x,y), str);
1247 paramIn(cp, csprintf("stCache%d_%d.int", x,y), smi);
1248 stCache[x][str] = smi;
1249 }
1250 }
1251
1252 // qCache (IdCache)
1253 uint64_t id;
1254 qCache.resize(numSys);
1255 for (int x = 0; x < numSys; x++) {
1256 for (int y = 0; y < numQ[x]; y++) {
1262 paramIn(cp, section, csprintf("qCache%d_%d.str", x,y), str);
1263 paramIn(cp, section, csprintf("qCache%d_%d.id", x,y), id);
1264 paramIn(cp, section, csprintf("qCache%d_%d.int", x,y), smi);
1257 paramIn(cp, csprintf("qCache%d_%d.str", x,y), str);
1258 paramIn(cp, csprintf("qCache%d_%d.id", x,y), id);
1259 paramIn(cp, csprintf("qCache%d_%d.int", x,y), smi);
1260 qCache[x][Id(str,id)] = smi;
1261 }
1262 }
1263
1264 // smCache (IdCache)
1265 smCache.resize(numSys);
1266 for (int x = 0; x < numSys; x++) {
1267 int size;
1273 paramIn(cp, section, csprintf("smCache%d", x), size);
1268 paramIn(cp, csprintf("smCache%d", x), size);
1269 for (int y = 0; y < size; y++) {
1275 paramIn(cp, section, csprintf("smCache%d_%d.str", x,y), str);
1276 paramIn(cp, section, csprintf("smCache%d_%d.id", x,y), id);
1277 paramIn(cp, section, csprintf("smCache%d_%d.int", x,y), smi);
1270 paramIn(cp, csprintf("smCache%d_%d.str", x,y), str);
1271 paramIn(cp, csprintf("smCache%d_%d.id", x,y), id);
1272 paramIn(cp, csprintf("smCache%d_%d.int", x,y), smi);
1273 smCache[x][Id(str,id)] = smi;
1274 }
1275 }
1276
1277 // scLinks (ScCache) -- data not serialized, just creating one per sys
1278 for (int x = 0; x < numSys; x++)
1279 scLinks.push_back(ScHCache());
1280
1281 // nameCache (NameCache)
1282 for (int x = 0; x < numSys; x++) {
1283 System *sys;
1284 SimObject *sptr;
1285 string str;
1286 int sysi;
1287
1293 objParamIn(cp, section, csprintf("nameCache%d.name", x), sptr);
1288 objParamIn(cp, csprintf("nameCache%d.name", x), sptr);
1289 sys = dynamic_cast<System*>(sptr);
1290
1296 paramIn(cp, section, csprintf("nameCache%d.str", x), str);
1297 paramIn(cp, section, csprintf("nameCache%d.int", x), sysi);
1291 paramIn(cp, csprintf("nameCache%d.str", x), str);
1292 paramIn(cp, csprintf("nameCache%d.int", x), sysi);
1293 nameCache[sys] = std::make_pair(str, sysi);
1294 }
1295
1296 //smStack (SmStack)
1297 int smStack_size;
1303 paramIn(cp, section, "smStackIdCount", smStack_size);
1298 paramIn(cp, "smStackIdCount", smStack_size);
1299 for (int x = 0; x < smStack_size; x++) {
1300 int sysi;
1301 uint64_t frame;
1302 int count;
1308 paramIn(cp, section, csprintf("smStackId%d.sys", x), sysi);
1309 paramIn(cp, section, csprintf("smStackId%d.frame", x), frame);
1310 paramIn(cp, section, csprintf("smStackId%d.count", x), count);
1303 paramIn(cp, csprintf("smStackId%d.sys", x), sysi);
1304 paramIn(cp, csprintf("smStackId%d.frame", x), frame);
1305 paramIn(cp, csprintf("smStackId%d.count", x), count);
1306 StackId sid = StackId(sysi, frame);
1307 for (int y = 0; y < count; y++) {
1313 paramIn(cp, section, csprintf("smStackId%d_%d", x, y), smi);
1308 paramIn(cp, csprintf("smStackId%d_%d", x, y), smi);
1309 smStack[sid].push_back(smi);
1310 }
1311 }
1312
1313 // lnMap (LinkMap)
1314 int lsmi;
1315 int lnMap_size;
1321 paramIn(cp, section, "lnMapSize", lnMap_size);
1316 paramIn(cp, "lnMapSize", lnMap_size);
1317 for (int x = 0; x < lnMap_size; x++) {
1323 paramIn(cp, section, csprintf("lnMap%d.smi", x), smi);
1324 paramIn(cp, section, csprintf("lnMap%d.lsmi", x), lsmi);
1318 paramIn(cp, csprintf("lnMap%d.smi", x), smi);
1319 paramIn(cp, csprintf("lnMap%d.lsmi", x), lsmi);
1320 lnMap[smi] = lsmi;
1321 }
1322
1323 // swExpl (vector)
1324 int swExpl_size;
1330 paramIn(cp, section, "swExplCount", swExpl_size);
1325 paramIn(cp, "swExplCount", swExpl_size);
1326 for (int x = 0; x < swExpl_size; x++) {
1327 int sysi;
1328 uint64_t frame;
1329 bool b;
1335 paramIn(cp, section, csprintf("swExpl%d.sys", x), sysi);
1336 paramIn(cp, section, csprintf("swExpl%d.frame", x), frame);
1337 paramIn(cp, section, csprintf("swExpl%d.swexpl", x), b);
1330 paramIn(cp, csprintf("swExpl%d.sys", x), sysi);
1331 paramIn(cp, csprintf("swExpl%d.frame", x), frame);
1332 paramIn(cp, csprintf("swExpl%d.swexpl", x), b);
1333 StackId sid = StackId(sysi, frame);
1334 swExpl[sid] = b;
1335 }
1336
1337 // lastState (IMap)
1338 int sti;
1339 int lastState_size;
1345 paramIn(cp, section, "lastStateSize", lastState_size);
1340 paramIn(cp, "lastStateSize", lastState_size);
1341 for (int x = 0; x < lastState_size; x++) {
1347 paramIn(cp, section, csprintf("lastState%d.smi", x), smi);
1348 paramIn(cp, section, csprintf("lastState%d.sti", x), sti);
1342 paramIn(cp, csprintf("lastState%d.smi", x), smi);
1343 paramIn(cp, csprintf("lastState%d.sti", x), sti);
1344 lastState[smi] = sti;
1345 }
1346
1347
1348 //smMap (IdMap)
1349 smMap.resize(numSm);
1350 for (int x = 0; x < smMap.size(); x++) {
1356 paramIn(cp, section, csprintf("smMap%d.sys", x), smMap[x].first);
1357 paramIn(cp, section, csprintf("smMap%d.smname", x), smMap[x].second.first);
1358 paramIn(cp, section, csprintf("smMap%d.id", x), smMap[x].second.second);
1351 paramIn(cp, csprintf("smMap%d.sys", x), smMap[x].first);
1352 paramIn(cp, csprintf("smMap%d.smname", x), smMap[x].second.first);
1353 paramIn(cp, csprintf("smMap%d.id", x), smMap[x].second.second);
1354 }
1355
1356 //qMap (IdMap)
1357 qMap.resize(numQs);
1358 for (int x = 0; x < qMap.size(); x++) {
1364 paramIn(cp, section, csprintf("qMap%d.sys", x), qMap[x].first);
1365 paramIn(cp, section, csprintf("qMap%d.qname", x), qMap[x].second.first);
1366 paramIn(cp, section, csprintf("qMap%d.id", x), qMap[x].second.second);
1359 paramIn(cp, csprintf("qMap%d.sys", x), qMap[x].first);
1360 paramIn(cp, csprintf("qMap%d.qname", x), qMap[x].second.first);
1361 paramIn(cp, csprintf("qMap%d.id", x), qMap[x].second.second);
1362 }
1363
1364
1365 // qData (vector<AnnotateList>)
1366 qData.resize(qSize.size());
1367 for (int x = 0; x < qSize.size(); x++) {
1368 if (!qSize[x])
1369 continue;
1370 for (int y = 0; y < qSize[x]; y++) {
1371 AnnDataPtr a = std::make_shared<AnnotateData>();
1377 a->unserialize(cp, csprintf("%s.Q%d_%d", section, x, y));
1372 a->unserializeSection(cp, csprintf("Q%d_%d", x, y));
1373 data.push_back(a);
1374 qData[x].push_back(a);
1375 }
1376 }
1377}
1378
1379void
1385CPA::AnnotateData::serialize(std::ostream &os)
1380CPA::AnnotateData::serialize(CheckpointOut &cp) const
1381{
1382 SERIALIZE_SCALAR(time);
1383 SERIALIZE_SCALAR(data);
1384 SERIALIZE_SCALAR(sm);
1385 SERIALIZE_SCALAR(stq);
1386 SERIALIZE_SCALAR(op);
1387 SERIALIZE_SCALAR(flag);
1388 SERIALIZE_SCALAR(cpu);
1389}
1390
1391void
1397CPA::AnnotateData::unserialize(Checkpoint *cp, const std::string &section)
1392CPA::AnnotateData::unserialize(CheckpointIn &cp)
1393{
1394 UNSERIALIZE_SCALAR(time);
1395 UNSERIALIZE_SCALAR(data);
1396 orig_data = data;
1397 UNSERIALIZE_SCALAR(sm);
1398 UNSERIALIZE_SCALAR(stq);
1399 UNSERIALIZE_SCALAR(op);
1400 UNSERIALIZE_SCALAR(flag);
1401 UNSERIALIZE_SCALAR(cpu);
1402 dump = true;
1403}
1404
1405CPA*
1406CPAParams::create()
1407{
1408 return new CPA(this);
1409}
1410