From 1f6502c984739156e62a278c097b7fb828695e3c Mon Sep 17 00:00:00 2001 From: steveatgh Date: Thu, 14 Sep 2023 10:38:00 -0700 Subject: [PATCH 1/2] test both vector species if on 512-bit-capable platform --- build.gradle | 21 ++++++++++++++++++++- gradle.properties | 1 + 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 gradle.properties diff --git a/build.gradle b/build.gradle index 4e01afa..0b3d6b7 100644 --- a/build.gradle +++ b/build.gradle @@ -2,6 +2,7 @@ import me.champeau.jmh.JmhBytecodeGeneratorTask import org.gradle.internal.os.OperatingSystem import org.ajoberstar.grgit.Grgit import java.time.Duration +import jdk.incubator.vector.ByteVector plugins { id 'java' @@ -67,7 +68,7 @@ tasks.register('downloadTestData') { } } -test { +tasks.register('testPreferred', Test) { dependsOn downloadTestData useJUnitPlatform() jvmArgs += [ @@ -76,6 +77,24 @@ test { ] } +tasks.register('test256', Test) { + dependsOn downloadTestData + useJUnitPlatform() + onlyIf() { + ByteVector.SPECIES_PREFERRED == ByteVector.SPECIES_512 + } + jvmArgs += [ + '--add-modules', 'jdk.incubator.vector', + '-Xmx2g', + '-XX:UseAVX=2' + ] +} + +test { + dependsOn 'testPreferred' + dependsOn 'test256' +} + tasks.withType(JmhBytecodeGeneratorTask).configureEach { jvmArgs.set(["--add-modules=jdk.incubator.vector"]) } diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..272a338 --- /dev/null +++ b/gradle.properties @@ -0,0 +1 @@ +org.gradle.jvmargs="--add-modules=jdk.incubator.vector" From 61ecf968645f38fc84f4d530ddfe8b63c45eaff8 Mon Sep 17 00:00:00 2001 From: steveatgh Date: Mon, 18 Sep 2023 12:14:18 -0700 Subject: [PATCH 2/2] test both species on all platforms --- build.gradle | 17 +++++++++-------- .../java/org/simdjson/StructuralIndexer.java | 8 +++++++- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index 7a04bad..c88fd88 100644 --- a/build.gradle +++ b/build.gradle @@ -70,34 +70,35 @@ tasks.register('downloadTestData') { } } -tasks.register('testPreferred', Test) { +tasks.register('test256', Test) { dependsOn downloadTestData useJUnitPlatform() jvmArgs += [ '--add-modules', 'jdk.incubator.vector', - '-Xmx2g' + '-Xmx2g', + '-Dorg.simdjson.species=256' ] testLogging { events 'PASSED', 'SKIPPED', 'FAILED', 'STANDARD_OUT', 'STANDARD_ERROR' } } -tasks.register('test256', Test) { +tasks.register('test512', Test) { dependsOn downloadTestData useJUnitPlatform() - onlyIf() { - ByteVector.SPECIES_PREFERRED == ByteVector.SPECIES_512 - } jvmArgs += [ '--add-modules', 'jdk.incubator.vector', '-Xmx2g', - '-XX:UseAVX=2' + '-Dorg.simdjson.species=512' ] + testLogging { + events 'PASSED', 'SKIPPED', 'FAILED', 'STANDARD_OUT', 'STANDARD_ERROR' + } } test { - dependsOn 'testPreferred' dependsOn 'test256' + dependsOn 'test512' } tasks.withType(JmhBytecodeGeneratorTask).configureEach { diff --git a/src/main/java/org/simdjson/StructuralIndexer.java b/src/main/java/org/simdjson/StructuralIndexer.java index cb0201e..c0eb4b0 100644 --- a/src/main/java/org/simdjson/StructuralIndexer.java +++ b/src/main/java/org/simdjson/StructuralIndexer.java @@ -12,7 +12,13 @@ class StructuralIndexer { static final int N_CHUNKS; static { - SPECIES = ByteVector.SPECIES_PREFERRED; + String species = System.getProperty("org.simdjson.species", "preferred"); + SPECIES = switch(species) { + case "preferred" -> ByteVector.SPECIES_PREFERRED; + case "512" -> ByteVector.SPECIES_512; + case "256" -> ByteVector.SPECIES_256; + default -> throw new IllegalArgumentException("Unsupported vector species: " + species); + }; N_CHUNKS = 64 / SPECIES.vectorByteSize(); if (SPECIES != ByteVector.SPECIES_256 && SPECIES != ByteVector.SPECIES_512) { throw new IllegalArgumentException("Unsupported vector species: " + SPECIES);