Skip to content

Instantly share code, notes, and snippets.

@deanwampler
Last active June 27, 2021 16:40
Show Gist options
  • Save deanwampler/e72dc53ba2d4a459941bfe47dc72cbff to your computer and use it in GitHub Desktop.
Save deanwampler/e72dc53ba2d4a459941bfe47dc72cbff to your computer and use it in GitHub Desktop.
import scala.quoted.*
@main def InlinePerf(numberOfTrials: Int*) =
class Thing(var count: Int, var label: String)
def trial(n: Int) =
val startEnabled = System.nanoTime()
val thing1 = new Thing(0, "label")
for i <- 1 to n
do
invariantEnabled(thing1.label == "label") {
thing1.count = (i * 2) % 3
}
val endEnabled = System.nanoTime()
val startDisabled = System.nanoTime()
val thing2 = new Thing(0, "label")
for i <- 1 to n
do
invariantDisabled(thing2.label == "label") {
thing2.count = (i * 2) % 3
}
val endDisabled = System.nanoTime()
val startNoInline = System.nanoTime()
val thing3 = new Thing(0, "label")
for i <- 1 to n
do
invariantNoInline(thing3.label == "label") {
thing3.count = (i * 2) % 3
}
val endNoInline = System.nanoTime()
val diffEnabled = endEnabled - startEnabled
val diffDisabled = endDisabled - startDisabled
val diffNoInline = endNoInline - startNoInline
val percent1 = (100.0 * diffEnabled)/diffDisabled
val percent2 = (100.0 * diffNoInline)/diffDisabled
println(f"| $n%6d | $diffEnabled%8d | $diffDisabled%8d | $percent1%7.2f%% " +
f"| $diffNoInline%8d | $percent2%7.2f%% |")
header
footer
if numberOfTrials.size == 0 then trial(1000)
else for n <- numberOfTrials do trial(n)
footer
def header =
println("| N | Elapsed Times (nanos) |")
println("| | Enabled | Disabled | E/D% | NoInline | N/D% |")
def footer =
println("|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++|")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment