Ejemplo n.º 1
0
def opentuner_ga(
    env: ClientServiceCompilerEnv,
    optimization_target: OptimizationTarget,
    search_time_seconds: int,
    seed: int,
    max_copies_of_pass: int = 4,
    population: int = 200,
    tournament: int = 5,
    mutate: int = 2,
    sharing: int = 1,
    **kwargs,
) -> None:
    """Optimize an environment using opentuner.

    OpenTuner is an extensible framework for program autotuning:

        https://opentuner.org/
    """
    cache_dir = transient_cache_path("llvm_autotuning")
    cache_dir.mkdir(exist_ok=True, parents=True)
    with tempfile.TemporaryDirectory(dir=cache_dir,
                                     prefix="opentuner-") as tmpdir:
        argparser = ot.default_argparser()
        args = argparser.parse_args(args=[
            f"--stop-after={search_time_seconds}",
            f"--database={tmpdir}/opentuner.db",
            "--no-dups",
            "--technique=custom",
            f"--seed={seed}",
            "--parallelism=1",
        ])
        ot.search.technique.register(
            BinaryGA(
                population=population,
                tournament=tournament,
                mutate=mutate,
                sharing=sharing,
                name="custom",
            ))
        manipulator = LlvmOptFlagsTuner(
            args,
            target=optimization_target,
            benchmark=env.benchmark,
            max_copies_of_pass=max_copies_of_pass,
        )
        tuner = TuningRunMain(manipulator, args)
        tuner.main()

        class DesiredResult:
            def __init__(self, configuration) -> None:
                self.configuration = configuration

        class Configuration:
            def __init__(self, data) -> None:
                self.data = data

        wrapped = DesiredResult(Configuration(manipulator.best_config))
        manipulator.run(wrapped, None, None)
        env.reset()
        env.multistep(manipulator.serialize_actions(manipulator.best_config))
Ejemplo n.º 2
0
def main(args, cfg, ss):
	logging.basicConfig(level=logging.INFO)
	manipulator = ConfigurationManipulator()

	params = cfg.getAllParameters()
	print "\nFeature variables...."
	for key in params.keys():
		print "\t", key
  		manipulator.add_parameter(cfg.getParameter(key))
	
	mi = StreamJitMI(args, ss, manipulator, FixedInputManager(),
                    MinimizeTime())

	m = TuningRunMain(mi, args)
	m.main()
Ejemplo n.º 3
0
def main(args, cfg, jvmOptions):
    logging.basicConfig(level=logging.INFO)
    manipulator = ConfigurationManipulator()

    params = dict(cfg.items() + jvmOptions.items())
    #print "\nFeature variables...."
    for key in params.keys():
        #print "\t", key
        manipulator.add_parameter(params.get(key))

    mi = StreamJitMI(args, jvmOptions, manipulator, FixedInputManager(),
                     MinimizeTime())

    m = TuningRunMain(mi, args)
    m.main()
Ejemplo n.º 4
0
def main(args, cfg, jvmOptions):
	logging.basicConfig(level=logging.INFO)
	manipulator = ConfigurationManipulator()

	params = dict(cfg.items() + jvmOptions.items())
	#print "\nFeature variables...."
	for key in params.keys():
		#print "\t", key
  		manipulator.add_parameter(params.get(key))
	
	mi = StreamJitMI(args,jvmOptions, manipulator, FixedInputManager(),
                    MinimizeTime())

	m = TuningRunMain(mi, args)
	m.main()
Ejemplo n.º 5
0
def main(args, cfg, ss):
    logging.basicConfig(level=logging.INFO)
    manipulator = ConfigurationManipulator()

    params = cfg.getAllParameters()
    print "\nFeature variables...."
    for key in params.keys():
        print "\t", key
        manipulator.add_parameter(cfg.getParameter(key))

    mi = StreamJitMI(args, ss, manipulator, FixedInputManager(),
                     MinimizeTime())

    m = TuningRunMain(mi, args)
    m.main()
