Ejemplo n.º 1
0
    def main(self):
        """Main entry point of benchbuild run."""
        exp = [self._experiment]
        project_names = self._project_names
        group_names = self._group_names

        experiments.discover()
        projects.discover()

        all_exps = experiment.ExperimentRegistry.experiments

        if self._description:
            CFG["experiment_description"] = self._description

        CFG["slurm"]["logs"] = os.path.abspath(
            os.path.join(str(CFG['build_dir']), str(CFG['slurm']['logs'])))
        CFG["build_dir"] = str(CFG["slurm"]["node_dir"])

        exps = dict(filter(lambda pair: pair[0] in set(exp), all_exps.items()))
        unknown_exps = list(
            filter(lambda name: name not in all_exps.keys(), set(exp)))
        if unknown_exps:
            print('Could not find ', str(unknown_exps),
                  ' in the experiment registry.')
            sys.exit(1)

        prjs = project.populate(project_names, group_names)
        for exp_cls in exps.values():
            exp = exp_cls(projects=prjs)
            print("Experiment: ", exp.name)
            CFG["slurm"]["node_dir"] = os.path.abspath(
                os.path.join(str(CFG["slurm"]["node_dir"]), str(exp.id)))
            self.__go__(prjs, exp)
Ejemplo n.º 2
0
 def main(self):
     experiments.discover()
     all_exps = exp.ExperimentRegistry.experiments
     for exp_cls in all_exps.values():
         print(exp_cls.NAME)
         docstring = exp_cls.__doc__ or "-- no docstring --"
         print(("    " + docstring))
Ejemplo n.º 3
0
def test_discovery(caplog):
    caplog.set_level(logging.DEBUG, logger='benchbuild')
    CFG["plugins"]["experiments"] = [
        "benchbuild.non.existing", "benchbuild.reports.raw"
    ]
    discover()

    assert caplog.record_tuples == [
        ('benchbuild.experiments', logging.ERROR,
         "Could not find 'benchbuild.non.existing'"),
        ('benchbuild.experiments', logging.ERROR,
         "ImportError: No module named 'benchbuild.non'"),
    ]
Ejemplo n.º 4
0
    def main(self, *projects):
        """Main entry point of benchbuild run."""
        experiment_names = self.experiment_names
        group_names = self.group_names

        experiments.discover()
        all_exps = experiment.ExperimentRegistry.experiments

        if self.test_full:
            exps = all_exps
        else:
            exps = dict(
                filter(lambda pair: pair[0] in set(experiment_names),
                       all_exps.items()))

        unknown_exps = list(
            filter(lambda name: name not in all_exps.keys(),
                   set(experiment_names)))
        if unknown_exps:
            print('Could not find ', str(unknown_exps),
                  ' in the experiment registry.')
        prjs = project.populate(projects, group_names)

        if not exps:
            print("Could not find any experiment. Exiting.")
            return -2

        plan = list(self.__generate_plan(exps, prjs))
        num_actions = actions.num_steps(plan)
        actions.print_steps(plan)

        if self.pretend:
            exit(0)

        if self.show_progress:
            pg_bar = type(self).setup_progress(CFG, num_actions)
            pg_bar.start()

        start = time.perf_counter()
        if self.nmbr_of_processes is 1:
            failed = execute_plan(plan)
        else:
            failed = execute_plan_parallel(exps, prjs, self.nmbr_of_processes)
        end = time.perf_counter()

        if self.show_progress:
            pg_bar.done()

        print_summary(num_actions, failed, end - start)
        return len(failed)
Ejemplo n.º 5
0
    def main(self, *args):
        Experiments.discover()
        Reports.discover()
        reports = ReportRegistry.reports

        for exp_name in self.experiment_names:
            if exp_name not in reports:
                print("'{0}' is not a known report.".format(exp_name))
                continue

            for report_cls in reports[exp_name]:
                report = report_cls(exp_name, self._experiment_ids,
                                    self._outfile)
                report.generate()
        exit(0)
Ejemplo n.º 6
0
    def main(self, *projects):
        """Main entry point of benchbuild run."""
        experiment_names = self.experiment_names
        group_names = self.group_names

        experiments.discover()
        all_exps = experiment.ExperimentRegistry.experiments

        if self.test_full:
            exps = all_exps
        else:
            exps = dict(
                filter(lambda pair: pair[0] in set(experiment_names),
                       all_exps.items()))

        unknown_exps = list(
            filter(lambda name: name not in all_exps.keys(),
                   set(experiment_names)))
        if unknown_exps:
            print('Could not find ', str(unknown_exps),
                  ' in the experiment registry.')
        prjs = project.populate(projects, group_names)

        if not exps:
            print("Could not find any experiment. Exiting.")
            return -2

        plan = list(self.__generate_plan(exps, prjs))
        num_actions = actions.num_steps(plan)
        actions.print_steps(plan)

        if self.pretend:
            exit(0)

        if self.show_progress:
            pg_bar = type(self).setup_progress(CFG, num_actions)
            pg_bar.start()

        start = time.perf_counter()
        failed = tasks.execute_plan(plan)
        end = time.perf_counter()

        if self.show_progress:
            pg_bar.done()

        print_summary(num_actions, failed, end - start)
        return len(failed)
