Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
116 commits
Select commit Hold shift + click to select a range
d963762
copy over prior fusion work
ejmeitz Apr 8, 2026
0da8ff2
front-end for expression parsing
ejmeitz Apr 24, 2026
eeeb752
remove CUDA ext
ejmeitz Apr 25, 2026
02aa7cf
Merge remote-tracking branch 'origin/main' into fusion-again
ejmeitz Apr 25, 2026
1b16ab1
integrate things into broadcast machinery more
ejmeitz Apr 27, 2026
9e50bc6
mostly there
ejmeitz Apr 27, 2026
1daf211
add PTX broadcast task
ejmeitz Apr 28, 2026
6bdec7a
clean up cuda code a bit
ejmeitz Apr 28, 2026
c794e4e
dev build works
ejmeitz May 2, 2026
680c13f
change kernel to not take Broadcast object
ejmeitz May 12, 2026
584cb30
Merge branch 'main' into fusion-again
krasow May 13, 2026
6ae32dc
broadcast fusion support.
krasow May 14, 2026
50b08a2
gray scott benchmark
ejmeitz May 22, 2026
11a1ee6
handle exponentiation
ejmeitz Jun 1, 2026
a815494
start benchmarking harness
ejmeitz Jun 1, 2026
0465d8c
clean some thing sup
ejmeitz Jun 2, 2026
12373c7
add include
ejmeitz Jun 2, 2026
513d9cd
Merge branch 'develop' into HEAD
krasow Jun 2, 2026
73fbfb2
run benchmarks modifications
krasow Jun 3, 2026
cbd9a3a
bring back T config
krasow Jun 3, 2026
fcfd749
modularize some stuff. run.jl (does all) -> run_benchmark.sh (shell …
krasow Jun 3, 2026
87a9f90
support multi list zipping configs
krasow Jun 3, 2026
b312512
add benchmark registration seperating different benchmarks into indiv…
krasow Jun 3, 2026
871b5a5
add notion of variants
krasow Jun 3, 2026
83b5467
adjust includes and using cuNumeric.
krasow Jun 3, 2026
63cdf9b
remove variants
ejmeitz Jun 3, 2026
866892d
setup things to use CUDACore too
ejmeitz Jun 3, 2026
00ed6ba
kinda runs
ejmeitz Jun 3, 2026
92d8ac3
add a python benchmarks, install_cupynumeric.sh, and python benchmark…
krasow Jun 4, 2026
c068593
cuda -> cudajl as name
krasow Jun 4, 2026
3679fc9
patch cudajl run path for cunumeric specific tests
krasow Jun 4, 2026
943b1ec
update readme
krasow Jun 4, 2026
b5fd53f
merge
krasow Jun 4, 2026
23728a4
add fusion into benchmarking
krasow Jun 4, 2026
a0bcd58
restore toml
krasow Jun 4, 2026
2136afd
add verbose mode
krasow Jun 4, 2026
31900c2
fix compiler warning
krasow Jun 4, 2026
a3b327b
modify script for numpy
krasow Jun 4, 2026
f2fe7ef
update scaling test in benchmarks.toml
krasow Jun 4, 2026
b2c3453
remove f64
krasow Jun 4, 2026
91d33eb
comment breaks parsing
krasow Jun 4, 2026
73718c4
set manual task for cuda ptx
krasow Jun 5, 2026
3f77429
update GC memory.jl to only trigger if memory pressure is actually ch…
krasow Jun 5, 2026
7b382a6
Merge branch 'auto-gc-patch' into benchmark-fusion-again
krasow Jun 5, 2026
f64a4f5
scoping lifetime analysis on broadcast expr
krasow Jun 5, 2026
2c94674
cleanup
krasow Jun 5, 2026
0c07b23
update grayscott benchmark
krasow Jun 10, 2026
564b070
debug: add printers for lifetime analysis and broadcast kernel fusion…
krasow Jul 9, 2026
7608e8a
eagerly delete intermedaites in several places (OOM IS GONE!)
ejmeitz Jul 19, 2026
c6edabc
unfused tests pass
ejmeitz Jul 19, 2026
7212334
fix axpy test
ejmeitz Jul 19, 2026
b2ac714
@task_scope macro expand
krasow Jul 20, 2026
4e08719
hack: add local partitioner julia mapping phase
krasow Jul 21, 2026
b9322f9
Revert "hack: add local partitioner julia mapping phase"
ejmeitz Jul 22, 2026
ea1a885
Fix multi-GPU fused broadcast by deriving launch dims from each GPU's…
ejmeitz Jul 22, 2026
a77bd4d
remove gif
ejmeitz Jul 22, 2026
441a2c1
add ptx cache tests
ejmeitz Jul 22, 2026
403b3d9
Fix fused broadcast correctness for scalars and strided views.
ejmeitz Jul 22, 2026
7638b46
Enable fused broadcast on strided slices via CuStridedDeviceArray.
ejmeitz Jul 24, 2026
6f7101c
Attach Julia Arrays as row-major Legate stores.
ejmeitz Jul 24, 2026
4b88b2e
copy over prior fusion work
ejmeitz Apr 8, 2026
e9e3e98
front-end for expression parsing
ejmeitz Apr 24, 2026
cd70168
remove CUDA ext
ejmeitz Apr 25, 2026
91e52d3
integrate things into broadcast machinery more
ejmeitz Apr 27, 2026
0db7755
mostly there
ejmeitz Apr 27, 2026
33c4327
add PTX broadcast task
ejmeitz Apr 28, 2026
f948e66
clean up cuda code a bit
ejmeitz Apr 28, 2026
9c49c32
dev build works
ejmeitz May 2, 2026
383c06d
change kernel to not take Broadcast object
ejmeitz May 12, 2026
ba263aa
broadcast fusion support.
krasow May 14, 2026
41c34fc
handle exponentiation
ejmeitz Jun 1, 2026
0647a2e
add fusion into benchmarking
krasow Jun 4, 2026
21fb20f
restore toml
krasow Jun 4, 2026
7fd9afe
add verbose mode
krasow Jun 4, 2026
d0c258a
fix compiler warning
krasow Jun 4, 2026
3e85367
modify script for numpy
krasow Jun 4, 2026
9cd3e3f
update scaling test in benchmarks.toml
krasow Jun 4, 2026
ce0d74d
remove f64
krasow Jun 4, 2026
92734ff
comment breaks parsing
krasow Jun 4, 2026
716424d
set manual task for cuda ptx
krasow Jun 5, 2026
6a79a84
update GC memory.jl to only trigger if memory pressure is actually ch…
krasow Jun 5, 2026
9493d07
scoping lifetime analysis on broadcast expr
krasow Jun 5, 2026
39e8b5b
update grayscott benchmark
krasow Jun 10, 2026
bae7ce8
debug: add printers for lifetime analysis and broadcast kernel fusion…
krasow Jul 9, 2026
fa9bb60
eagerly delete intermedaites in several places (OOM IS GONE!)
ejmeitz Jul 19, 2026
c312b2a
unfused tests pass
ejmeitz Jul 19, 2026
6a0d943
fix axpy test
ejmeitz Jul 19, 2026
96c344b
@task_scope macro expand
krasow Jul 20, 2026
12594ff
hack: add local partitioner julia mapping phase
krasow Jul 21, 2026
b7dacb0
Revert "hack: add local partitioner julia mapping phase"
ejmeitz Jul 22, 2026
19687aa
Fix multi-GPU fused broadcast by deriving launch dims from each GPU's…
ejmeitz Jul 22, 2026
1da3626
remove gif
ejmeitz Jul 22, 2026
82c5fd7
add ptx cache tests
ejmeitz Jul 22, 2026
a0d1579
Fix fused broadcast correctness for scalars and strided views.
ejmeitz Jul 22, 2026
93aa0b0
Enable fused broadcast on strided slices via CuStridedDeviceArray.
ejmeitz Jul 24, 2026
3502134
Attach Julia Arrays as row-major Legate stores.
ejmeitz Jul 24, 2026
9d88494
add broadcast anon function test
krasow Jul 24, 2026
7e6b112
add fusion CI
ejmeitz Jul 24, 2026
4b41f6b
Merge branch 'develop' into fusion-again
ejmeitz Jul 24, 2026
fba3419
fix conflicts
krasow Jul 24, 2026
72844f2
developer GPU CI
krasow Jul 24, 2026
3a493fe
try this
krasow Jul 24, 2026
84c115a
add cmake as dep
krasow Jul 25, 2026
e5e292d
docs update
ejmeitz Jul 26, 2026
7abe199
update docs CI builds
ejmeitz Jul 26, 2026
364641b
build docs on most pushes
ejmeitz Jul 26, 2026
bb5799c
Remove Docs wrapper_changed skip so Documentation always runs.
ejmeitz Jul 26, 2026
795f7b9
Run Docs on PRs and main only, not bare feature-branch pushes.
ejmeitz Jul 26, 2026
9a8c91e
clean up some docs
ejmeitz Jul 26, 2026
a274aa2
oops
ejmeitz Jul 26, 2026
94d3b2a
add logo upate docs
ejmeitz Jul 26, 2026
797761f
update path for cuda auto docs and some rewording for debugging.
krasow Jul 26, 2026
8c62e41
fix bullet points internal.md
krasow Jul 26, 2026
2ea0fcd
update CNPreference broadcast min ops
krasow Jul 27, 2026
105f871
just copy .toml
krasow Jul 27, 2026
29df2d0
guard test as user-defined broadcast func don't work with fusion disa…
krasow Jul 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 47 additions & 2 deletions .buildkite/pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,23 @@ steps:
- group: ":julia: Julia"
key: "julia"
steps:
- label: "GPU - Julia {{matrix.julia}}"
# Fusion prefs are compile-time (CNPreferences). Write LocalPreferences.toml and
# set both values before instantiate/test so each job precompiles cuNumeric
# with the intended fusion configuration.
# - fusion=on: FUSE_BROADCAST_EXPRS=true, MIN_OPS=1 (fuse single-op exprs)
# - fusion=off: FUSE_BROADCAST_EXPRS=false (MIN_OPS irrelevant)
- label: "GPU - Julia {{matrix.julia}} (fusion {{matrix.fusion}})"
plugins:
- JuliaCI/julia#v1:
version: "{{matrix.julia}}"
- jquick/pre-hook#v1.2.0:
command: "julia --project -e 'using Pkg; Pkg.resolve(); Pkg.instantiate()'"
command: |
if [ "{{matrix.fusion}}" = "on" ]; then
printf '%s\n' '[CNPreferences]' 'FUSE_BROADCAST_EXPRS = true' 'FUSE_BROADCAST_MIN_OPS = 1' > LocalPreferences.toml
else
printf '%s\n' '[CNPreferences]' 'FUSE_BROADCAST_EXPRS = false' > LocalPreferences.toml
fi
julia --project -e 'using Pkg; Pkg.resolve(); Pkg.instantiate()'
- JuliaCI/julia-test#v1:
test_args: "--quickfail"
- JuliaCI/julia-coverage#v1:
Expand Down Expand Up @@ -42,13 +53,47 @@ steps:
- "1.10"
- "1.11"
- "1.12"
fusion:
- "on"
- "off"
arch:
- "x64"
# adjustments:
# - with:
# julia: "1.12"
# soft_fail : true

- group: ":hammer: Developer"
key: "developer"
steps:
- label: "GPU - Julia 1.11 (source wrapper, fusion {{matrix.fusion}})"
plugins:
- JuliaCI/julia#v1:
version: "1.11"
command: ".buildkite/run_developer_ci.sh"
artifact_paths:
- "deps/build.log"
- "deps/*.log"
- "deps/*.err"
- "*.log"
agents:
queue: "cuda"
if: build.message !~ /\[skip tests\]/
timeout_in_minutes: 60
env:
LD_LIBRARY_PATH: ""
LEGATE_AUTO_CONFIG: "0"
LEGATE_SHOW_CONFIG: "1"
GPUTESTS: "1"
LEGATE_TEST: "1"
LEGATE_CONFIG: "--cpus 1 --gpus 1 --utility 1 --fbmem 500 --logging legate=info,level=2 --log-to-file 1"
CUNUMERIC_FUSION: "{{matrix.fusion}}"
matrix:
setup:
fusion:
- "on"
- "off"

# - group: ":computer: CUDA Versions (Julia 1.11)"
# key: "cuda"
# depends_on: "julia"
Expand Down
81 changes: 81 additions & 0 deletions .buildkite/run_developer_ci.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
#!/usr/bin/env bash

set -euo pipefail

CI_PROJECT="$(mktemp -d)"

case "${CUNUMERIC_FUSION:-}" in
on | off) ;;
*)
echo "CUNUMERIC_FUSION must be 'on' or 'off'" >&2
exit 2
;;
esac

