Skip to content
Open
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions Tools/scripts/summarize_stats.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@


TOTAL = "specialization.hit", "specialization.miss", "execution_count"
UOPS_EXECUTED_LABEL = "Uops executed"


def pretty(name: str) -> str:
Expand Down Expand Up @@ -313,7 +314,7 @@ def kind_to_text(kind: int, opcode: str):
def is_specializable(self, opcode: str) -> bool:
return "specializable" in self._get_stats_for_opcode(opcode)

def get_specialized_total_counts(self) -> tuple[int, int, int]:
def get_specialized_total_counts(self) -> tuple[int, int, int, int]:
basic = 0
specialized_hits = 0
specialized_misses = 0
Expand Down Expand Up @@ -442,7 +443,7 @@ def get_gc_stats(self) -> list[dict[str, int]]:
gc_stats[gen_n][name] = value
return gc_stats

def get_optimization_stats(self) -> dict[str, tuple[int, int | None]]:
def get_optimization_stats(self) -> dict[Doc, tuple[int, int | None]]:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is also unrelated, right?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe it is related, as the fix for the issue is to treat the value returned from this function as a doc and not a str, so it makes the patch clearer

if "Optimization attempts" not in self._data:
return {}

Expand Down Expand Up @@ -507,15 +508,15 @@ def get_optimization_stats(self) -> dict[str, tuple[int, int | None]]:
None,
),
Doc(
"Uops executed",
UOPS_EXECUTED_LABEL,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why? It only had two uses.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For the code to work correctly the 2 instances must match - its not just any string, its used as an identifier.

Is there any con in moving to a const?

"The total number of uops (micro-operations) that were executed",
): (
uops,
executed,
),
}

def get_optimizer_stats(self) -> dict[str, tuple[int, int | None]]:
def get_optimizer_stats(self) -> dict[Doc, tuple[int, int | None]]:
attempts = self._data["Optimization optimizer attempts"]
successes = self._data["Optimization optimizer successes"]
no_memory = self._data["Optimization optimizer failure no memory"]
Expand Down Expand Up @@ -1140,14 +1141,13 @@ def calc_gc_stats(stats: Stats) -> Rows:
def optimization_section() -> Section:
def calc_optimization_table(stats: Stats) -> Rows:
optimization_stats = stats.get_optimization_stats()

return [
(
label,
doc,
Count(value),
Ratio(value, den, percentage=label != "Uops executed"),
Ratio(value, den, percentage=doc.text != UOPS_EXECUTED_LABEL),
)
for label, (value, den) in optimization_stats.items()
for doc, (value, den) in optimization_stats.items()
]

def calc_optimizer_table(stats: Stats) -> Rows:
Expand Down Expand Up @@ -1264,7 +1264,7 @@ def iter_optimization_tables(base_stats: Stats, head_stats: Stats | None = None)


def rare_event_section() -> Section:
def calc_rare_event_table(stats: Stats) -> Table:
def calc_rare_event_table(stats: Stats) -> Rows:
DOCS = {
"set class": "Setting an object's class, `obj.__class__ = ...`",
"set bases": "Setting the bases of a class, `cls.__bases__ = ...`",
Expand Down Expand Up @@ -1395,7 +1395,7 @@ def to_markdown(x):
print("Stats gathered on:", date.today(), file=out)


def output_stats(inputs: list[Path], json_output=str | None):
def output_stats(inputs: list[Path], json_output: str | None):
match len(inputs):
case 1:
data = load_raw_data(Path(inputs[0]))
Expand Down
Loading