@@ -40,53 +40,120 @@ object Generator {
40
40
val q = " \" "
41
41
if (target.exists) throw new java.io.IOException (" Generator will not write to existing file: " + target.getPath)
42
42
writeTo(target){ pr =>
43
- pr( """ package bench.test""" )
44
- pr( """ """ )
45
- pr( """ import bench.generate._, bench.operate._, bench.generate.EnableIterators._""" )
46
- pr( """ import scala.compat.java8.StreamConverters._""" )
47
- pr( """ """ )
48
- pr( """ object Agreement {""" )
49
- pr( """ def run() {""" )
50
- pr( """ val wrong = new collection.mutable.ArrayBuffer[String]""" )
51
- pr( """ def check[A](a1: A, a2: => A, msg: String) {""" )
52
- pr( """ var t = System.nanoTime""" )
53
- pr( """ if (!CloseEnough(a1, { val ans = a2; t = System.nanoTime - t; ans}))""" )
54
- pr( """ wrong += msg""" )
55
- pr( """ if (t > 2000000000) wrong += "Slow " + msg""" )
56
- pr( """ }""" )
57
- pr( s " val m = (new bench.generate.Things( ${sayArrayI(sizes)})).N; " )
43
+ pr( """ package bench.test""" )
44
+ pr( """ """ )
45
+ pr( """ import bench.generate._, bench.operate._, bench.generate.EnableIterators._""" )
46
+ pr( """ import scala.compat.java8.StreamConverters._""" )
47
+ pr( """ """ )
48
+ pr( """ object Agreement {""" )
49
+ pr( """ def run() {""" )
50
+ pr( """ val wrong = new collection.mutable.ArrayBuffer[String]""" )
51
+ pr( """ def check[A](a1: A, a2: => A, msg: String) {""" )
52
+ pr( """ var t = System.nanoTime""" )
53
+ pr( """ if (!CloseEnough(a1, { val ans = a2; t = System.nanoTime - t; ans}))""" )
54
+ pr( """ wrong += msg""" )
55
+ pr( """ if (t > 2000000000) wrong += "Slow " + msg""" )
56
+ pr( """ }""" )
57
+ pr( s " val m = (new bench.generate.Things( ${sayArrayI(sizes)})).N; " )
58
58
allops.foreach{ case (o, t, fs) =>
59
59
names.foreach{ n =>
60
- pr( s " { // Scope for operations $o collection $n" )
61
- pr( s " val x = new bench.generate.Things( ${sayArrayI(sizes)}) " )
60
+ pr( s " { // Scope for operations $o collection $n" )
61
+ pr( s " val x = new bench.generate.Things( ${sayArrayI(sizes)}) " )
62
62
parsefs(fs).foreach{ case (f, pf, ord) =>
63
63
if (ordname(n) || ! ord) {
64
- pr( """ for (i <- 0 until m) {""" )
65
- pr( s " val z = $o. $f(x.arr.c $t(i)) " )
64
+ pr( """ for (i <- 0 until m) {""" )
65
+ pr( s " val z = $o. $f(x.arr.c $t(i)) " )
66
66
if (nojname(n)) {
67
- pr( s " check(z, $o. $f(x. $n.c $t(i)), ${q}c $t $f $n ${q}+i.toString) " );
68
- pr( s " check(z, $o. $f(x. $n.i $t(i)), ${q}i $t $f $n ${q}+i.toString) " )
67
+ pr( s " check(z, $o. $f(x. $n.c $t(i)), ${q}c $t $f $n ${q}+i.toString) " );
68
+ pr( s " check(z, $o. $f(x. $n.i $t(i)), ${q}i $t $f $n ${q}+i.toString) " )
69
69
}
70
70
if (sqnname(n)) {
71
- pr( s " check(z, $o. $f(x. $n.ss $t(i)), ${q}ss $t $f $n ${q}+i.toString) " )
71
+ pr( s " check(z, $o. $f(x. $n.ss $t(i)), ${q}ss $t $f $n ${q}+i.toString) " )
72
72
if (nojname(n))
73
- pr( s " check(z, $o. $f(x. $n.zs $t(i)), ${q}zs $t $f $n ${q}+i.toString) " )
73
+ pr( s " check(z, $o. $f(x. $n.zs $t(i)), ${q}zs $t $f $n ${q}+i.toString) " )
74
74
}
75
75
if (parname(n) && pf.isDefined) {
76
- pr( s " check(z, $o. $f(x. $n.sp $t(i)), ${q}sp $t $f $n ${q}+i.toString) " )
76
+ pr( s " check(z, $o. $f(x. $n.sp $t(i)), ${q}sp $t $f $n ${q}+i.toString) " )
77
77
if (nojname(n))
78
- pr( s " check(z, $o. $f(x. $n.zp $t(i)), ${q}zp $t $f $n ${q}+i.toString) " )
78
+ pr( s " check(z, $o. $f(x. $n.zp $t(i)), ${q}zp $t $f $n ${q}+i.toString) " )
79
79
}
80
- pr( s " } " )
80
+ pr( s " } " )
81
81
}
82
82
}
83
- pr( s " } // End scope for operations $o collection $n" )
83
+ pr( s " } // End scope for operations $o collection $n" )
84
84
}
85
85
}
86
- pr( """ wrong.foreach(println)""" )
87
- pr( """ if (wrong.nonEmpty) sys.exit(1) """ )
88
- pr( """ }""" )
89
- pr( """ }""" )
86
+ pr( """ wrong.foreach(println)""" )
87
+ pr( """ if (wrong.nonEmpty) sys.exit(1) """ )
88
+ pr( """ }""" )
89
+ pr( """ }""" )
90
+ } match {
91
+ case Left (t) => println(" Did not successfully write file: " + target.getPath); throw t
92
+ case _ =>
93
+ }
94
+ }
95
+
96
+ def quickBenchWithThyme (target : java.io.File , sizes : Option [Array [Int ]]) {
97
+ val q = " \" "
98
+ if (target.exists) throw new java.io.IOException (" Generator will not write to existing file: " + target.getPath)
99
+ writeTo(target){ pr =>
100
+ pr( """ package bench.test""" )
101
+ pr( """ """ )
102
+ pr( """ import bench.generate._, bench.operate._, bench.generate.EnableIterators._""" )
103
+ pr( """ import scala.compat.java8.StreamConverters._""" )
104
+ pr( """ import ichi.bench.Thyme""" )
105
+ pr( """ """ )
106
+ pr( """ object Agreement {""" )
107
+ pr( """ def run() {""" )
108
+ pr( """ val th = Thyme.warmed()""" )
109
+ pr( s " val m = (new bench.generate.Things( ${sayArrayI(sizes)})).N; " )
110
+ pr( """ def timings[A](x: bench.generate.Things, op: Int => A, name: String) {""" )
111
+ pr( """ val ts = new collection.mutable.ArrayBuffer[(Double, Double, Double)]""" )
112
+ pr( """ for (i <- 0 until m) {""" )
113
+ pr( """ val b = Thyme.Benched.empty""" )
114
+ pr( """ val a = th.bench(op(i))(b)""" )
115
+ pr( """ if (a == null) ts += ((Double.NaN, Double.NaN, Double.NaN))""" )
116
+ pr( """ else ts += ((b.runtime * 1e6, b.runtimeCI95._1 * 1e6, b.runtimeCI95._2 * 1e6)""" )
117
+ pr( """ }""" )
118
+ pr( """ val sb = new StringBuilder""" )
119
+ pr( """ sb ++= name + $q: $q""" )
120
+ pr( """ if (sb.length < 36) sb ++= $q $q * (36 - sb.length)""" )
121
+ pr( """ ts.foreach{ case (c, lo, hi) =>""" )
122
+ pr( """ sb ++= $q $q""" )
123
+ pr( """ sb ++= ${q}12.4f${q}.format(c)""" )
124
+ pr( """ sb ++= ${q}12.4f${q}.format(lo)""" )
125
+ pr( """ sb ++= ${q}12.4f${q}.format(hi)""" )
126
+ pr( """ }""" )
127
+ pr( """ println(sb.result)""" )
128
+ pr( """ }""" )
129
+ allops.foreach{ case (o, t, fs) =>
130
+ names.foreach{ n =>
131
+ pr( s " { // Scope for operations $o collection $n" )
132
+ pr( s " val x = new bench.generate.Things( ${sayArrayI(sizes)}) " )
133
+ parsefs(fs).foreach{ case (f, pf, ord) =>
134
+ if (ordname(n) || ! ord) {
135
+ if (nojname(n)) {
136
+ pr( s " timings(x, i => $o. $f(x. $n.c $t(i)), ${q}c $t $f $n ${q}+i.toString) " );
137
+ pr( s " timings(x, i => $o. $f(x. $n.i $t(i)), ${q}i $t $f $n ${q}+i.toString) " )
138
+ }
139
+ if (sqnname(n)) {
140
+ pr( s " timings(x, i => $o. $f(x. $n.ss $t(i)), ${q}ss $t $f $n ${q}+i.toString) " )
141
+ if (nojname(n))
142
+ pr( s " timings(x, i => $o. $f(x. $n.zs $t(i)), ${q}zs $t $f $n ${q}+i.toString) " )
143
+ }
144
+ if (parname(n) && pf.isDefined) {
145
+ pr( s " timings(x, i => $o. $f(x. $n.sp $t(i)), ${q}sp $t $f $n ${q}+i.toString) " )
146
+ if (nojname(n))
147
+ pr( s " timings(x, i => $o. $f(x. $n.zp $t(i)), ${q}zp $t $f $n ${q}+i.toString) " )
148
+ }
149
+ pr( s " } " )
150
+ }
151
+ }
152
+ pr( s " } // End scope for operations $o collection $n" )
153
+ }
154
+ }
155
+ pr( """ }""" )
156
+ pr( """ }""" )
90
157
} match {
91
158
case Left (t) => println(" Did not successfully write file: " + target.getPath); throw t
92
159
case _ =>
0 commit comments