CMAKE_VERSION="3.30.7"
CMAKE_ROOT="$(mktemp -d)"
CMAKE_INSTALLER="$CMAKE_ROOT/cmake-installer.sh"
curl --fail --silent --show-error --location \
--output "$CMAKE_INSTALLER" \
"https://github.com/Kitware/CMake/releases/download/v$CMAKE_VERSION/cmake-$CMAKE_VERSION-linux-x86_64.sh"
sh "$CMAKE_INSTALLER" --skip-license --prefix="$CMAKE_ROOT"
export PATH="$CMAKE_ROOT/bin:$PATH"
cmake --version

LEGATE_BRANCH_INPUT="${BUILDKITE_MESSAGE:-}"
if [[ "${BUILDKITE_PULL_REQUEST:-false}" =~ ^[0-9]+$ ]]; then
echo "Reading Legate branch override from pull request #$BUILDKITE_PULL_REQUEST"
PR_BODY="$(
curl --fail --silent --show-error --location \
--header "Accept: application/vnd.github+json" \
"https://api.github.com/repos/JuliaLegate/cuNumeric.jl/pulls/$BUILDKITE_PULL_REQUEST" |
python3 -c 'import json, sys; print(json.load(sys.stdin).get("body") or "")'
)"
LEGATE_BRANCH_INPUT+=$'\n'"$PR_BODY"
fi

