Add FloatArray interface to allow easy float[] vector extraction from MemorySegmentVectorFloat and ArrayVectorFloat instances #88
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Run Compaction Bench | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| dataset: | |
| description: 'Dataset name passed to CompactorBenchmark (-p datasetNames)' | |
| required: false | |
| default: 'ada002-100k' | |
| branches: | |
| description: 'Space-separated list of branches to benchmark' | |
| required: false | |
| default: 'main' | |
| pull_request: | |
| types: [opened, synchronize, ready_for_review] | |
| branches: | |
| - main | |
| paths: | |
| - '**/src/main/java/**' | |
| - 'pom.xml' | |
| - '**/pom.xml' | |
| - '.github/workflows/run-compaction.yml' | |
| jobs: | |
| # Job to generate the matrix configuration | |
| generate-matrix: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| matrix: ${{ steps.set-matrix.outputs.matrix }} | |
| steps: | |
| - name: Generate matrix | |
| id: set-matrix | |
| run: | | |
| if [[ "${{ github.event_name }}" == "pull_request" ]]; then | |
| BRANCHES='["main", "${{ github.ref }}"]' | |
| elif [[ "${{ github.event_name }}" == "workflow_dispatch" && -n "${{ github.event.inputs.branches }}" ]]; then | |
| BRANCHES_INPUT="${{ github.event.inputs.branches }}" | |
| BRANCHES="[" | |
| for branch in $BRANCHES_INPUT; do | |
| if [[ "$BRANCHES" != "[" ]]; then | |
| BRANCHES="$BRANCHES, " | |
| fi | |
| BRANCHES="$BRANCHES\"$branch\"" | |
| done | |
| BRANCHES="$BRANCHES]" | |
| else | |
| BRANCHES='["main"]' | |
| fi | |
| echo "matrix={\"jdk\":[24],\"isa\":[\"isa-avx512f\"],\"branch\":$BRANCHES}" >> $GITHUB_OUTPUT | |
| test-compaction: | |
| needs: generate-matrix | |
| strategy: | |
| matrix: ${{ fromJSON(needs.generate-matrix.outputs.matrix) }} | |
| runs-on: ${{ matrix.isa }} | |
| steps: | |
| - name: Set up GCC | |
| run: sudo apt install -y gcc | |
| - name: Install Meson and Ninja | |
| run: | | |
| sudo apt update && sudo apt install -y meson ninja-build | |
| - uses: actions/checkout@v4 | |
| - name: Set up JDK ${{ matrix.jdk }} | |
| uses: actions/setup-java@v3 | |
| with: | |
| java-version: ${{ matrix.jdk }} | |
| distribution: temurin | |
| cache: maven | |
| - name: Checkout branch | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ matrix.branch }} | |
| fetch-depth: 0 | |
| - name: Initialize Git Submodules | |
| run: git submodule update --init | |
| - name: Build branch | |
| run: mvn -B -Punix-amd64-profile package --file pom.xml | |
| - name: Run CompactorBenchmark | |
| id: run-benchmark | |
| run: | | |
| TOTAL_MEM_GB=$(free -g | awk '/^Mem:/ {print $2}') | |
| if [[ -z "$TOTAL_MEM_GB" ]] || [[ "$TOTAL_MEM_GB" -le 0 ]]; then | |
| TOTAL_MEM_GB=16 | |
| fi | |
| HALF_MEM_GB=$((TOTAL_MEM_GB / 2)) | |
| if [[ "$HALF_MEM_GB" -lt 1 ]]; then | |
| HALF_MEM_GB=1 | |
| fi | |
| DATASET="${{ github.event.inputs.dataset }}" | |
| if [[ -z "$DATASET" ]]; then | |
| DATASET="ada002-100k" | |
| fi | |
| SAFE_BRANCH=$(echo "${{ matrix.branch }}" | sed 's/[^A-Za-z0-9_-]/_/g') | |
| echo "safe_branch=$SAFE_BRANCH" >> $GITHUB_OUTPUT | |
| java --enable-native-access=ALL-UNNAMED --add-modules=jdk.incubator.vector \ | |
| -Djvector.experimental.enable_native_vectorization=true \ | |
| -Xmx${HALF_MEM_GB}g \ | |
| -cp benchmarks-jmh/target/compactor-benchmark.jar \ | |
| io.github.jbellis.jvector.bench.CompactorBenchmark \ | |
| -p workloadMode=PARTITION_AND_COMPACT \ | |
| -p datasetNames=$DATASET \ | |
| -p numPartitions=4 \ | |
| -p splitDistribution=FIBONACCI \ | |
| -p indexPrecision=FUSEDPQ \ | |
| -jvmArgsPrepend "-Xmx${HALF_MEM_GB}g" \ | |
| -wi 0 -i 1 -f 1 | |
| - name: Upload compaction results | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: compaction-results-${{ matrix.isa }}-jdk${{ matrix.jdk }}-${{ steps.run-benchmark.outputs.safe_branch }} | |
| path: target/benchmark-results/compactor-*/compactor-results.jsonl | |
| if-no-files-found: warn |