dace.optimization package
Tuning APIs
- class dace.optimization.auto_tuner.AutoTuner(sdfg)
Bases:
objectGeneral API for automatic SDFG tuners. Contains a single method:
optimize, which initiates the tuning process.- optimize(apply=True, measurements=30)
Tunes an SDFG.
- Parameters:
apply (
bool) – Applies the best-found configuration on the original SDFG.measurements (
int) – The number of times to run the SDFG for performance analysis.
- Return type:
Dict[Any,Any]- Returns:
A dictionary mapping measured configurations to results (usually string to numeric runtimes).
- class dace.optimization.cutout_tuner.CutoutTuner(task, sdfg)
Bases:
AutoTunerAn auto-tuner that cuts out subgraphs of the original SDFG to tune separately. In order to tune an SDFG, a “dry run” must first be called to collect data from intermediate access nodes (in order to ensure correctness of the tuned subgraph). Subsequently, sub-classes of this cutout tuning interface will select subgraphs to test transformations on.
For example:
tuner = DataLayoutTuner(sdfg) # Create instrumented data report tuner.dry_run(sdfg, arg1, arg2, arg3=4) results = tuner.optimize() # results will now contain the fastest data layout configurations for each array
- apply(config, cutout, **kwargs)
- Return type:
None
- config_from_key(key, cutout, **kwargs)
- Return type:
Any
- static dry_run(sdfg, *args, **kwargs)
- Return type:
Any
- evaluate(**kwargs)
- Return type:
float
- file_name(label)
- Return type:
str
- measure(cutout, dreport, repetitions=30, timeout=300.0)
- Return type:
float
- optimize(measurements=30, apply=False, **kwargs)
Tunes an SDFG.
- Parameters:
apply (
bool) – Applies the best-found configuration on the original SDFG.measurements (
int) – The number of times to run the SDFG for performance analysis.
- Return type:
Dict[Any,Any]- Returns:
A dictionary mapping measured configurations to results (usually string to numeric runtimes).
- pre_evaluate(**kwargs)
- Return type:
Dict
- search(cutout, measurements, **kwargs)
- Return type:
Dict[str,float]
- space(**kwargs)
- Return type:
Generator[Any,None,None]
- property task: str
- static top_k_configs(tuning_report, k)
- Return type:
List[Tuple[str,float]]
- try_load(file_name)
- Return type:
Dict
- dace.optimization.cutout_tuner.tqdm(x, **kwargs)
- class dace.optimization.distributed_cutout_tuner.DistributedCutoutTuner(tuner)
Bases:
objectDistributed wrapper for cutout tuning that distributes the cutouts across ranks.
- optimize(measurements=30, **kwargs)
- Return type:
Dict
- class dace.optimization.distributed_cutout_tuner.DistributedSpaceTuner(tuner)
Bases:
objectDistributed wrapper for cutout tuning that distributes search space of each cutout across ranks.
- optimize(measurements=30, **kwargs)
- Return type:
Dict
- dace.optimization.distributed_cutout_tuner.tqdm(x, **kwargs)
Auto-Tuners
- class dace.optimization.data_layout_tuner.DataLayoutTuner(sdfg, measurement=<InstrumentationType.Timer: 2>)
Bases:
CutoutTuner- apply(config, label, **kwargs)
- Return type:
None
- config_from_key(key, **kwargs)
- Return type:
List[int]
- evaluate(config, cutout, arguments, measurements, **kwargs)
- Return type:
float
- pre_evaluate(cutout, dreport, measurements, group_by, **kwargs)
- Return type:
Dict
- setup_tuning_groups(cutout, group_by)
- Return type:
List[Set[str]] |None
- space(cutout, groups=None)
- Return type:
Generator[Set[str],None,None]
- class dace.optimization.data_layout_tuner.TuningGroups(*values)
Bases:
Enum- Dimension = 3
- Inputs_Outputs = 2
- Inputs_Outputs_Dimension = 4
- Separate = 1
- dace.optimization.data_layout_tuner.tqdm(x, **kwargs)
- class dace.optimization.map_permutation_tuner.MapPermutationTuner(sdfg, measurement=<InstrumentationType.Timer: 2>)
Bases:
CutoutTuner- apply(config, label, **kwargs)
- Return type:
None
- config_from_key(key, **kwargs)
- Return type:
List[str]
- evaluate(config, cutout, map_entry_id, measurements, **kwargs)
- Return type:
float
- pre_evaluate(cutout, measurements, **kwargs)
- Return type:
Dict
- space(map_entry, **kwargs)
- Return type:
Generator[Tuple[str],None,None]
- dace.optimization.map_permutation_tuner.tqdm(x, **kwargs)
- class dace.optimization.map_tiling_tuner.MapTilingTuner(sdfg, measurement=<InstrumentationType.Timer: 2>)
Bases:
CutoutTuner- apply(config, label, **kwargs)
- Return type:
None
- config_from_key(key, **kwargs)
- Return type:
List[int]
- evaluate(config, cutout, map_entry_id, measurements, **kwargs)
- Return type:
float
- pre_evaluate(cutout, measurements, **kwargs)
- Return type:
Dict
- space(map_entry)
- Return type:
Generator[Tuple[int],None,None]
- dace.optimization.map_tiling_tuner.tqdm(x, **kwargs)
- class dace.optimization.on_the_fly_map_fusion_tuner.OnTheFlyMapFusionTuner(sdfg, i, j, measurement=<InstrumentationType.Timer: 2>)
Bases:
CutoutTuner- apply(config, label, **kwargs)
- Return type:
None
- config_from_key(key, cutout, **kwargs)
- Return type:
Tuple[int,List[int]]
- cutouts()
- evaluate(config, cutout, measurements, **kwargs)
- Return type:
float
- static map_descriptor(state, map_entry)
- Return type:
str
- pre_evaluate(cutout, measurements, **kwargs)
- Return type:
Dict
- space(cutout)
- Return type:
Generator[List[bool],None,None]
- static transfer(sdfg, tuner, k=5)
- dace.optimization.on_the_fly_map_fusion_tuner.tqdm(x, **kwargs)
- class dace.optimization.subgraph_fusion_tuner.SubgraphFusionTuner(sdfg, i, j, measurement=<InstrumentationType.Timer: 2>)
Bases:
CutoutTuner- apply(config, label, **kwargs)
- Return type:
None
- config_from_key(key, cutout, **kwargs)
- Return type:
Tuple[int,List[int]]
- cutouts(sdfg=None)
- evaluate(config, cutout, measurements, **kwargs)
- Return type:
float
- static map_descriptor(state, map_entry)
- Return type:
str
- pre_evaluate(cutout, measurements, **kwargs)
- Return type:
Dict
- space(cutout)
- Return type:
Generator[List[bool],None,None]
- static transfer(sdfg, tuner, k=5)
- dace.optimization.subgraph_fusion_tuner.tqdm(x, **kwargs)
Utilities
- class dace.optimization.utils.MeasureProcess(*args, **kwargs)
Bases:
Process- property exception
- run()
Method to be run in sub-process; can be overridden in sub-class
- dace.optimization.utils.get_world_rank()
- dace.optimization.utils.get_world_size()
- dace.optimization.utils.measure(sdfg, dreport=None, repetitions=30, print_report=False)
- dace.optimization.utils.partition(it, size)
- dace.optimization.utils.subprocess_measure(cutout, dreport, repetitions=30, timeout=600.0)
- Return type:
float