shopt -s nocasematch
LEGATE_BRANCH=""
if [[ "$LEGATE_BRANCH_INPUT" =~ legate[-_]branch:[[:space:]]*([A-Za-z0-9._/-]+) ]]; then
LEGATE_BRANCH="${BASH_REMATCH[1]}"
fi
shopt -u nocasematch

if [[ -n "$LEGATE_BRANCH" ]]; then
LEGATE_CHECKOUT="$(mktemp -d)/Legate.jl"
echo "Using Legate.jl branch override: $LEGATE_BRANCH"
git clone --depth 1 --branch "$LEGATE_BRANCH" \
https://github.com/JuliaLegate/Legate.jl.git "$LEGATE_CHECKOUT"
git -C "$LEGATE_CHECKOUT" log -1 --format="Legate checkout: %D (%H)"
(
cd "$LEGATE_CHECKOUT"
julia --color=yes --project="$CI_PROJECT" -e '
using Pkg
Pkg.develop(PackageSpec(path = "lib/LegatePreferences"))
Pkg.develop(PackageSpec(path = "."))
using LegatePreferences
LegatePreferences.use_developer_mode()
Pkg.build("Legate")
'
)
else
echo "No Legate.jl branch override - using JLL"
fi

julia --color=yes --project="$CI_PROJECT" -e '
using Pkg
Pkg.develop(PackageSpec(path = "lib/CNPreferences"))
using CNPreferences
CNPreferences.use_developer_mode()
CNPreferences.set_broadcast_fusion!(ENV["CUNUMERIC_FUSION"] == "on")
CNPreferences.set_broadcast_fusion_min_ops!(1)
Pkg.develop(PackageSpec(path = "."))
Pkg.build("cuNumeric")
'

