mirror of
https://github.com/ROCm/composable_kernel.git
synced 2026-05-15 10:37:44 +00:00
81 lines
2.5 KiB
Python
81 lines
2.5 KiB
Python
# Copyright (c) Advanced Micro Devices, Inc., or its affiliates.
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
"""
|
|
Template instantiation analysis for Clang -ftime-trace data.
|
|
|
|
This module provides specialized functions for analyzing C++ template
|
|
instantiation costs from Clang's -ftime-trace output.
|
|
"""
|
|
|
|
import pandas as pd
|
|
from .template_parser import parse_template_detail
|
|
|
|
|
|
def get_template_instantiation_events(df: pd.DataFrame) -> pd.DataFrame:
|
|
"""
|
|
Filter to template instantiation events and parse arg_detail into structured columns.
|
|
|
|
Returns events for:
|
|
- InstantiateFunction: Function template instantiations
|
|
- InstantiateClass: Class template instantiations
|
|
|
|
The returned DataFrame includes parsed columns from arg_detail:
|
|
- namespace: Top-level namespace (e.g., 'std', 'ck')
|
|
- template_name: Template name without parameters
|
|
- full_qualified_name: Full namespace::template_name
|
|
- param_count: Number of template parameters
|
|
- is_ck_type: Boolean indicating if this is a CK library type
|
|
- is_nested: Boolean indicating if contains nested templates
|
|
|
|
Args:
|
|
df: DataFrame from parse_file()
|
|
|
|
Returns:
|
|
Filtered DataFrame containing template instantiation events with parsed columns
|
|
|
|
Example:
|
|
>>> df = parse_file('trace.json')
|
|
>>> templates = get_template_instantiation_events(df)
|
|
>>> templates.sort_values('dur', ascending=False).head(10)
|
|
>>> # Filter to CK types only
|
|
>>> ck_templates = templates[templates['is_ck_type']]
|
|
>>> # Group by template name
|
|
>>> templates.groupby('template_name')['dur'].sum()
|
|
"""
|
|
# Filter to template instantiation events
|
|
filtered_df = (
|
|
df[
|
|
df["name"].isin(
|
|
[
|
|
"InstantiateClass",
|
|
"InstantiateFunction",
|
|
]
|
|
)
|
|
]
|
|
.drop(
|
|
columns=[
|
|
"arg_avg ms",
|
|
"arg_count",
|
|
"arg_name",
|
|
"cat",
|
|
"id",
|
|
"ph",
|
|
"pid",
|
|
"tid",
|
|
]
|
|
)
|
|
.reset_index(drop=True)
|
|
)
|
|
|
|
# Parse arg_detail into structured columns
|
|
parsed_data = filtered_df["arg_detail"].apply(parse_template_detail)
|
|
|
|
# Convert list of dicts to DataFrame and join with original
|
|
parsed_df = pd.DataFrame(parsed_data.tolist())
|
|
|
|
# Combine with original data
|
|
result_df = pd.concat([filtered_df, parsed_df], axis=1)
|
|
|
|
return result_df
|