author | wenzelm |
Wed, 12 Jul 2023 16:23:28 +0200 | |
changeset 78315 | addecc8de2c4 |
parent 78314 | 1588bec693c2 |
child 78328 | 007b04dc6f96 |
permissions | -rw-r--r-- |
78315 | 1 |
/* Title: Pure/Tools/profiling_report.scala |
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 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
30 |
/* session and theory statistics */ |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
31 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
32 |
object Theory_Statistics { |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
33 |
def sum(name: String, theories: List[Theory_Statistics]): Theory_Statistics = |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
34 |
theories.foldLeft(Theory_Statistics(name = name))(_ + _) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
35 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
36 |
val header: List[String] = |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
37 |
List("name", "locales", "locale_thms", "global_thms", |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
38 |
"locale_thms_percentage", "global_thms_percentage") |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
39 |
} |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
40 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
41 |
sealed case class Theory_Statistics( |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
42 |
name: String = "", |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
43 |
locales: Int = 0, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
44 |
locale_thms: Int = 0, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
45 |
global_thms: Int = 0 |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
46 |
) { |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
47 |
def + (other: Theory_Statistics): Theory_Statistics = |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
48 |
copy( |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
49 |
locales = other.locales + locales, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
50 |
locale_thms = other.locale_thms + locale_thms, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
51 |
global_thms = other.global_thms + global_thms) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
52 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
53 |
def thms: Int = locale_thms + global_thms |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
54 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
55 |
def fields: List[Any] = |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
56 |
List(name, locales, locale_thms, global_thms, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
57 |
percentage(locale_thms, thms), percentage(global_thms, thms)) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
58 |
} |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
59 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
60 |
sealed case class Session_Statistics( |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
61 |
sizeof_thys_id: Space = Space.zero, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
62 |
sizeof_thms_id: Space = Space.zero, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
63 |
sizeof_terms: Space = Space.zero, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
64 |
sizeof_types: Space = Space.zero, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
65 |
sizeof_spaces: Space = Space.zero) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
66 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
67 |
object Statistics { |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
68 |
private val encode_args: XML.Encode.T[List[String]] = |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
69 |
(args: List[String]) => |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
70 |
{ import XML.Encode._; list(string)(args) } |
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 |
private val decode_theories_result: XML.Decode.T[List[Theory_Statistics]] = |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
73 |
(body: XML.Body) => |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
74 |
{ import XML.Decode._; list(pair(string, pair(int, pair(int, int))))(body) } map { |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
75 |
case (a, (b, (c, d))) => |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
76 |
Theory_Statistics( |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
77 |
name = a, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
78 |
locales = b, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
79 |
locale_thms = c, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
80 |
global_thms = d) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
81 |
} |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
82 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
83 |
private val decode_session_result: XML.Decode.T[Session_Statistics] = |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
84 |
(body: XML.Body) => |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
85 |
{ |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
86 |
val (a, (b, (c, (d, e)))) = { |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
87 |
import XML.Decode._ |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
88 |
pair(long, pair(long, pair(long, pair(long, long))))(body) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
89 |
} |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
90 |
Session_Statistics( |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
91 |
sizeof_thys_id = Space.bytes(a), |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
92 |
sizeof_thms_id = Space.bytes(b), |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
93 |
sizeof_terms = Space.bytes(c), |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
94 |
sizeof_types = Space.bytes(d), |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
95 |
sizeof_spaces = Space.bytes(e)) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
96 |
} |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
97 |
private val decode_result: XML.Decode.T[(List[Theory_Statistics], Session_Statistics)] = |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
98 |
(body: XML.Body) => |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
99 |
{ import XML.Decode._; pair(decode_theories_result, decode_session_result)(body) } |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
100 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
101 |
def make( |
78315 | 102 |
store: Store, |
103 |
session_background: Sessions.Background, |
|
78314
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
104 |
parent: Option[Statistics] = None, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
105 |
anonymous_theories: Boolean = false |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
106 |
): Statistics = { |
78315 | 107 |
val session_base = session_background.base |
78314
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
108 |
val session_name = session_base.session_name |
78315 | 109 |
val sessions_structure = session_background.sessions_structure |
78314
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 theories_name = session_base.used_theories.map(p => p._1.theory) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
112 |
val theories_index = |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
113 |
Map.from( |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
114 |
for ((name, i) <- theories_name.zipWithIndex) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
115 |
yield name -> String.format(Locale.ROOT, "%s.%04d", session_name, i + 1)) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
116 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
117 |
val (theories0, session) = { |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
118 |
val args = theories_name |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
119 |
val eval_args = |
78315 | 120 |
List("--eval", "use_thy " + ML_Syntax.print_string_bytes("~~/src/Tools/Profiling")) |
121 |
Isabelle_System.with_tmp_dir("profiling") { dir => |
|
122 |
val put_env = List("ISABELLE_PROFILING" -> dir.implode) |
|
78314
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
123 |
File.write(dir + Path.explode("args.yxml"), YXML.string_of_body(encode_args(args))) |
78315 | 124 |
val session_heaps = |
125 |
ML_Process.session_heaps(store, session_background, logic = session_name) |
|
126 |
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
|
127 |
env = Isabelle_System.settings(put_env)).result().check |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
128 |
decode_result(YXML.parse_body(File.read(dir + Path.explode("result.yxml")))) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
129 |
} |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
130 |
} |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
131 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
132 |
val theories = |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
133 |
if (anonymous_theories) theories0.map(a => a.copy(name = theories_index(a.name))) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
134 |
else theories0 |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
135 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
136 |
new Statistics(parent = parent, session_name = session_name, theories = theories, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
137 |
heap_size = Space.bytes(store.the_heap(session_name).file.length), |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
138 |
thys_id_size = session.sizeof_thys_id, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
139 |
thms_id_size = session.sizeof_thms_id, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
140 |
terms_size = session.sizeof_terms, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
141 |
types_size = session.sizeof_types, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
142 |
spaces_size = session.sizeof_spaces) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
143 |
} |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
144 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
145 |
val empty: Statistics = new Statistics() |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
146 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
147 |
val header: List[String] = |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
148 |
Theory_Statistics.header ::: |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
149 |
List("heap_size", |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
150 |
"thys_id_size_percentage", |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
151 |
"thms_id_size_percentage", |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
152 |
"terms_size_percentage", |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
153 |
"types_size_percentage", |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
154 |
"spaces_size_percentage") |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
155 |
val header_cumulative: List[String] = header ::: header.tail.map(_ + "_cumulative") |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
156 |
} |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
157 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
158 |
final class Statistics private( |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
159 |
val parent: Option[Statistics] = None, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
160 |
val session_name: String = "", |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
161 |
val theories: List[Theory_Statistics] = Nil, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
162 |
val heap_size: Space = Space.zero, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
163 |
val thys_id_size: Space = Space.zero, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
164 |
val thms_id_size: Space = Space.zero, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
165 |
val terms_size: Space = Space.zero, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
166 |
val types_size: Space = Space.zero, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
167 |
val spaces_size: Space = Space.zero |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
168 |
) { |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
169 |
private def size_percentage(space: Space): Percentage = |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
170 |
percentage_space(space, heap_size) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
171 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
172 |
def fields: List[Any] = |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
173 |
session.fields ::: |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
174 |
List(heap_size.print, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
175 |
size_percentage(thys_id_size).toString, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
176 |
size_percentage(thms_id_size).toString, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
177 |
size_percentage(terms_size).toString, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
178 |
size_percentage(types_size).toString, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
179 |
size_percentage(spaces_size).toString) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
180 |
def fields_cumulative: List[Any] = fields ::: cumulative.fields.tail |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
181 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
182 |
lazy val session: Theory_Statistics = |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
183 |
Theory_Statistics.sum(session_name, theories) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
184 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
185 |
lazy val cumulative: Statistics = |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
186 |
parent match { |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
187 |
case None => this |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
188 |
case Some(other) => |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
189 |
new Statistics(parent = None, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
190 |
session_name = session_name, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
191 |
theories = other.cumulative.theories ::: theories, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
192 |
heap_size = other.cumulative.heap_size + heap_size, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
193 |
thys_id_size = other.cumulative.thys_id_size + thys_id_size, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
194 |
thms_id_size = other.cumulative.thms_id_size + thms_id_size, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
195 |
terms_size = other.cumulative.terms_size + terms_size, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
196 |
types_size = other.cumulative.types_size + types_size, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
197 |
spaces_size = other.cumulative.spaces_size + spaces_size) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
198 |
} |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
199 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
200 |
override def toString: String = "Statistics(" + session_name + ")" |
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 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
203 |
|
78315 | 204 |
/* profiling results */ |
78314
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 |
sealed case class Results(build_results: Build.Results, sessions: List[Statistics]) { |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
207 |
def output( |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
208 |
output_dir: Path = default_output_dir, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
209 |
progress: Progress = new Progress |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
210 |
): Unit = { |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
211 |
progress.echo("Output directory " + output_dir.absolute) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
212 |
Isabelle_System.make_directory(output_dir) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
213 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
214 |
val sessions_records = |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
215 |
for (stats <- sessions) yield { |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
216 |
CSV.File("session_" + stats.session_name, Theory_Statistics.header, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
217 |
stats.theories.map(thy => CSV.Record(thy.fields:_*))).write(output_dir) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
218 |
CSV.Record(stats.fields_cumulative:_*) |
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 |
CSV.File("all_sessions", Statistics.header_cumulative, sessions_records).write(output_dir) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
221 |
} |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
222 |
} |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
223 |
|
78315 | 224 |
def profiling( |
78314
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
225 |
options: Options, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
226 |
selection: Sessions.Selection = Sessions.Selection.empty, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
227 |
progress: Progress = new Progress, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
228 |
dirs: List[Path] = Nil, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
229 |
select_dirs: List[Path] = Nil, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
230 |
numa_shuffling: Boolean = false, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
231 |
max_jobs: Int = 1, |
78315 | 232 |
anonymous_theories: Boolean = false |
78314
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
233 |
): Results = { |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
234 |
/* sessions structure */ |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
235 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
236 |
val sessions_dirs = dirs ::: select_dirs |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
237 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
238 |
val sessions_structure = |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
239 |
Sessions.load_structure(options, dirs = dirs, select_dirs = select_dirs) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
240 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
241 |
val selected_sessions = sessions_structure.imports_selection(selection) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
242 |
val cumulative_sessions = sessions_structure.build_requirements(selected_sessions) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
243 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
244 |
val sessions_selection = Sessions.Selection(sessions = selected_sessions) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
245 |
|
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 |
/* build session */ |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
248 |
|
78315 | 249 |
val store = Store(options) |
78314
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
250 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
251 |
def build( |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
252 |
selection: Sessions.Selection, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
253 |
build_heap: Boolean = false, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
254 |
clean_build: Boolean = false |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
255 |
): Build.Results = { |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
256 |
val results = |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
257 |
Build.build(options, progress = progress, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
258 |
selection = selection, build_heap = build_heap, clean_build = clean_build, |
78315 | 259 |
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
|
260 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
261 |
if (results.ok) results else error("Build failed") |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
262 |
} |
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 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
265 |
/* session builds and profiling */ |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
266 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
267 |
progress.echo("Build session requirements:") |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
268 |
build(sessions_selection.copy(requirements = true), build_heap = true) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
269 |
progress.echo("DONE") |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
270 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
271 |
progress.echo("Build sessions:") |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
272 |
val build_results = build(sessions_selection, build_heap = true, clean_build = true) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
273 |
progress.echo("DONE") |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
274 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
275 |
val sessions = { |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
276 |
var seen = Map.empty[String, Statistics] |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
277 |
for (session_name <- cumulative_sessions) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
278 |
yield { |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
279 |
progress.echo("Profiling " + session_name + " ...") |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
280 |
val parent = |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
281 |
for { |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
282 |
info <- sessions_structure.get(session_name) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
283 |
parent_name <- info.parent |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
284 |
parent_stats <- seen.get(parent_name) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
285 |
} yield parent_stats |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
286 |
val stats = |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
287 |
Statistics.make(store, |
78315 | 288 |
build_results.deps.background(session_name), |
78314
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
289 |
parent = parent, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
290 |
anonymous_theories = anonymous_theories) |
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 |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
316 |
var max_jobs = 1 |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
317 |
var anonymous_theories = false |
78315 | 318 |
var options = Options.init(specs = Options.Spec.ISABELLE_BUILD_OPTIONS) |
78314
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
319 |
var verbose = false |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
320 |
var exclude_sessions: List[String] = Nil |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
321 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
322 |
val getopts = Getopts(""" |
78315 | 323 |
Usage: isabelle profiling [OPTIONS] [SESSIONS ...] |
78314
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
324 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
325 |
Options are: |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
326 |
-B NAME include session NAME and all descendants |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
327 |
-D DIR include session directory and select its sessions |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
328 |
-N cyclic shuffling of NUMA CPU nodes (performance tuning) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
329 |
-O DIR output directory (default: """ + default_output_dir + """) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
330 |
-X NAME exclude sessions from group NAME and all descendants |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
331 |
-a select all sessions |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
332 |
-d DIR include session directory |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
333 |
-g NAME select session group NAME |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
334 |
-j INT maximum number of parallel jobs (default 1) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
335 |
-n anonymous theories: suppress details of private projects |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
336 |
-o OPTION override Isabelle system OPTION (via NAME=VAL or NAME) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
337 |
-v verbose |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
338 |
-x NAME exclude session NAME and all descendants |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
339 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
340 |
Build specified sessions, with options similar to "isabelle build" and |
78315 | 341 |
implicit modifications for profiling of ML heap content.""", |
78314
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
342 |
"B:" -> (arg => base_sessions = base_sessions ::: List(arg)), |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
343 |
"D:" -> (arg => select_dirs = select_dirs ::: List(Path.explode(arg))), |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
344 |
"N" -> (_ => numa_shuffling = true), |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
345 |
"O:" -> (arg => output_dir = Path.explode(arg)), |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
346 |
"X:" -> (arg => exclude_session_groups = exclude_session_groups ::: List(arg)), |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
347 |
"a" -> (_ => all_sessions = true), |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
348 |
"d:" -> (arg => dirs = dirs ::: List(Path.explode(arg))), |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
349 |
"g:" -> (arg => session_groups = session_groups ::: List(arg)), |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
350 |
"j:" -> (arg => max_jobs = Value.Int.parse(arg)), |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
351 |
"n" -> (_ => anonymous_theories = true), |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
352 |
"o:" -> (arg => options = options + arg), |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
353 |
"v" -> (_ => verbose = true), |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
354 |
"x:" -> (arg => exclude_sessions = exclude_sessions ::: List(arg))) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
355 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
356 |
val sessions = getopts(args) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
357 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
358 |
val progress = new Console_Progress(verbose = verbose) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
359 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
360 |
val results = |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
361 |
progress.interrupt_handler { |
78315 | 362 |
profiling(options, |
78314
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
363 |
selection = Sessions.Selection( |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
364 |
all_sessions = all_sessions, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
365 |
base_sessions = base_sessions, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
366 |
exclude_session_groups = exclude_session_groups, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
367 |
exclude_sessions = exclude_sessions, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
368 |
session_groups = session_groups, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
369 |
sessions = sessions), |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
370 |
progress = progress, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
371 |
dirs = dirs, |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
372 |
select_dirs = select_dirs, |
78315 | 373 |
numa_shuffling = Host.numa_check(progress, numa_shuffling), |
78314
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
374 |
max_jobs = max_jobs, |
78315 | 375 |
anonymous_theories = anonymous_theories) |
78314
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
376 |
} |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
377 |
|
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
378 |
results.output(output_dir = output_dir.absolute, progress = progress) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
379 |
}) |
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
wenzelm
parents:
diff
changeset
|
380 |
} |