Skip to content

Commit

Permalink
Warmup Lua interpreter before benchmarks
Browse files Browse the repository at this point in the history
  • Loading branch information
SquidDev committed Feb 18, 2024
1 parent b25b17d commit 8f303b3
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/test/java/cc/tweaked/cobalt/benchmark/BenchmarkFull.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
import org.openjdk.jmh.runner.options.TimeValue;
import org.openjdk.jmh.runner.options.WarmupMode;

/**
* Runs all benchmarks within the {@code cc.tweaked.cobalt.benchmark} package.
Expand All @@ -17,6 +18,8 @@ private BenchmarkFull() {
public static void main(String... args) throws RunnerException {
Options opts = new OptionsBuilder()
.include("cc.tweaked.cobalt.benchmark.*")
.exclude("cc.tweaked.cobalt.benchmark.WarmupBenchmarks.*")
.includeWarmup("cc.tweaked.cobalt.benchmark.WarmupBenchmarks.*")
.warmupIterations(3)
.warmupTime(TimeValue.milliseconds(1000))
.measurementIterations(5)
Expand Down
54 changes: 54 additions & 0 deletions src/test/java/cc/tweaked/cobalt/benchmark/WarmupBenchmarks.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package cc.tweaked.cobalt.benchmark;

import org.openjdk.jmh.annotations.Measurement;
import org.openjdk.jmh.annotations.Warmup;
import org.squiddev.cobalt.Constants;

import java.util.List;
import java.util.concurrent.TimeUnit;

/**
* Generates a Lua program which attempts to execute all parts of the Lua interpreter, ensuring that our actual
* benchmarks don't overspecialise for a specific case.
*/
@Warmup(time = 2, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 0)
public class WarmupBenchmarks extends LuaBenchmark {
public WarmupBenchmarks() {
super(makeFile(), s -> Constants.NONE);
}

private static String makeFile() {
var out = new StringBuilder();
out.append("local x, y, _ = 5.2, '123'\n");

// Arithmetic and Lua operations
for (var op : List.of("+", "-", "*", "/", "%", "^", "..")) {
addOperation(out, "x", op, "x");
addOperation(out, "x", op, "y");
addOperation(out, "x", op, "0");
addOperation(out, "0", op, "x");
}

// Comparison operations
for (var op : List.of("==", "<", "<=")) {
addOperation(out, "x", op, "x");
addOperation(out, "x", op, "0");
addOperation(out, "0", op, "x");

addOperation(out, "y", op, "y");
addOperation(out, "y", op, "''");
addOperation(out, "''", op, "y");
}

// Basic control flow
out.append("for i = 1, 10 do _ = 0 end\n");
out.append("for k in pairs(_G) do _ = _G[k] end\n");

return out.toString();
}

private static void addOperation(StringBuilder out, String lhs, String op, String rhs) {
out.append("_ = ").append(lhs).append(" ").append(op).append(" ").append(rhs).append("\n");
}
}

0 comments on commit 8f303b3

Please sign in to comment.