cp "$CI_PROJECT/LocalPreferences.toml" test/LocalPreferences.toml

julia --color=yes --project="$CI_PROJECT" -e '
using Pkg
Pkg.test("cuNumeric"; test_args = ["--quickfail"])
'
2 changes: 2 additions & 0 deletions .github/workflows/TagBot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,5 @@ jobs:
- uses: JuliaRegistries/TagBot@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
# SSH deploy key so the tag push can trigger Docs (GITHUB_TOKEN pushes cannot).
ssh: ${{ secrets.DOCUMENTER_KEY }}
43 changes: 43 additions & 0 deletions .github/workflows/docs-tags.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Deploy docs for version tags. Kept separate from docs.yml so tag pushes are
# not subject to the docs/README path filter (a tag tip often only bumps
# Project.toml).
name: Docs (tags)
on:
push:
tags:
- 'v*'
jobs:
docs:
name: Documentation
permissions:
actions: write
contents: write
pull-requests: read
statuses: write
runs-on: ubuntu-latest
env:
LEGATE_AUTO_CONFIG: 0
steps:
- uses: actions/checkout@v4
- uses: julia-actions/setup-julia@v2
with:
version: '1.11'
- uses: julia-actions/cache@v2

- name: Setup cuNumeric.jl
run: |
julia --color=yes --project=docs -e '
using Pkg
Pkg.develop(PackageSpec(path = "lib/CNPreferences"))
Pkg.develop(PackageSpec(path = "."))
'
- name: Instantiate docs environment
run: |
julia --color=yes --project=docs -e '
using Pkg
Pkg.instantiate()'
- name: Build documentation
run: julia --color=yes --project=docs docs/make.jl
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DOCUMENTER_KEY: ${{ secrets.DOCUMENTER_KEY }}
41 changes: 9 additions & 32 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -1,44 +1,21 @@
name: Docs
on:
push:
paths:
- '.github/workflows/docs.yml'
- 'src/**'
- 'docs/src/**'
- 'docs/make.jl'
- 'docs/Project.toml'
- 'README.md'
tags:
- 'v*'
# After merge: deploy live docs. Feature branches only run via pull_request.
branches:
- main
pull_request:
paths:
- '.github/workflows/docs.yml'
- 'src/**'
- 'docs/src/**'
- 'docs/make.jl'
- 'docs/Project.toml'
- 'README.md'
- '.github/workflows/docs.yml'
- '.github/workflows/docs-tags.yml'
- 'src/**'
- 'docs/**'
- 'README.md'
- 'lib/CNPreferences/**'
workflow_dispatch:
jobs:
check_changes:
name: Check for wrapper changes
runs-on: ubuntu-latest
outputs:
wrapper_changed: ${{ steps.filter.outputs.wrapper }}
steps:
- uses: actions/checkout@v4
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
wrapper:
- 'lib/cunumeric_jl_wrapper/**'

