コード例 #1
0
    def set_result(self, values, visible_columns={}):
        """Set the result of this run.
        @param values: a dictionary with result values as returned by RunExecutor.execute_run(),
            may also contain arbitrary additional values
        @param visible_columns: a set of keys of values that should be visible by default
            (i.e., not marked as hidden), apart from those that BenchExec shows by default anyway
        """
        exitcode = values.pop("exitcode", None)
        if exitcode is not None:
            if exitcode.signal:
                self.values["@exitsignal"] = exitcode.signal
            else:
                self.values["@returnvalue"] = exitcode.value

        for key, value in values.items():
            if key == "cpuenergy" and not isinstance(value, (str, bytes)):
                energy = intel_cpu_energy.format_energy_results(value)
                for energy_key, energy_value in energy.items():
                    if energy_key != "cpuenergy":
                        energy_key = "@" + energy_key
                    self.values[energy_key] = energy_value
            elif key in ["walltime", "cputime", "memory", "cpuenergy"]:
                self.values[key] = value
            elif key in visible_columns:
                self.values[key] = value
            else:
                self.values["@" + key] = value

        termination_reason = values.get("terminationreason")

        # Termination reason was not fully precise for timeouts, so we guess "timeouts"
        # if time is too high. Since removal of ulimit time limit this should not be
        # necessary, but also does not harm. We might reconsider this in the future.
        isTimeout = (termination_reason
                     in ["cputime", "cputime-soft", "walltime"]
                     or self._is_timeout())

        # read output
        try:
            with open(self.log_file, "rt", errors="ignore") as outputFile:
                output = outputFile.readlines()
                # first 6 lines are for logging, rest is output of subprocess, see runexecutor.py for details
                output = output[6:]
        except OSError as e:
            logging.warning("Cannot read log file: %s", e.strerror)
            output = []

        self.status = self._analyze_result(exitcode, output, isTimeout,
                                           termination_reason)
        self.category = result.get_result_category(self.expected_results,
                                                   self.status,
                                                   self.properties)

        for column in self.columns:
            substitutedColumnText = substitute_vars([column.text], self.runSet,
                                                    self.sourcefiles[0])[0]
            column.value = self.runSet.benchmark.tool.get_value_from_output(
                output, substitutedColumnText)
コード例 #2
0
 def add_values_to_run_set_xml(self, runSet, cputime, walltime, energy):
     """
     This function adds the result values to the XML representation of a runSet.
     """
     self.add_column_to_xml(runSet.xml, 'cputime', cputime)
     self.add_column_to_xml(runSet.xml, 'walltime', walltime)
     energy = intel_cpu_energy.format_energy_results(energy)
     for energy_key, energy_value in energy.items():
         self.add_column_to_xml(runSet.xml, energy_key, energy_value)
コード例 #3
0
ファイル: outputhandler.py プロジェクト: FArian/tbf
 def add_values_to_run_set_xml(self, runSet, cputime, walltime, energy):
     """
     This function adds the result values to the XML representation of a runSet.
     """
     self.add_column_to_xml(runSet.xml, 'cputime', cputime)
     self.add_column_to_xml(runSet.xml, 'walltime', walltime)
     energy = intel_cpu_energy.format_energy_results(energy)
     for energy_key, energy_value in energy.items():
         self.add_column_to_xml(runSet.xml, energy_key, energy_value)
コード例 #4
0
    def set_result(self, values, visible_columns={}):
        """Set the result of this run.
        Use this method instead of manually setting the run attributes and calling after_execution(),
        this method handles all this by itself.
        @param values: a dictionary with result values as returned by RunExecutor.execute_run(),
            may also contain arbitrary additional values
        @param visible_columns: a set of keys of values that should be visible by default
            (i.e., not marked as hidden), apart from those that BenchExec shows by default anyway
        """
        exitcode = values.pop('exitcode', None)
        if exitcode is not None:
            self.values['@exitcode'] = exitcode
            exitcode = util.ProcessExitCode.from_raw(exitcode)
            if exitcode.signal:
                self.values['@exitsignal'] = exitcode.signal
            else:
                self.values['@returnvalue'] = exitcode.value

        for key, value in values.items():
            if key == 'walltime':
                self.walltime = value
            elif key == 'cputime':
                self.cputime = value
            elif key == 'memory':
                self.values['memUsage'] = value
            elif key == 'cpuenergy' and not isinstance(value, (str, bytes)):
                energy = intel_cpu_energy.format_energy_results(value)
                for energy_key, energy_value in energy.items():
                    if energy_key != 'cpuenergy':
                        energy_key = '@' + energy_key
                    self.values[energy_key] = energy_value
            elif key == 'cpuenergy':
                self.values[key] = value
            elif key in visible_columns:
                self.values[key] = value
            else:
                self.values['@' + key] = value

        self.after_execution(
            exitcode, termination_reason=values.get('terminationreason'))
コード例 #5
0
ファイル: model.py プロジェクト: FArian/tbf
    def set_result(self, values, visible_columns={}):
        """Set the result of this run.
        Use this method instead of manually setting the run attributes and calling after_execution(),
        this method handles all this by itself.
        @param values: a dictionary with result values as returned by RunExecutor.execute_run(),
            may also contain arbitrary additional values
        @param visible_columns: a set of keys of values that should be visible by default
            (i.e., not marked as hidden), apart from those that BenchExec shows by default anyway
        """
        exitcode = values.pop('exitcode', None)
        if exitcode is not None:
            self.values['@exitcode'] = exitcode
            exitcode = util.ProcessExitCode.from_raw(exitcode)
            if exitcode.signal:
                self.values['@exitsignal'] = exitcode.signal
            else:
                self.values['@returnvalue'] = exitcode.value

        for key, value in values.items():
            if key == 'walltime':
                self.walltime = value
            elif key == 'cputime':
                self.cputime = value
            elif key == 'memory':
                self.values['memUsage'] = value
            elif key == 'cpuenergy' and not isinstance(value, (str, bytes)):
                energy = intel_cpu_energy.format_energy_results(value)
                for energy_key, energy_value in energy.items():
                    if energy_key != 'cpuenergy':
                        energy_key = '@' + energy_key
                    self.values[energy_key] = energy_value
            elif key == 'cpuenergy':
                self.values[key] = value
            elif key in visible_columns:
                self.values[key] = value
            else:
                self.values['@' + key] = value

        self.after_execution(exitcode, termination_reason=values.get('terminationreason'))