Skip to content

Commit c665ef2

Browse files
[llvm-exegesis] Add additional validation counters
This patch adds support for additional types of validation counters and also adds mappings between these new validation counter types and physical counters on the hardware for microarchitectures that I have the ability to test on.
1 parent 15189d4 commit c665ef2

File tree

5 files changed

+62
-3
lines changed

5 files changed

+62
-3
lines changed

llvm/include/llvm/Target/TargetPfmCounters.td

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,13 @@ class ValidationEvent <int event_number> {
3333
}
3434

3535
def InstructionRetired : ValidationEvent<0>;
36+
def L1DCacheLoadMiss : ValidationEvent<1>;
37+
def L1DCacheStoreMiss : ValidationEvent<2>;
38+
def L1ICacheLoadMiss : ValidationEvent<3>;
39+
def DataTLBLoadMiss : ValidationEvent<4>;
40+
def DataTLBStoreMiss : ValidationEvent<5>;
41+
def InstructionTLBLoadMiss : ValidationEvent<6>;
42+
3643

3744
// Validation counters can be tied to a specific event
3845
class PfmValidationCounter<ValidationEvent event_type, string counter>

llvm/lib/Target/X86/X86PfmCounters.td

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ def : PfmCountersDefaultBinding<DefaultPfmCounters>;
2020
// Intel X86 Counters.
2121
defvar DefaultIntelPfmValidationCounters = [
2222
PfmValidationCounter<InstructionRetired, "INSTRUCTIONS_RETIRED">
23+
PfmValidationCounter<L1DCacheLoadMiss, "MEM_LOAD_UOPS_RETIRED:L1_MISS">,
24+
PfmValidationCounter<L1ICacheLoadMiss, "L1-ICACHE-LOAD-MISSES">,
25+
PfmValidationCounter<DataTLBLoadMiss, "DTLB_LOAD_MISSES:MISS_CAUSES_A_WALK">,
26+
PfmValidationCounter<DataTLBStoreMiss, "DTLB_STORE_MISSES:MISS_CAUSES_A_WALK">,
27+
PfmValidationCounter<InstructionTLBLoadMiss, "ITLB_MISSES:MISS_CAUSES_A_WALK">
2328
];
2429

2530
def PentiumPfmCounters : ProcPfmCounters {
@@ -201,6 +206,11 @@ def : PfmCountersBinding<"tigerlake", IceLakePfmCounters>;
201206
// AMD X86 Counters.
202207
defvar DefaultAMDPfmValidationCounters = [
203208
PfmValidationCounter<InstructionRetired, "RETIRED_INSTRUCTIONS">
209+
PfmValidationCounter<L1DCacheLoadMiss, "L1-DCACHE-LOAD-MISSES">,
210+
PfmValidationCounter<L1DCacheStoreMiss, "L1-DCACHE-STORE-MISSES">,
211+
PfmValidationCounter<L1ICacheLoadMiss, "L1-ICACHE-LOAD-MISSES">,
212+
PfmValidationCounter<DataTLBLoadMiss, "DTLB-LOAD-MISSES">,
213+
PfmValidationCounter<InstructionTLBLoadMiss, "ITLB-LOAD-MISSES">
204214
];
205215

206216
// Set basic counters for AMD cpus that we know libpfm4 supports.

llvm/tools/llvm-exegesis/lib/BenchmarkResult.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,12 +197,36 @@ const char *validationEventToString(exegesis::ValidationEvent VE) {
197197
switch (VE) {
198198
case exegesis::ValidationEvent::InstructionRetired:
199199
return "instructions-retired";
200+
case exegesis::ValidationEvent::L1DCacheLoadMiss:
201+
return "l1d-cache-load-misses";
202+
case exegesis::ValidationEvent::L1DCacheStoreMiss:
203+
return "l1d-cache-store-misses";
204+
case exegesis::ValidationEvent::L1ICacheLoadMiss:
205+
return "l1i-cache-load-misses";
206+
case exegesis::ValidationEvent::DataTLBLoadMiss:
207+
return "data-tlb-load-misses";
208+
case exegesis::ValidationEvent::DataTLBStoreMiss:
209+
return "data-tlb-store-misses";
210+
case exegesis::ValidationEvent::InstructionTLBLoadMiss:
211+
return "instruction-tlb-load-misses";
200212
}
201213
}
202214

203215
Expected<exegesis::ValidationEvent> stringToValidationEvent(StringRef Input) {
204216
if (Input == "instructions-retired")
205217
return exegesis::ValidationEvent::InstructionRetired;
218+
else if (Input == "l1d-cache-load-misses")
219+
return exegesis::ValidationEvent::L1DCacheLoadMiss;
220+
else if (Input == "l1d-cache-store-misses")
221+
return exegesis::ValidationEvent::L1DCacheStoreMiss;
222+
else if (Input == "l1i-cache-load-misses")
223+
return exegesis::ValidationEvent::L1ICacheLoadMiss;
224+
else if (Input == "data-tlb-load-misses")
225+
return exegesis::ValidationEvent::DataTLBLoadMiss;
226+
else if (Input == "data-tlb-store-misses")
227+
return exegesis::ValidationEvent::DataTLBStoreMiss;
228+
else if (Input == "instruction-tlb-load-misses")
229+
return exegesis::ValidationEvent::InstructionTLBLoadMiss;
206230
else
207231
return make_error<StringError>("Invalid validation event string",
208232
errc::invalid_argument);

llvm/tools/llvm-exegesis/lib/BenchmarkResult.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,12 @@ namespace exegesis {
3434

3535
enum ValidationEvent {
3636
InstructionRetired,
37+
L1DCacheLoadMiss,
38+
L1DCacheStoreMiss,
39+
L1ICacheLoadMiss,
40+
DataTLBLoadMiss,
41+
DataTLBStoreMiss,
42+
InstructionTLBLoadMiss
3743
};
3844

3945
enum class BenchmarkPhaseSelectorE {

llvm/tools/llvm-exegesis/llvm-exegesis.cpp

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -274,9 +274,21 @@ static cl::list<ValidationEvent> ValidationCounters(
274274
"The name of a validation counter to run concurrently with the main "
275275
"counter to validate benchmarking assumptions"),
276276
cl::CommaSeparated, cl::cat(BenchmarkOptions),
277-
cl::values(clEnumValN(ValidationEvent::InstructionRetired,
278-
"instructions-retired",
279-
"Count retired instructions")));
277+
cl::values(
278+
clEnumValN(ValidationEvent::InstructionRetired, "instructions-retired",
279+
"Count retired instructions"),
280+
clEnumValN(ValidationEvent::L1DCacheLoadMiss, "l1d-cache-load-misses",
281+
"Count L1D load cache misses"),
282+
clEnumValN(ValidationEvent::L1DCacheStoreMiss, "l1d-cache-store-misses",
283+
"Count L1D store cache misses"),
284+
clEnumValN(ValidationEvent::L1ICacheLoadMiss, "l1i-cache-load-misses",
285+
"Count L1I load cache misses"),
286+
clEnumValN(ValidationEvent::DataTLBLoadMiss, "data-tlb-load-misses",
287+
"Count DTLB load misses"),
288+
clEnumValN(ValidationEvent::DataTLBStoreMiss, "data-tlb-store-misses",
289+
"Count DTLB store misses"),
290+
clEnumValN(ValidationEvent::InstructionTLBLoadMiss,
291+
"instruction-tlb-load-misses", "Count ITLB load misses")));
280292

281293
static ExitOnError ExitOnErr("llvm-exegesis error: ");
282294

0 commit comments

Comments
 (0)