diff --git a/.github/workflows/benchmarks.yml b/.github/workflows/benchmarks.yml index dd2d2911..e20ec605 100644 --- a/.github/workflows/benchmarks.yml +++ b/.github/workflows/benchmarks.yml @@ -12,7 +12,7 @@ jobs: os: [ubuntu-latest] jvm: [17,19] benchmark: [BindingsBenchmarks, TransferBenchmarks] - jit: [NoJIT, Standard] + jit: [disabled, standard] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 @@ -21,7 +21,7 @@ jobs: with: jvm: temurin:1.${{ matrix.jvm }} apps: mill - - run: mill j${{ matrix.jvm }}.benchmarks.test -f1 -wi 2 -i 2 -o j${{ matrix.jvm }}-${{ matrix.os }}.bench -rff j${{ matrix.jvm }}-${{ matrix.os }}.json -rf json .*${{ matrix.benchmark }}${{ matrix.jit }}.* + - run: mill j${{ matrix.jvm }}.benchmarks.test -jvmArgsAppend "-Dslinc.jitc.mode=${{ matrix.jit }}" -f1 -wi 2 -i 2 -o j${{ matrix.jvm }}-${{ matrix.os }}.bench -rff j${{ matrix.jvm }}-${{ matrix.os }}.json -rf json .*${{ matrix.benchmark }}${{ matrix.jvm }}.* - run: scala-cli run scripts/PublishBenchmarkReport.sc -- "Java ${{ matrix.jvm}}" ${{ matrix.os }} out/j${{ matrix.jvm }}/benchmarks/test/jmhRun.dest/j${{ matrix.jvm }}-${{ matrix.os }}.json ${{ matrix.benchmark }} ${{ matrix.jit }} >> $GITHUB_STEP_SUMMARY - uses: actions/upload-artifact@v3 with: diff --git a/core/benchmarks/test/src/fr/hammons/slinc/TransferBenchmarkShape.scala b/core/benchmarks/test/src/fr/hammons/slinc/TransferBenchmarkShape.scala index ec431f4b..67f4f0a6 100644 --- a/core/benchmarks/test/src/fr/hammons/slinc/TransferBenchmarkShape.scala +++ b/core/benchmarks/test/src/fr/hammons/slinc/TransferBenchmarkShape.scala @@ -1,19 +1,20 @@ package fr.hammons.slinc +import fr.hammons.slinc.types.CLong import org.openjdk.jmh.annotations.{Scope as _, *} -case class A(a: Int, b: B, c: Int) -case class B(a: Int, b: Int) +case class A(a: Int, b: B, c: Int) derives Struct +case class B(a: Int, b: Int) derives Struct +@Warmup(iterations = 5) +@Measurement(iterations = 5) trait TransferBenchmarkShape(val s: Slinc): import s.{given, *} - case class C(a: Int, b: D, c: Int) - case class D(a: Int, b: Int) - given Struct[A] = Struct.derived - given Struct[B] = Struct.derived - given Struct[C] = Struct.derived - given Struct[D] = Struct.derived + case class C(a: Int, b: D, c: Int) derives Struct + case class D(a: CLong, b: Int) derives Struct + case class E(a: Int, b: Int) derives Struct + case class F(a: Int, e: E, c: Int) derives Struct val aPtr = Scope.global { Ptr.blank[A] @@ -25,7 +26,7 @@ trait TransferBenchmarkShape(val s: Slinc): Ptr.blank[C] } - val c = C(1, D(2, 3), 4) + val c = C(1, D(CLong(2), 3), 4) @Benchmark def topLevelRead = @@ -50,7 +51,37 @@ trait TransferBenchmarkShape(val s: Slinc): ) @Benchmark - def allocateIntPointer = + def allocatePrimitivePointer = Scope.confined( Ptr.copy(3) ) + + @Benchmark + def allocateAliasPointer = + Scope.confined( + Ptr.copy(CLong(3)) + ) + + @Benchmark + def allocateComplexWAliasInnerStructPointer = + Scope.confined( + Ptr.copy(C(1, D(CLong(2), 3), 4)) + ) + + @Benchmark + def allocateSimpleWAliasInnerStructPointer = + Scope.confined( + Ptr.copy(D(CLong(2), 3)) + ) + + @Benchmark + def allocatePtrFromArray = + Scope.confined( + Ptr.copy(Array(1, 2, 3)) + ) + + @Benchmark + def allocatePtrFromCLongArray = + Scope.confined( + Ptr.copy(Array(CLong(1), CLong(2), CLong(3))) + ) diff --git a/j17/benchmarks/test/src/fr/hammons/slinc/BindingsBenchmarksNoJIT.scala b/j17/benchmarks/test/src/fr/hammons/slinc/BindingsBenchmarks17.scala similarity index 84% rename from j17/benchmarks/test/src/fr/hammons/slinc/BindingsBenchmarksNoJIT.scala rename to j17/benchmarks/test/src/fr/hammons/slinc/BindingsBenchmarks17.scala index 483e3a55..dc113fd0 100644 --- a/j17/benchmarks/test/src/fr/hammons/slinc/BindingsBenchmarksNoJIT.scala +++ b/j17/benchmarks/test/src/fr/hammons/slinc/BindingsBenchmarks17.scala @@ -13,4 +13,4 @@ import java.util.concurrent.TimeUnit ) ) @OutputTimeUnit(TimeUnit.MICROSECONDS) -class BindingsBenchmarksNoJIT extends BindingsBenchmarkShape(Slinc17.noJit) +class BindingsBenchmarks17 extends BindingsBenchmarkShape(Slinc17.noJit) diff --git a/j17/benchmarks/test/src/fr/hammons/slinc/BindingsBenchmarksStandard.scala b/j17/benchmarks/test/src/fr/hammons/slinc/BindingsBenchmarksStandard.scala deleted file mode 100644 index 9ca1c1c9..00000000 --- a/j17/benchmarks/test/src/fr/hammons/slinc/BindingsBenchmarksStandard.scala +++ /dev/null @@ -1,16 +0,0 @@ -package fr.hammons.slinc - -import org.openjdk.jmh.annotations.*, Mode.{SingleShotTime, Throughput} -import java.util.concurrent.TimeUnit - -@State(Scope.Thread) -@BenchmarkMode(Array(Throughput, SingleShotTime)) -@Fork( - jvmArgsAppend = Array( - "--add-modules=jdk.incubator.foreign", - "--enable-native-access=ALL-UNNAMED" - // "-XX:ActiveProcessorCount=1", - ) -) -@OutputTimeUnit(TimeUnit.MICROSECONDS) -class BindingsBenchmarksStandard extends BindingsBenchmarkShape(Slinc17.default) diff --git a/j17/benchmarks/test/src/fr/hammons/slinc/TransferBenchmarksNoJIT.scala b/j17/benchmarks/test/src/fr/hammons/slinc/TransferBenchmarks17.scala similarity index 84% rename from j17/benchmarks/test/src/fr/hammons/slinc/TransferBenchmarksNoJIT.scala rename to j17/benchmarks/test/src/fr/hammons/slinc/TransferBenchmarks17.scala index 8f0e0102..e09200fc 100644 --- a/j17/benchmarks/test/src/fr/hammons/slinc/TransferBenchmarksNoJIT.scala +++ b/j17/benchmarks/test/src/fr/hammons/slinc/TransferBenchmarks17.scala @@ -13,4 +13,4 @@ import java.util.concurrent.TimeUnit ) ) @OutputTimeUnit(TimeUnit.MICROSECONDS) -class TransferBenchmarksNoJIT extends TransferBenchmarkShape(Slinc17.noJit) +class TransferBenchmarks17 extends TransferBenchmarkShape(Slinc17.noJit) diff --git a/j17/benchmarks/test/src/fr/hammons/slinc/TransferBenchmarksStandard.scala b/j17/benchmarks/test/src/fr/hammons/slinc/TransferBenchmarksStandard.scala deleted file mode 100644 index deecb9f1..00000000 --- a/j17/benchmarks/test/src/fr/hammons/slinc/TransferBenchmarksStandard.scala +++ /dev/null @@ -1,16 +0,0 @@ -package fr.hammons.slinc - -import org.openjdk.jmh.annotations.*, Mode.{SingleShotTime, Throughput} -import java.util.concurrent.TimeUnit - -@State(Scope.Thread) -@BenchmarkMode(Array(Throughput, SingleShotTime)) -@Fork( - jvmArgsAppend = Array( - "--add-modules=jdk.incubator.foreign", - "--enable-native-access=ALL-UNNAMED" - // "-XX:ActiveProcessorCount=1", - ) -) -@OutputTimeUnit(TimeUnit.MICROSECONDS) -class TransferBenchmarksStandard extends TransferBenchmarkShape(Slinc17.default) diff --git a/j17/src/fr/hammons/slinc/Slinc17.scala b/j17/src/fr/hammons/slinc/Slinc17.scala index 7b27b641..995f40d6 100644 --- a/j17/src/fr/hammons/slinc/Slinc17.scala +++ b/j17/src/fr/hammons/slinc/Slinc17.scala @@ -20,8 +20,6 @@ class Slinc17(using @SlincImpl(17) object Slinc17: - private lazy val compiler = - scala.quoted.staging.Compiler.make(getClass().getClassLoader().nn) private[slinc] lazy val linker = CLinker.getInstance().nn val default = Slinc17() val noJit = Slinc17() diff --git a/j19/benchmarks/test/src/fr/hammons/slinc/TransferBenchmarksNoJIT.scala b/j19/benchmarks/test/src/fr/hammons/slinc/BindingsBenchmarks19.scala similarity index 83% rename from j19/benchmarks/test/src/fr/hammons/slinc/TransferBenchmarksNoJIT.scala rename to j19/benchmarks/test/src/fr/hammons/slinc/BindingsBenchmarks19.scala index 9c6f83b5..cb2b43c9 100644 --- a/j19/benchmarks/test/src/fr/hammons/slinc/TransferBenchmarksNoJIT.scala +++ b/j19/benchmarks/test/src/fr/hammons/slinc/BindingsBenchmarks19.scala @@ -13,4 +13,4 @@ import java.util.concurrent.TimeUnit ) ) @OutputTimeUnit(TimeUnit.MICROSECONDS) -class TransferBenchmarksNoJIT extends TransferBenchmarkShape(Slinc19.noJit) +class BindingsBenchmarks19 extends BindingsBenchmarkShape(Slinc19.noJit) diff --git a/j19/benchmarks/test/src/fr/hammons/slinc/BindingsBenchmarksStandard.scala b/j19/benchmarks/test/src/fr/hammons/slinc/BindingsBenchmarksStandard.scala deleted file mode 100644 index 1772a014..00000000 --- a/j19/benchmarks/test/src/fr/hammons/slinc/BindingsBenchmarksStandard.scala +++ /dev/null @@ -1,16 +0,0 @@ -package fr.hammons.slinc - -import org.openjdk.jmh.annotations.*, Mode.{SingleShotTime, Throughput} -import java.util.concurrent.TimeUnit - -@State(Scope.Thread) -@BenchmarkMode(Array(Throughput, SingleShotTime)) -@Fork( - jvmArgsAppend = Array( - "--enable-preview", - "--enable-native-access=ALL-UNNAMED" - // "-XX:ActiveProcessorCount=1", - ) -) -@OutputTimeUnit(TimeUnit.MICROSECONDS) -class BindingsBenchmarksStandard extends BindingsBenchmarkShape(Slinc19.default) diff --git a/j19/benchmarks/test/src/fr/hammons/slinc/BindingsBenchmarksNoJIT.scala b/j19/benchmarks/test/src/fr/hammons/slinc/TransferBenchmarks19.scala similarity index 83% rename from j19/benchmarks/test/src/fr/hammons/slinc/BindingsBenchmarksNoJIT.scala rename to j19/benchmarks/test/src/fr/hammons/slinc/TransferBenchmarks19.scala index 2eb6beac..37ca86ad 100644 --- a/j19/benchmarks/test/src/fr/hammons/slinc/BindingsBenchmarksNoJIT.scala +++ b/j19/benchmarks/test/src/fr/hammons/slinc/TransferBenchmarks19.scala @@ -13,4 +13,4 @@ import java.util.concurrent.TimeUnit ) ) @OutputTimeUnit(TimeUnit.MICROSECONDS) -class BindingsBenchmarksNoJIT extends BindingsBenchmarkShape(Slinc19.noJit) +class TransferBenchmarks19 extends TransferBenchmarkShape(Slinc19.noJit) diff --git a/j19/benchmarks/test/src/fr/hammons/slinc/TransferBenchmarksStandard.scala b/j19/benchmarks/test/src/fr/hammons/slinc/TransferBenchmarksStandard.scala deleted file mode 100644 index 7c5ce7b9..00000000 --- a/j19/benchmarks/test/src/fr/hammons/slinc/TransferBenchmarksStandard.scala +++ /dev/null @@ -1,16 +0,0 @@ -package fr.hammons.slinc - -import org.openjdk.jmh.annotations.*, Mode.{SingleShotTime, Throughput} -import java.util.concurrent.TimeUnit - -@State(Scope.Thread) -@BenchmarkMode(Array(Throughput, SingleShotTime)) -@Fork( - jvmArgsAppend = Array( - "--enable-preview", - "--enable-native-access=ALL-UNNAMED" - // "-XX:ActiveProcessorCount=1", - ) -) -@OutputTimeUnit(TimeUnit.MICROSECONDS) -class TransferBenchmarksStandard extends TransferBenchmarkShape(Slinc19.default)