From d6d30f5d8f56e16dfd4aa00691421e07b51655ac Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Mon, 12 Nov 2012 23:45:48 -0600 Subject: [PATCH] Add support for valgrind last-level cache (LL) information --- tdecachegrind/tdecachegrind/callgraphview.cpp | 2 +- tdecachegrind/tdecachegrind/configuration.cpp | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/tdecachegrind/tdecachegrind/callgraphview.cpp b/tdecachegrind/tdecachegrind/callgraphview.cpp index 7ded6678..35ccef87 100644 --- a/tdecachegrind/tdecachegrind/callgraphview.cpp +++ b/tdecachegrind/tdecachegrind/callgraphview.cpp @@ -886,7 +886,7 @@ void GraphExporter::buildGraph(TraceFunction* f, int d, double cost = call->subCost(_costType) * factor; // ignore function calls with absolute cost < 3 per call - // No: This would skip a lot of functions e.g. with L2 cache misses + // No: This would skip a lot of functions e.g. with L2 or LL cache misses // if (count>0.0 && (cost/count < 3)) continue; double oldCost = 0.0; diff --git a/tdecachegrind/tdecachegrind/configuration.cpp b/tdecachegrind/tdecachegrind/configuration.cpp index d9b902ee..1455da45 100644 --- a/tdecachegrind/tdecachegrind/configuration.cpp +++ b/tdecachegrind/tdecachegrind/configuration.cpp @@ -43,7 +43,10 @@ static TQStringList knownTypes() << "I2mr" << "D2mr" << "D2mw" << "Smp" << "Sys" << "User" - << "L1m" << "L2m" << "CEst"; + // Valgrind < 3.6.0 + << "L1m" << "L2m" << "CEst" + // Valgrind 3.6.0: L2 events changed to to LL (last level) events + << "L1m" << "LLm" << "CEst"; return l; } @@ -53,7 +56,8 @@ static TQString knownFormula(TQString name) { if (name =="L1m") return TQString("I1mr + D1mr + D1mw"); if (name =="L2m") return TQString("I2mr + D2mr + D2mw"); - if (name =="CEst") return TQString("Ir + 10 L1m + 100 L2m"); + if (name =="LLm") return TQString("I2mr + D2mr + D2mw"); + if (name =="CEst") return TQString("Ir + 10 L1m + 100 L2m + 100 LLm"); return TQString(); } @@ -69,11 +73,15 @@ static TQString knownLongName(TQString name) if (name =="I2mr") return i18n("L2 Instr. Fetch Miss"); if (name =="D2mr") return i18n("L2 Data Read Miss"); if (name =="D2mw") return i18n("L2 Data Write Miss"); + if (name =="ILmr") return i18n("LL Instr. Fetch Miss"); + if (name =="DLmr") return i18n("LL Data Read Miss"); + if (name =="DLmw") return i18n("LL Data Write Miss"); if (name =="Smp") return i18n("Samples"); if (name =="Sys") return i18n("System Time"); if (name =="User") return i18n("User Time"); if (name =="L1m") return i18n("L1 Miss Sum"); if (name =="L2m") return i18n("L2 Miss Sum"); + if (name =="LLm") return i18n("LL Miss Sum"); if (name =="CEst") return i18n("Cycle Estimation"); return TQString(); @@ -201,7 +209,11 @@ void Configuration::readOptions(KConfig* kconfig) c->_colors.clear(); // colors for default cost types: - // red for L2 misses, green for L1 misses, blue for normal accesses + // red for L2 or LL misses, green for L1 misses, blue for normal accesses + c->color("CostType-ILmr")->color = TQColor(240, 0, 0); + c->color("CostType-DLmr")->color = TQColor(180,40,40); + c->color("CostType-DLmw")->color = TQColor(120,80,80); + c->color("CostType-I2mr")->color = TQColor(240, 0, 0); c->color("CostType-D2mr")->color = TQColor(180,40,40); c->color("CostType-D2mw")->color = TQColor(120,80,80);