docs:
name : Documentation
needs: check_changes
if: ${{ github.base_ref == 'main' || needs.check_changes.outputs.wrapper_changed != 'true' }}
name: Documentation
permissions:
actions: write
contents: write
Expand Down
12 changes: 9 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,9 @@ debug
debug/*

# benchmark outputs
benchmark/results
benchmark/results**
benchmark/results/*
benchmark/plots**

compile_wrapper.sh

Expand All @@ -28,8 +29,8 @@ compile_wrapper.sh
build
build/*
build.log
*.log
*.err
*.log**
*.err**
kernel.ptx
*.perf
*.folded
Expand Down Expand Up @@ -94,3 +95,8 @@ node_modules
*.out
*.app
.githash

# VitePress caches/output (keep docs/src/.vitepress/config.mts + theme/)
docs/.vitepress/
docs/src/.vitepress/cache/
docs/src/.vitepress/dist/
15 changes: 8 additions & 7 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,12 @@ version = "0.1.1"

[deps]
CNPreferences = "3e078157-ea10-49d5-bf32-908f777cd46f"
CUDACore = "bd0ed864-bdfe-4181-a5ed-ce625a5fdea2"
CUDATools = "9ec180c6-1c07-47c7-9e6e-ebefa4d1f6d0"
CxxWrap = "1f15a43c-97ca-5a2a-ae31-89f07a497df4"
ExpressionExplorer = "21656369-7473-754a-2065-74616d696c43"
JuliaFormatter = "98e50ef6-434e-11e9-1051-2b60c6c9e899"
KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c"
Legate = "1238f2cf-6593-4d60-9aca-2f5364e49909"
LegatePreferences = "8028f36a-2b64-49e9-aa04-2d0933fd2ed9"
Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
Expand All @@ -20,17 +24,14 @@ cunumeric_jl_wrapper_jll = "49048992-29d2-5fd1-994f-9cecf112d624"
cupynumeric_jll = "2862d674-414d-5b0b-a494-b21f8deca547"
libcxxwrap_julia_jll = "3eaa8342-bff7-56a5-9981-c04077f7cee7"

[weakdeps]
CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"

[extensions]
CUDAExt = "CUDA"

[compat]
CNPreferences = "0.1.2"
CUDA = "5.9"
CUDACore = "6.0.0"
CUDATools = "6.0.0"
CxxWrap = "0.17"
ExpressionExplorer = "1.1.4"
JuliaFormatter = "2.3.0"
KernelAbstractions = "0.9.41"
Legate = "0.1.2"
LegatePreferences = "0.1.6"
MacroTools = "0.5.16"
Expand Down
Loading
Loading