[TESTING] allow user to adjust warmup and repetition time for autotuning (#1850)

Adds an option to adjust warmup and repetition time for autotuning. It
should default to old values and have no effect on current kernels.
This is useful for bigger kernels where runtime might be a sizable
fraction 100ms and lead to less warmup and more variance during
benchmarking.
This commit is contained in:
Izzy Putterman
2023-06-28 11:04:43 -07:00
committed by GitHub
parent e5d7411a69
commit 9961b5c7aa

View File

@@ -25,7 +25,7 @@ class OutOfResources(Exception):
class Autotuner(KernelInterface):
def __init__(self, fn, arg_names, configs, key, reset_to_zero, prune_configs_by: Dict = None):
def __init__(self, fn, arg_names, configs, key, reset_to_zero, prune_configs_by: Dict = None, warmup=25, rep=100):
'''
:param prune_configs_by: a dict of functions that are used to prune configs, fields:
'perf_model': performance model used to predicate running time with different configs, returns running time
@@ -58,6 +58,8 @@ class Autotuner(KernelInterface):
self.perf_model, self.configs_top_k = perf_model, top_k
self.early_config_prune = early_config_prune
self.fn = fn
self.warmup = warmup
self.rep = rep
def _bench(self, *args, config, **meta):
# check for conflicts, i.e. meta-parameters both provided
@@ -78,7 +80,7 @@ class Autotuner(KernelInterface):
self.hook(args)
self.fn.run(*args, num_warps=config.num_warps, num_stages=config.num_stages, **current)
try:
return do_bench(kernel_call, quantiles=(0.5, 0.2, 0.8))
return do_bench(kernel_call, warmup=self.warmup, rep=self.rep, quantiles=(0.5, 0.2, 0.8))
except OutOfResources:
return [float('inf'), float('inf'), float('inf')]
@@ -173,7 +175,7 @@ class Config:
return ', '.join(res)
def autotune(configs, key, prune_configs_by=None, reset_to_zero=None):
def autotune(configs, key, prune_configs_by=None, reset_to_zero=None, warmup=25, rep=100):
"""
Decorator for auto-tuning a :code:`triton.jit`'d function.
@@ -204,9 +206,13 @@ def autotune(configs, key, prune_configs_by=None, reset_to_zero=None):
'early_config_prune'(optional): a function used to do early prune (eg, num_stages). It takes configs:List[Config] as its input, and returns pruned configs.
:param reset_to_zero: a list of argument names whose value will be reset to zero before evaluating any configs.
:type reset_to_zero: list[str]
:param warmup: Warmup time (in ms) to pass to benchmarking, defaults to 25.
:type warmup: int
:param rep: Repetition time (in ms) to pass to benchmarking, defaults to 100.
:type rep: int
"""
def decorator(fn):
return Autotuner(fn, fn.arg_names, configs, key, reset_to_zero, prune_configs_by)
return Autotuner(fn, fn.arg_names, configs, key, reset_to_zero, prune_configs_by, warmup, rep)
return decorator