Ejemplo n.º 7
0
    def main(self, *args):
        del args  # Unused

        e.discover()
        r.discover()
        all_reports = r.ReportRegistry.reports

        def generate_reports(reports, experiments=None):
            if not reports:
                print("No reports found. Sorry.")

            for rcls in reports:
                if experiments:
                    for exp in experiments:
                        report = rcls(exp, self._experiment_ids, self._outfile,
                                      schema.Session())
                else:
                    report = rcls(None, self._experiment_ids, self._outfile,
                                  schema.Session())
                report.generate()

        if self.report_names:
            reports = [
                all_reports[name] for name in all_reports
                if name in self.report_names
            ]
            generate_reports(reports, self.experiment_names)
            exit(0)

        if self.experiment_names:
            reports = [
                all_reports[name] for name in all_reports
                if set(all_reports[name].SUPPORTED_EXPERIMENTS)
                & set(self.experiment_names)
            ]
            generate_reports(reports, self.experiment_names)
            exit(0)
Ejemplo n.º 8
0
    def main(self):
        """Main entry point of benchbuild run."""
        experiments.discover()
        projects.discover()

        exp_registry = experiment.ExperimentRegistry
        project_names = self._project_names
        exp_name = self._experiment

        if self._description:
            CFG["experiment_description"] = self._description

        CFG["slurm"]["logs"] = os.path.abspath(os.path.join(CFG[
            'build_dir'].value(), CFG['slurm']['logs'].value()))
        CFG["slurm"]["node_dir"] = os.path.abspath(os.path.join(CFG["slurm"][
            "node_dir"].value(), CFG["experiment_id"].value()))
        CFG["build_dir"] = CFG["slurm"]["node_dir"].value()

        print("Experiment: " + exp_name)
        if exp_name in exp_registry.experiments:
            self.__go__(project_names, exp_name)
        else:
            from logging import error
            error("Could not find {} in the experiment registry.", exp_name)
Ejemplo n.º 9
0
    def main(self):
        """Main entry point of benchbuild run."""
        project_names = self._project_names
        group_name = self._group_name

        experiments.discover()

        registry = experiment.ExperimentRegistry
        exps = registry.experiments

        if self._list_experiments:
            for exp_name in registry.experiments:
                exp_cls = exps[exp_name]
                print(exp_cls.NAME)
                docstring = exp_cls.__doc__ or "-- no docstring --"
                print(("    " + docstring))
            exit(0)

        if self._list:
            for exp_name in self._experiment_names:
                exp_cls = exps[exp_name]
                exp = exp_cls(self._project_names, self._group_name)
                print_projects(exp)
            exit(0)

        if self.show_config:
            print(repr(CFG))
            exit(0)

        if self.store_config:
            config_path = ".benchbuild.json"
            CFG.store(config_path)
            print("Storing config in {0}".format(os.path.abspath(config_path)))
            exit(0)

        if self._project_names:
            builddir = os.path.abspath(str(CFG["build_dir"]))
            if not os.path.exists(builddir):
                response = True
                if sys.stdin.isatty():
                    response = ui.query_yes_no(
                        "The build directory {dirname} does not exist yet."
                        "Should I create it?".format(dirname=builddir), "no")

                if response:
                    mkdir("-p", builddir)
                    print("Created directory {0}.".format(builddir))

        actns = []
        for exp_name in self._experiment_names:
            if exp_name in exps:
                exp_cls = exps[exp_name]
                exp = exp_cls(project_names, group_name)
                eactn = Experiment(exp, exp.actions())
                actns.append(eactn)
            else:
                from logging import error
                error("Could not find {} in the experiment registry.",
                      exp_name)

        num_actions = sum([len(x) for x in actns])
        print("Number of actions to execute: {}".format(num_actions))
        for a in actns:
            print(a)
        print()

        if not self.pretend:
            for a in actns:
                a()
Ejemplo n.º 10
0
    def main(self):
        """Main entry point of benchbuild run."""
        from benchbuild.utils.cmd import mkdir  # pylint: disable=E0401

        project_names = self._project_names
        group_name = self._group_name

        experiments.discover()

        registry = experiment.ExperimentRegistry
        exps = registry.experiments

        if self._list_experiments:
            for exp_name in registry.experiments:
                exp_cls = exps[exp_name]
                print(exp_cls.NAME)
                docstring = exp_cls.__doc__ or "-- no docstring --"
                print(("    " + docstring))
            exit(0)

        if self._list:
            for exp_name in self._experiment_names:
                exp_cls = exps[exp_name]
                exp = exp_cls(self._project_names, self._group_name)
                print_projects(exp)
            exit(0)

        if self.show_config:
            print(repr(CFG))
            exit(0)

        if self.store_config:
            config_path = ".benchbuild.json"
            CFG.store(config_path)
            print("Storing config in {0}".format(os.path.abspath(config_path)))
            exit(0)

        if self._project_names:
            builddir = os.path.abspath(str(CFG["build_dir"]))
            if not os.path.exists(builddir):
                response = True
                if sys.stdin.isatty():
                    response = ui.query_yes_no(
                        "The build directory {dirname} does not exist yet."
                        "Should I create it?".format(dirname=builddir), "no")

                if response:
                    mkdir("-p", builddir)
                    print("Created directory {0}.".format(builddir))

        actns = []
        for exp_name in self._experiment_names:
            if exp_name in exps:
                exp_cls = exps[exp_name]
                exp = exp_cls(project_names, group_name)
                eactn = Experiment(exp, exp.actions())
                actns.append(eactn)
            else:
                from logging import error
                error("Could not find {} in the experiment registry.",
                      exp_name)

        num_actions = sum([len(x) for x in actns])
        print("Number of actions to execute: {}".format(num_actions))
        for a in actns:
            print(a)
        print()

        if not self.pretend:
            for a in actns:
                a()