Ejemplo n.º 6
0
 def run(self):
     """Starts the main OpenTuner loop."""
     log.info("tuning thread '%s' starting (%d total threads now).", \
         self.name, threading.active_count())
     arg_parser = argparse.ArgumentParser(parents=opentuner.argparsers())
     config_args = CONFIG.get("opentuner", "args").split()
     tuner_args = arg_parser.parse_args(config_args)
     interface = CtreeMeasurementInterface(self._ctree_driver,
                                           *self._ot_args,
                                           **self._ot_kwargs)
     TuningRunMain(interface, tuner_args).main()
     log.info("tuning thread '%s' terminating.", self.name)
Ejemplo n.º 7
0
 def main(cls, envs, args, *pargs, **kwargs):
     from opentuner.tuningrunmain import TuningRunMain
     main = TuningRunMain(cls(envs, args, *pargs, **kwargs), args).main()
     return (self.min_cycles, self.passes, self.sample_size, main)
Ejemplo n.º 8
0
    def main(cls, args, *pargs, **kwargs):
        from opentuner.tuningrunmain import TuningRunMain

        return TuningRunMain(cls(args, *pargs, **kwargs), args).main()
Ejemplo n.º 9
0
	for m in seed_multipliers:
		seed_config = manipulator.seed_config()
		for p in cfg.getAllParameters().values() + jvm_options.values():
			if isinstance(p, sjparameters.sjCompositionParameter):
				p.equal_division(seed_config)
			elif isinstance(p, sjparameters.sjPermutationParameter):
				pass #p.set_value(config, p.seed_value())
			else:
				seed_config[p.name] = p.value
		seed_config['multiplier'] = m
		seed_configs.append(seed_config)

	# The default bandit, plus our custom techniques.
	from opentuner.search import technique, bandittechniques, differentialevolution, evolutionarytechniques, simplextechniques
	technique.register(bandittechniques.AUCBanditMetaTechnique([
			sjtechniques.FixedTechnique(seed_configs),
			differentialevolution.DifferentialEvolutionAlt(),
			evolutionarytechniques.UniformGreedyMutation(),
			evolutionarytechniques.NormalGreedyMutation(mutation_rate=0.3),
			simplextechniques.RandomNelderMead(),
			sjtechniques.ForceRemove(),
			sjtechniques.ForceFuse(),
			sjtechniques.ForceUnbox(),
			sjtechniques.ForceEqualDivision(),
			sjtechniques.CrossSocketBeforeHyperthreadingAffinity(),
		], name = "StreamJITBandit"))

	mi = StreamJITMI(args, cfg, jvm_options, manipulator, FixedInputManager(), MinimizeTime())
	m = TuningRunMain(mi, args)
	m.main()
Ejemplo n.º 10
0
 def main(cls, args, *pargs, **kwargs):
     from opentuner.tuningrunmain import TuningRunMain
     return TuningRunMain(cls(args, *pargs, **kwargs), args,
                          measurement_driver = MeasurementClient).main()
Ejemplo n.º 11
0
            if isinstance(p, sjparameters.sjCompositionParameter):
                p.equal_division(seed_config)
            elif isinstance(p, sjparameters.sjPermutationParameter):
                pass  #p.set_value(config, p.seed_value())
            else:
                seed_config[p.name] = p.value
        seed_config['multiplier'] = m
        seed_configs.append(seed_config)

    # The default bandit, plus our custom techniques.
    from opentuner.search import technique, bandittechniques, differentialevolution, evolutionarytechniques, simplextechniques
    technique.register(
        bandittechniques.AUCBanditMetaTechnique([
            sjtechniques.FixedTechnique(seed_configs),
            differentialevolution.DifferentialEvolutionAlt(),
            evolutionarytechniques.UniformGreedyMutation(),
            evolutionarytechniques.NormalGreedyMutation(mutation_rate=0.3),
            simplextechniques.RandomNelderMead(),
            sjtechniques.ForceRemove(),
            sjtechniques.ForceFuse(),
            sjtechniques.ForceUnbox(),
            sjtechniques.ForceEqualDivision(),
            sjtechniques.CrossSocketBeforeHyperthreadingAffinity(),
        ],
                                                name="StreamJITBandit"))

    mi = StreamJITMI(args, cfg, jvm_options, manipulator, FixedInputManager(),
                     MinimizeTime())
    m = TuningRunMain(mi, args)
    m.main()