| author | wenzelm | 
| Tue, 24 Sep 2024 21:24:44 +0200 | |
| changeset 80945 | 584828fa7a97 | 
| parent 80480 | 972f7a4cdc0e | 
| child 82125 | f6460ae54866 | 
| permissions | -rw-r--r-- | 
| 78414 | 1 | /* Title: Pure/Tools/profiling.scala | 
| 78315 | 2 | Author: Makarius | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 3 | |
| 78315 | 4 | Build sessions for profiling of ML heap content. | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 5 | */ | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 6 | |
| 78315 | 7 | package isabelle | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 8 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 9 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 10 | import java.util.Locale | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 11 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 12 | |
| 78315 | 13 | object Profiling {
 | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 14 | /* percentage: precision in permille */ | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 15 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 16 | def percentage(a: Long, b: Long): Percentage = | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 17 | new Percentage(if (b == 0L) 0 else ((a.toDouble / b.toDouble) * 1000.0).round.toInt) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 18 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 19 | def percentage(a: Int, b: Int): Percentage = percentage(a.toLong, b.toLong) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 20 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 21 | def percentage_space(a: Space, b: Space): Percentage = percentage(a.bytes, b.bytes) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 22 | |
| 78315 | 23 |   final class Percentage private[Profiling](val permille: Int) extends AnyVal {
 | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 24 | def percent: Double = permille.toDouble / 10 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 25 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 26 | override def toString: String = (permille / 10).toString + "." + (permille % 10).toString + "%" | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 27 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 28 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 29 | |
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 30 | /* session statistics */ | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 31 | |
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 32 | sealed case class Session_Statistics( | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 33 | theories: Int = 0, | 
| 78450 | 34 | garbage_theories: Int = 0, | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 35 | locales: Int = 0, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 36 | locale_thms: Int = 0, | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 37 | global_thms: Int = 0, | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 38 | sizeof_thys_id: Space = Space.zero, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 39 | sizeof_thms_id: Space = Space.zero, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 40 | sizeof_terms: Space = Space.zero, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 41 | sizeof_types: Space = Space.zero, | 
| 79095 | 42 | sizeof_names: Space = Space.zero, | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 43 | sizeof_spaces: Space = Space.zero) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 44 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 45 |   object Statistics {
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 46 | private val encode_args: XML.Encode.T[List[String]] = | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 47 | (args: List[String]) => | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 48 |         { import XML.Encode._; list(string)(args) }
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 49 | |
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 50 | private val decode_result: XML.Decode.T[Session_Statistics] = | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 51 | (body: XML.Body) => | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 52 |         {
 | 
| 79095 | 53 |           val (a, (b, (c, (d, (e, (f, (g, (h, (i, (j, k)))))))))) = {
 | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 54 | import XML.Decode._ | 
| 78450 | 55 | pair(int, pair(int, pair(int, pair(int, pair(int, | 
| 79095 | 56 | pair(long, pair(long, pair(long, pair(long, pair(long, long))))))))))(body) | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 57 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 58 | Session_Statistics( | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 59 | theories = a, | 
| 78450 | 60 | garbage_theories = b, | 
| 61 | locales = c, | |
| 62 | locale_thms = d, | |
| 63 | global_thms = e, | |
| 64 | sizeof_thys_id = Space.bytes(f), | |
| 65 | sizeof_thms_id = Space.bytes(g), | |
| 66 | sizeof_terms = Space.bytes(h), | |
| 67 | sizeof_types = Space.bytes(i), | |
| 79095 | 68 | sizeof_names = Space.bytes(j), | 
| 69 | sizeof_spaces = Space.bytes(k)) | |
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 70 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 71 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 72 | def make( | 
| 78315 | 73 | store: Store, | 
| 74 | session_background: Sessions.Background, | |
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 75 | parent: Option[Statistics] = None | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 76 |     ): Statistics = {
 | 
| 78315 | 77 | val session_base = session_background.base | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 78 | val session_name = session_base.session_name | 
| 78315 | 79 | val sessions_structure = session_background.sessions_structure | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 80 | |
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 81 |       val session = {
 | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 82 | val args = session_base.used_theories.map(p => p._1.theory) | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 83 | val eval_args = | 
| 78315 | 84 |           List("--eval", "use_thy " + ML_Syntax.print_string_bytes("~~/src/Tools/Profiling"))
 | 
| 85 |         Isabelle_System.with_tmp_dir("profiling") { dir =>
 | |
| 86 |           val put_env = List("ISABELLE_PROFILING" -> dir.implode)
 | |
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 87 |           File.write(dir + Path.explode("args.yxml"), YXML.string_of_body(encode_args(args)))
 | 
| 78315 | 88 | val session_heaps = | 
| 89 | ML_Process.session_heaps(store, session_background, logic = session_name) | |
| 90 | ML_Process(store.options, session_background, session_heaps, args = eval_args, | |
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 91 | env = Isabelle_System.settings(put_env)).result().check | 
| 80480 
972f7a4cdc0e
clarified YXML.Source: more direct support for String and Bytes, instead of CharSequence;
 wenzelm parents: 
79674diff
changeset | 92 |           decode_result(YXML.parse_body(Bytes.read(dir + Path.explode("result.yxml"))))
 | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 93 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 94 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 95 | |
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 96 | new Statistics(parent = parent, session = session_name, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 97 | theories = session.theories, | 
| 78450 | 98 | garbage_theories = session.garbage_theories, | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 99 | locales = session.locales, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 100 | locale_thms = session.locale_thms, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 101 | global_thms = session.global_thms, | 
| 79674 | 102 | heap_size = File.space(store.get_session(session_name).the_heap), | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 103 | thys_id_size = session.sizeof_thys_id, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 104 | thms_id_size = session.sizeof_thms_id, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 105 | terms_size = session.sizeof_terms, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 106 | types_size = session.sizeof_types, | 
| 79095 | 107 | names_size = session.sizeof_names, | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 108 | spaces_size = session.sizeof_spaces) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 109 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 110 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 111 | val empty: Statistics = new Statistics() | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 112 | |
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 113 | val header0: List[String] = | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 114 | List( | 
| 78452 | 115 | "named_theories", | 
| 116 | "total_theories", | |
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 117 | "locales", | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 118 | "locale_thms", | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 119 | "global_thms", | 
| 78329 | 120 | "locale_thms%", | 
| 121 | "global_thms%", | |
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 122 | "heap_size", | 
| 78329 | 123 | "thys_id_size%", | 
| 124 | "thms_id_size%", | |
| 125 | "terms_size%", | |
| 126 | "types_size%", | |
| 79095 | 127 | "names_size%", | 
| 78329 | 128 | "spaces_size%") | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 129 | |
| 78330 | 130 | def header: List[String] = | 
| 131 | "session" :: header0.flatMap(a => List(a, "\u2211" + a)) | |
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 132 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 133 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 134 | final class Statistics private( | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 135 | val parent: Option[Statistics] = None, | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 136 | val session: String = "", | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 137 | val theories: Int = 0, | 
| 78450 | 138 | val garbage_theories: Int = 0, | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 139 | val locales: Int = 0, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 140 | val locale_thms: Int = 0, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 141 | val global_thms: Int = 0, | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 142 | val heap_size: Space = Space.zero, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 143 | val thys_id_size: Space = Space.zero, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 144 | val thms_id_size: Space = Space.zero, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 145 | val terms_size: Space = Space.zero, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 146 | val types_size: Space = Space.zero, | 
| 79095 | 147 | val names_size: Space = Space.zero, | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 148 | val spaces_size: Space = Space.zero | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 149 |   ) {
 | 
| 78452 | 150 | private def print_total_theories: String = | 
| 151 | if (theories == 0) "0" | |
| 152 |       else {
 | |
| 153 | val x = (theories + garbage_theories).toDouble / theories | |
| 154 | String.format(Locale.ROOT, "%.1f", x.asInstanceOf[AnyRef]) | |
| 155 | } | |
| 78450 | 156 | |
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 157 | private def size_percentage(space: Space): Percentage = | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 158 | percentage_space(space, heap_size) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 159 | |
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 160 | private def thms_percentage(thms: Int): Percentage = | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 161 | percentage(thms, locale_thms + global_thms) | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 162 | |
| 78330 | 163 | val fields0: List[Any] = | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 164 | List( | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 165 | theories, | 
| 78452 | 166 | print_total_theories, | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 167 | locales, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 168 | locale_thms, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 169 | global_thms, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 170 | thms_percentage(locale_thms).toString, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 171 | thms_percentage(global_thms).toString, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 172 | heap_size.print, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 173 | size_percentage(thys_id_size).toString, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 174 | size_percentage(thms_id_size).toString, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 175 | size_percentage(terms_size).toString, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 176 | size_percentage(types_size).toString, | 
| 79095 | 177 | size_percentage(names_size).toString, | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 178 | size_percentage(spaces_size).toString) | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 179 | |
| 78330 | 180 | def fields: List[Any] = | 
| 181 |       session :: fields0.zipWithIndex.flatMap({ case (a, i) => List(a, cumulative.fields0(i)) })
 | |
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 182 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 183 | lazy val cumulative: Statistics = | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 184 |       parent match {
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 185 | case None => this | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 186 | case Some(other) => | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 187 | new Statistics(parent = None, | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 188 | session = session, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 189 | theories = other.cumulative.theories + theories, | 
| 78450 | 190 | garbage_theories = other.cumulative.garbage_theories + garbage_theories, | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 191 | locales = other.cumulative.locales + locales, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 192 | locale_thms = other.cumulative.locale_thms + locale_thms, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 193 | global_thms = other.cumulative.global_thms + global_thms, | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 194 | heap_size = other.cumulative.heap_size + heap_size, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 195 | thys_id_size = other.cumulative.thys_id_size + thys_id_size, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 196 | thms_id_size = other.cumulative.thms_id_size + thms_id_size, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 197 | terms_size = other.cumulative.terms_size + terms_size, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 198 | types_size = other.cumulative.types_size + types_size, | 
| 79095 | 199 | names_size = other.cumulative.names_size + names_size, | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 200 | spaces_size = other.cumulative.spaces_size + spaces_size) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 201 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 202 | |
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 203 |     override def toString: String = "Statistics(" + session + ")"
 | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 204 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 205 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 206 | |
| 78315 | 207 | /* profiling results */ | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 208 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 209 |   sealed case class Results(build_results: Build.Results, sessions: List[Statistics]) {
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 210 | def output( | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 211 | output_dir: Path = default_output_dir, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 212 | progress: Progress = new Progress | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 213 |     ): Unit = {
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 214 |       progress.echo("Output directory " + output_dir.absolute)
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 215 | Isabelle_System.make_directory(output_dir) | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 216 | val csv_records = for (session <- sessions) yield CSV.Record(session.fields:_*) | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 217 |       CSV.File("sessions", Statistics.header, csv_records).write(output_dir)
 | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 218 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 219 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 220 | |
| 78315 | 221 | def profiling( | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 222 | options: Options, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 223 | selection: Sessions.Selection = Sessions.Selection.empty, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 224 | progress: Progress = new Progress, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 225 | dirs: List[Path] = Nil, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 226 | select_dirs: List[Path] = Nil, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 227 | numa_shuffling: Boolean = false, | 
| 79616 | 228 | max_jobs: Option[Int] = None | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 229 |   ): Results = {
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 230 | /* sessions structure */ | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 231 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 232 | val sessions_dirs = dirs ::: select_dirs | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 233 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 234 | val sessions_structure = | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 235 | Sessions.load_structure(options, dirs = dirs, select_dirs = select_dirs) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 236 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 237 | val selected_sessions = sessions_structure.imports_selection(selection) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 238 | val cumulative_sessions = sessions_structure.build_requirements(selected_sessions) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 239 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 240 | val sessions_selection = Sessions.Selection(sessions = selected_sessions) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 241 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 242 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 243 | /* build session */ | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 244 | |
| 78315 | 245 | val store = Store(options) | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 246 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 247 | def build( | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 248 | selection: Sessions.Selection, | 
| 78448 | 249 | build_options: Options = options, | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 250 | build_heap: Boolean = false, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 251 | clean_build: Boolean = false | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 252 |     ): Build.Results = {
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 253 | val results = | 
| 78448 | 254 | Build.build(build_options, progress = progress, | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 255 | selection = selection, build_heap = build_heap, clean_build = clean_build, | 
| 78315 | 256 | dirs = sessions_dirs, numa_shuffling = numa_shuffling, max_jobs = max_jobs) | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 257 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 258 |       if (results.ok) results else error("Build failed")
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 259 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 260 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 261 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 262 | /* session builds and profiling */ | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 263 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 264 |     progress.echo("Build session requirements:")
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 265 | build(sessions_selection.copy(requirements = true), build_heap = true) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 266 |     progress.echo("DONE")
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 267 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 268 |     progress.echo("Build sessions:")
 | 
| 78448 | 269 | val build_results = | 
| 270 | build(sessions_selection, | |
| 271 | build_options = options + "context_theory_tracing", | |
| 272 | build_heap = true, | |
| 273 | clean_build = true) | |
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 274 |     progress.echo("DONE")
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 275 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 276 |     val sessions = {
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 277 | var seen = Map.empty[String, Statistics] | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 278 | for (session_name <- cumulative_sessions) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 279 |       yield {
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 280 |         progress.echo("Profiling " + session_name + " ...")
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 281 | val parent = | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 282 |           for {
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 283 | info <- sessions_structure.get(session_name) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 284 | parent_name <- info.parent | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 285 | parent_stats <- seen.get(parent_name) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 286 | } yield parent_stats | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 287 | val stats = | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 288 | Statistics.make(store, | 
| 78315 | 289 | build_results.deps.background(session_name), | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 290 | parent = parent) | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 291 | seen += (session_name -> stats) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 292 | stats | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 293 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 294 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 295 |     progress.echo("DONE")
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 296 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 297 | Results(build_results, sessions) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 298 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 299 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 300 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 301 | /* Isabelle tool wrapper */ | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 302 | |
| 78315 | 303 |   val default_output_dir: Path = Path.explode("profiling")
 | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 304 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 305 | val isabelle_tool = | 
| 78315 | 306 |     Isabelle_Tool("profiling", "build sessions for profiling of ML heap content",
 | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 307 |       Scala_Project.here, { args =>
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 308 | var base_sessions: List[String] = Nil | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 309 | var select_dirs: List[Path] = Nil | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 310 | var numa_shuffling = false | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 311 | var output_dir = default_output_dir | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 312 | var exclude_session_groups: List[String] = Nil | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 313 | var all_sessions = false | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 314 | var dirs: List[Path] = Nil | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 315 | var session_groups: List[String] = Nil | 
| 79616 | 316 | var max_jobs: Option[Int] = None | 
| 78315 | 317 | var options = Options.init(specs = Options.Spec.ISABELLE_BUILD_OPTIONS) | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 318 | var verbose = false | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 319 | var exclude_sessions: List[String] = Nil | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 320 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 321 |         val getopts = Getopts("""
 | 
| 78315 | 322 | Usage: isabelle profiling [OPTIONS] [SESSIONS ...] | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 323 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 324 | Options are: | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 325 | -B NAME include session NAME and all descendants | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 326 | -D DIR include session directory and select its sessions | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 327 | -N cyclic shuffling of NUMA CPU nodes (performance tuning) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 328 | -O DIR output directory (default: """ + default_output_dir + """) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 329 | -X NAME exclude sessions from group NAME and all descendants | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 330 | -a select all sessions | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 331 | -d DIR include session directory | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 332 | -g NAME select session group NAME | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 333 | -j INT maximum number of parallel jobs (default 1) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 334 | -o OPTION override Isabelle system OPTION (via NAME=VAL or NAME) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 335 | -v verbose | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 336 | -x NAME exclude session NAME and all descendants | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 337 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 338 | Build specified sessions, with options similar to "isabelle build" and | 
| 78315 | 339 | implicit modifications for profiling of ML heap content.""", | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 340 | "B:" -> (arg => base_sessions = base_sessions ::: List(arg)), | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 341 | "D:" -> (arg => select_dirs = select_dirs ::: List(Path.explode(arg))), | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 342 | "N" -> (_ => numa_shuffling = true), | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 343 | "O:" -> (arg => output_dir = Path.explode(arg)), | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 344 | "X:" -> (arg => exclude_session_groups = exclude_session_groups ::: List(arg)), | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 345 | "a" -> (_ => all_sessions = true), | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 346 | "d:" -> (arg => dirs = dirs ::: List(Path.explode(arg))), | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 347 | "g:" -> (arg => session_groups = session_groups ::: List(arg)), | 
| 79616 | 348 | "j:" -> (arg => max_jobs = Some(Value.Nat.parse(arg))), | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 349 | "o:" -> (arg => options = options + arg), | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 350 | "v" -> (_ => verbose = true), | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 351 | "x:" -> (arg => exclude_sessions = exclude_sessions ::: List(arg))) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 352 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 353 | val sessions = getopts(args) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 354 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 355 | val progress = new Console_Progress(verbose = verbose) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 356 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 357 | val results = | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 358 |           progress.interrupt_handler {
 | 
| 78315 | 359 | profiling(options, | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 360 | selection = Sessions.Selection( | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 361 | all_sessions = all_sessions, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 362 | base_sessions = base_sessions, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 363 | exclude_session_groups = exclude_session_groups, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 364 | exclude_sessions = exclude_sessions, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 365 | session_groups = session_groups, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 366 | sessions = sessions), | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 367 | progress = progress, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 368 | dirs = dirs, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 369 | select_dirs = select_dirs, | 
| 78315 | 370 | numa_shuffling = Host.numa_check(progress, numa_shuffling), | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 371 | max_jobs = max_jobs) | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 372 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 373 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 374 | results.output(output_dir = output_dir.absolute, progress = progress) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 375 | }) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 376 | } |