Skip to content

Commit

Permalink
benchmarking file in symbex logger
Browse files Browse the repository at this point in the history
  • Loading branch information
Dspil committed Aug 8, 2023
1 parent c9a6800 commit 70683d8
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 3 deletions.
16 changes: 16 additions & 0 deletions src/main/scala/Config.scala
Original file line number Diff line number Diff line change
Expand Up @@ -784,6 +784,13 @@ class Config(args: Seq[String]) extends SilFrontendConfig(args, "Silicon") {
noshort = true
)

val benchmark = opt[Boolean]("benchmark",
descr = "Prints benchmarking information using the SymbExLogger",
default = Some(false),
noshort = true,
hidden = true
)

/* Option validation (trailing file argument is validated by parent class) */

validateOpt(prover) {
Expand All @@ -805,6 +812,15 @@ class Config(args: Seq[String]) extends SilFrontendConfig(args, "Silicon") {
sys.error(s"Unexpected combination: $other")
}

validateOpt(benchmark, parallelizeBranches) {
case (Some(false), _) => Right(())
case (_, Some(false)) => Right(())
case (Some(true), Some(true)) =>
Left(s"Option ${benchmark.name} is not supported in combination with ${parallelizeBranches.name}")
case other =>
sys.error(s"Unexpected combination: $other")
}

validateOpt(counterexample, moreCompleteExhale, exhaleModeOption) {
case (Some(_), Some(false), None) |
(Some(_), Some(_), Some(ExhaleMode.Greedy)) =>
Expand Down
2 changes: 1 addition & 1 deletion src/main/scala/Silicon.scala
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ class Silicon(val reporter: Reporter, private var debugInfo: Seq[(String, Any)]
result = Some(condenseToViperResult(failures))
} catch { /* Catch exceptions thrown during verification (errors are not caught) */
case _: TimeoutException =>
if (config.ideModeAdvanced()) {
if (config.ideModeAdvanced() || config.benchmark()) {
symbExLog.close()
reporter report ExecutionTraceReport(symbExLog.logs.toSeq, List(), List())
}
Expand Down
4 changes: 2 additions & 2 deletions src/main/scala/logger/SymbExLogger.scala
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ import scala.util.{Failure, Success, Try}

case object SymbExLogger {
def ofConfig(config: Config): SymbExLogger[_ <: MemberSymbExLogger] = {
if(config.ideModeAdvanced())
if(config.ideModeAdvanced() || config.benchmark())
SymbExLog(parseLogConfig(config))
else
NoopSymbExLog
Expand Down Expand Up @@ -579,4 +579,4 @@ class MemberSymbExLog(rootLog: SymbExLogger[MemberSymbExLog],
// no close scope is inserted because branches are not considered scopes
branchingStack = branchingStack.tail
}
}
}
18 changes: 18 additions & 0 deletions src/main/scala/logger/benchmarker/SymbExLogBenchmarker.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package viper.silicon.logger.benchmarker

import viper.silicon.logger.MemberSymbExLogger
import viper.silicon.logger.SymbExLogger
import viper.silicon.logger.writer.SymbExLogReportWriter
import viper.silicon.logger.MemberSymbExLog

object SymbExLogBenchmarker {
def analyse(l: SymbExLogger[_ <: MemberSymbExLogger]): Unit = {
for (log <- l.logs) {
val allRecords = SymbExLogReportWriter.getAllRecords(log.asInstanceOf[MemberSymbExLog].log)
for (rec <- allRecords) {
println(rec.getClass())
}
}
}
}

9 changes: 9 additions & 0 deletions src/main/scala/verifier/DefaultMainVerifier.scala
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import viper.silicon.extensions.ConditionalPermissionRewriter
import viper.silicon.interfaces._
import viper.silicon.interfaces.decider.ProverLike
import viper.silicon.logger.{MemberSymbExLogger, SymbExLogger}
import viper.silicon.logger.writer.SymbExLogReportWriter
import viper.silicon.reporting.{MultiRunRecorders, condenseToViperResult}
import viper.silicon.state._
import viper.silicon.state.terms.{Decl, Sort, Term, sorts}
Expand All @@ -34,6 +35,9 @@ import viper.silver.ast.utility.rewriter.Traverse
import viper.silver.cfg.silver.SilverCfg
import viper.silver.reporter.{AnnotationWarning, ConfigurationConfirmation, ExecutionTraceReport, QuantifierChosenTriggersMessage, Reporter, VerificationResultMessage, VerificationTerminationMessage, WarningsDuringVerification}
import viper.silver.verifier.VerifierWarning
import spray.json.JsArray
import viper.silicon.logger.{LogConfig, MemberSymbExLog}
import viper.silicon.logger.benchmarker.SymbExLogBenchmarker

/* TODO: Extract a suitable MainVerifier interface, probably including
* - def verificationPoolManager: VerificationPoolManager)
Expand Down Expand Up @@ -284,6 +288,11 @@ class DefaultMainVerifier(config: Config,
this.axiomsAfterAnalysis().toList,
this.postConditionAxioms().toList)
}

if (config.benchmark()) {
SymbExLogBenchmarker.analyse(rootSymbExLogger)
//println(SymbExLogReportWriter.toJSON(rootSymbExLogger.logs.toSeq.asInstanceOf[Seq[MemberSymbExLog]], LogConfig.default()) : JsArray)
}
reporter report VerificationTerminationMessage()

( functionVerificationResults
Expand Down

0 comments on commit 70683d8

Please sign in to comment.