mirror of
https://github.com/NVIDIA/cutlass.git
synced 2026-05-05 14:11:18 +00:00
Release v4.0.0 (#2294)
This commit is contained in:
56
python/CuTeDSL/base_dsl/utils/timer.py
Normal file
56
python/CuTeDSL/base_dsl/utils/timer.py
Normal file
@@ -0,0 +1,56 @@
|
||||
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
# SPDX-License-Identifier: LicenseRef-NvidiaProprietary
|
||||
#
|
||||
# Use of this software is governed by the terms and conditions of the
|
||||
# NVIDIA End User License Agreement (EULA), available at:
|
||||
# https://docs.nvidia.com/cutlass/media/docs/pythonDSL/license.html
|
||||
#
|
||||
# Any use, reproduction, disclosure, or distribution of this software
|
||||
# and related documentation outside the scope permitted by the EULA
|
||||
# is strictly prohibited.
|
||||
|
||||
"""
|
||||
This module provides a timing helper functions
|
||||
"""
|
||||
from functools import wraps
|
||||
|
||||
from .logger import log
|
||||
|
||||
|
||||
# TODO: revisit this part when mlir timing manager is ready for pybind.
|
||||
def timer(*dargs, **kwargs):
|
||||
enable = kwargs.get("enable", True)
|
||||
|
||||
def decorator(func):
|
||||
@wraps(func)
|
||||
def func_wrapper(*args, **kwargs):
|
||||
if not enable:
|
||||
return func(*args, **kwargs)
|
||||
from time import time
|
||||
|
||||
start = time()
|
||||
result = func(*args, **kwargs)
|
||||
end = time()
|
||||
|
||||
# Convert time from seconds to us
|
||||
spend_us = (end - start) * 1e6
|
||||
|
||||
# Determine the function type and format the log message
|
||||
if hasattr(func, "__name__"):
|
||||
func_name = func.__name__
|
||||
log_message = f"[JIT-TIMER] Function: {func_name} | Execution Time: {spend_us:.2f} µs"
|
||||
elif "CFunctionType" in str(type(func)):
|
||||
log_message = f"[JIT-TIMER] C API Function: {str(func)} | Execution Time: {spend_us:.2f} µs"
|
||||
else:
|
||||
log_message = f"[JIT-TIMER] Anonymous Function | Execution Time: {spend_us:.2f} µs"
|
||||
|
||||
log().info(log_message)
|
||||
|
||||
return result
|
||||
|
||||
return func_wrapper
|
||||
|
||||
if len(dargs) == 1 and callable(dargs[0]):
|
||||
return decorator(dargs[0])
|
||||
else:
|
||||
return decorator
|
||||
Reference in New Issue
Block a user