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(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 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; |
1212 for (auto &ann : qData[x]) { 1213 ann->serializeSection(os, csprintf("Q%d_%d", x, y)); |
1214 y++; 1215 } 1216 } 1217} 1218 1219void |
1220CPA::unserialize(CheckpointIn &cp) |
1221{ 1222 UNSERIALIZE_SCALAR(numSm); 1223 UNSERIALIZE_SCALAR(numSmt); |
1224 UNSERIALIZE_CONTAINER(numSt); 1225 UNSERIALIZE_CONTAINER(numQ); |
1226 UNSERIALIZE_SCALAR(numSys); 1227 UNSERIALIZE_SCALAR(numQs); 1228 UNSERIALIZE_SCALAR(conId); |
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++) { |
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++) { |
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++) { |
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; |
1268 paramIn(cp, csprintf("smCache%d", x), size); |
1269 for (int y = 0; y < size; y++) { |
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 |
1288 objParamIn(cp, csprintf("nameCache%d.name", x), sptr); |
1289 sys = dynamic_cast<System*>(sptr); 1290 |
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; |
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; |
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++) { |
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; |
1316 paramIn(cp, "lnMapSize", lnMap_size); |
1317 for (int x = 0; x < lnMap_size; x++) { |
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; |
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; |
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; |
1340 paramIn(cp, "lastStateSize", lastState_size); |
1341 for (int x = 0; x < lastState_size; x++) { |
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++) { |
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++) { |
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>(); |
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 |
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 |
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 |