Skip to content

Commit 3c98c1f

Browse files
Use test env in buildkite
1 parent f9d3f53 commit 3c98c1f

18 files changed

+414
-357
lines changed

.buildkite/pipeline.yml

Lines changed: 26 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,9 @@ steps:
2020
rm -rf ${JULIA_DEPOT_PATH}
2121
fi
2222
23-
- echo "--- Instantiate project"
24-
- "julia --project -e 'using Pkg; Pkg.instantiate(;verbose=true); Pkg.precompile(;strict=true)'"
25-
# force the initialization of the CUDA runtime as it is lazily loaded by default
26-
- "julia --project -e 'using CUDA; CUDA.precompile_runtime()'"
27-
2823
- echo "--- Instantiate test"
29-
- "julia --project=test -e 'using Pkg; Pkg.develop(path=\".\"); Pkg.instantiate(;verbose=true); Pkg.precompile(;strict=true)'"
30-
- "julia --project=test --check-bounds=yes -e 'using Pkg; Pkg.instantiate(;verbose=true); Pkg.precompile(;strict=true)'"
24+
- "julia --project=test --check-bounds=yes -e 'using Pkg; Pkg.develop(path=\".\"); Pkg.instantiate(;verbose=true); Pkg.precompile(;strict=true)'"
25+
- "julia --project=test -e 'using CUDA; CUDA.precompile_runtime()'"
3126

3227
- echo "--- Instantiate lib/ClimaCoreTempestRemap"
3328
- "julia --project=lib/ClimaCoreTempestRemap -e 'using Pkg; Pkg.develop(path=\".\"); Pkg.instantiate(;verbose=true); Pkg.precompile(;strict=true)'"
@@ -43,7 +38,7 @@ steps:
4338
- "julia --project=benchmarks/bickleyjet -e 'using Pkg; Pkg.instantiate(;verbose=true); Pkg.precompile(;strict=true)'"
4439

4540
- echo "--- Instantiate status"
46-
- "julia --project -e 'using Pkg; Pkg.status()'"
41+
- "julia --project=test -e 'using Pkg; Pkg.status()'"
4742

4843
agents:
4944
slurm_mem: 80G
@@ -109,7 +104,7 @@ steps:
109104
- label: "Unit: data cuda"
110105
key: unit_data_cuda
111106
command:
112-
- "julia --project -e 'using CUDA; CUDA.versioninfo()'"
107+
- "julia --project=test -e 'using CUDA; CUDA.versioninfo()'"
113108
- "julia --color=yes --check-bounds=yes --project=test test/DataLayouts/cuda.jl CUDA"
114109
agents:
115110
slurm_gpus: 1
@@ -181,15 +176,15 @@ steps:
181176
- label: "Unit: cuda spaces"
182177
key: "gpu_cuda_spaces"
183178
command:
184-
- "julia --project -e 'using CUDA; CUDA.versioninfo()'"
179+
- "julia --project=test -e 'using CUDA; CUDA.versioninfo()'"
185180
- "srun julia --color=yes --check-bounds=yes --project=test test/Spaces/spaces.jl"
186181
agents:
187182
slurm_gpus: 1
188183

189184
- label: "Unit: distributed cuda spaces"
190185
key: "gpu_distributed_extruded_cuda_spaces"
191186
command:
192-
- "julia --project -e 'using CUDA; CUDA.versioninfo()'"
187+
- "julia --project=test -e 'using CUDA; CUDA.versioninfo()'"
193188
- "srun julia --color=yes --check-bounds=yes --project=test test/Spaces/distributed_cuda/space_construction.jl CUDA"
194189
agents:
195190
slurm_gpus_per_task: 1
@@ -198,15 +193,15 @@ steps:
198193
- label: "Unit: ddss1"
199194
key: unit_ddss1
200195
command:
201-
- "julia --project -e 'using CUDA; CUDA.versioninfo()'"
196+
- "julia --project=test -e 'using CUDA; CUDA.versioninfo()'"
202197
- "julia --color=yes --check-bounds=yes --project=test test/Spaces/ddss1.jl CUDA"
203198
agents:
204199
slurm_gpus: 1
205200

206201
- label: "Unit: ddss1 cs"
207202
key: unit_ddss1_cs
208203
command:
209-
- "julia --project -e 'using CUDA; CUDA.versioninfo()'"
204+
- "julia --project=test -e 'using CUDA; CUDA.versioninfo()'"
210205
- "julia --color=yes --check-bounds=yes --project=test test/Spaces/ddss1_cs.jl CUDA"
211206
agents:
212207
slurm_gpus: 1
@@ -303,7 +298,7 @@ steps:
303298
- label: "Unit: cuda dss 2-process test"
304299
key: "gpu_ddss2_test"
305300
command:
306-
- "julia --project -e 'using CUDA; CUDA.versioninfo()'"
301+
- "julia --project=test -e 'using CUDA; CUDA.versioninfo()'"
307302
- "srun julia --color=yes --check-bounds=yes --project=test test/Spaces/distributed_cuda/ddss2.jl"
308303
timeout_in_minutes: 15
309304
env:
@@ -315,7 +310,7 @@ steps:
315310
- label: "Unit: cuda dss 3-process test"
316311
key: "gpu_ddss3_test"
317312
command:
318-
- "julia --project -e 'using CUDA; CUDA.versioninfo()'"
313+
- "julia --project=test -e 'using CUDA; CUDA.versioninfo()'"
319314
- "srun julia --color=yes --check-bounds=yes --project=test test/Spaces/distributed_cuda/ddss3.jl"
320315
timeout_in_minutes: 15
321316
env:
@@ -327,7 +322,7 @@ steps:
327322
- label: "Unit: cuda dss 4-process test"
328323
key: "gpu_ddss4_test"
329324
command:
330-
- "julia --project -e 'using CUDA; CUDA.versioninfo()'"
325+
- "julia --project=test -e 'using CUDA; CUDA.versioninfo()'"
331326
- "srun julia --color=yes --check-bounds=yes --project=test test/Spaces/distributed_cuda/ddss4.jl"
332327
timeout_in_minutes: 15
333328
env:
@@ -339,7 +334,7 @@ steps:
339334
- label: "Unit: cuda Cubed Sphere dss; ne = 32; 2-process test"
340335
key: "gpu_ddss_ne32_cs_2processes"
341336
command:
342-
- "julia --project -e 'using CUDA; CUDA.versioninfo()'"
337+
- "julia --project=test -e 'using CUDA; CUDA.versioninfo()'"
343338
- "srun julia --color=yes --check-bounds=yes --project=test test/Spaces/distributed_cuda/ddss_ne32_cs.jl"
344339
timeout_in_minutes: 15
345340
env:
@@ -351,7 +346,7 @@ steps:
351346
- label: "Unit: cuda Cubed Sphere dss; ne = 32; 3-process test"
352347
key: "gpu_ddss_ne32_cs_3processes"
353348
command:
354-
- "julia --project -e 'using CUDA; CUDA.versioninfo()'"
349+
- "julia --project=test -e 'using CUDA; CUDA.versioninfo()'"
355350
- "srun julia --color=yes --check-bounds=yes --project=test test/Spaces/distributed_cuda/ddss_ne32_cs.jl"
356351
timeout_in_minutes: 15
357352
env:
@@ -363,7 +358,7 @@ steps:
363358
- label: "Unit: cuda Cubed Sphere dss; ne = 32; 4-process test"
364359
key: "gpu_ddss_ne32_cs_4processes"
365360
command:
366-
- "julia --project -e 'using CUDA; CUDA.versioninfo()'"
361+
- "julia --project=test -e 'using CUDA; CUDA.versioninfo()'"
367362
- "srun julia --color=yes --check-bounds=yes --project=test test/Spaces/distributed_cuda/ddss_ne32_cs.jl"
368363
timeout_in_minutes: 15
369364
env:
@@ -382,23 +377,23 @@ steps:
382377
- label: "Unit: field cuda"
383378
key: unit_field_cuda
384379
command:
385-
- "julia --project -e 'using CUDA; CUDA.versioninfo()'"
380+
- "julia --project=test -e 'using CUDA; CUDA.versioninfo()'"
386381
- "julia --color=yes --check-bounds=yes --project=test test/Fields/field.jl"
387382
agents:
388383
slurm_gpus: 1
389384

390385
- label: "Unit: reduction cuda"
391386
key: unit_reduction_cuda
392387
command:
393-
- "julia --project -e 'using CUDA; CUDA.versioninfo()'"
388+
- "julia --project=test -e 'using CUDA; CUDA.versioninfo()'"
394389
- "julia --color=yes --check-bounds=yes --project=test test/Fields/reduction_cuda.jl CUDA"
395390
agents:
396391
slurm_gpus: 1
397392

398393
- label: "Unit: distributed reduction cuda"
399394
key: unit_distributed_reduction_cuda
400395
command:
401-
- "julia --project -e 'using CUDA; CUDA.versioninfo()'"
396+
- "julia --project=test -e 'using CUDA; CUDA.versioninfo()'"
402397
- "srun julia --color=yes --check-bounds=yes --project=test test/Fields/reduction_cuda_distributed.jl"
403398
agents:
404399
slurm_gpus_per_task: 1
@@ -516,31 +511,31 @@ steps:
516511
key: unit_rectilinear_cuda
517512
command: "julia --color=yes --check-bounds=yes --project=test test/Operators/spectralelement/rectilinear_cuda.jl"
518513
command:
519-
- "julia --project -e 'using CUDA; CUDA.versioninfo()'"
514+
- "julia --project=test -e 'using CUDA; CUDA.versioninfo()'"
520515
- "julia --color=yes --check-bounds=yes --project=test test/Operators/spectralelement/rectilinear_cuda.jl CUDA"
521516
agents:
522517
slurm_gpus: 1
523518

524519
- label: "Unit: hybrid operators cuda"
525520
key: unit_ops_cuda
526521
command:
527-
- "julia --project -e 'using CUDA; CUDA.versioninfo()'"
522+
- "julia --project=test -e 'using CUDA; CUDA.versioninfo()'"
528523
- "julia --color=yes --check-bounds=yes --project=test test/Operators/hybrid/cuda.jl CUDA"
529524
agents:
530525
slurm_gpus: 1
531526

532527
- label: "Unit: extruded sphere cuda"
533528
key: unit_extruded_sphere_cuda
534529
command:
535-
- "julia --project -e 'using CUDA; CUDA.versioninfo()'"
530+
- "julia --project=test -e 'using CUDA; CUDA.versioninfo()'"
536531
- "julia --color=yes --check-bounds=yes --project=test test/Operators/hybrid/extruded_sphere_cuda.jl CUDA"
537532
agents:
538533
slurm_gpus: 1
539534

540535
- label: "Unit: extruded 3dbox cuda"
541536
key: unit_extruded_3dbox_cuda
542537
command:
543-
- "julia --project -e 'using CUDA; CUDA.versioninfo()'"
538+
- "julia --project=test -e 'using CUDA; CUDA.versioninfo()'"
544539
- "julia --color=yes --check-bounds=yes --project=test test/Operators/hybrid/extruded_3dbox_cuda.jl CUDA"
545540
agents:
546541
slurm_gpus: 1
@@ -947,7 +942,7 @@ steps:
947942
- label: "Unit: limiter cuda"
948943
key: unit_limiter_gpu
949944
command:
950-
- "julia --project -e 'using CUDA; CUDA.versioninfo()'"
945+
- "julia --project=test -e 'using CUDA; CUDA.versioninfo()'"
951946
- "julia --color=yes --project=test test/Limiters/limiter.jl"
952947
agents:
953948
slurm_gpus: 1
@@ -995,7 +990,7 @@ steps:
995990
- label: "Perf: FD operators from the wild (gpu)"
996991
key: perf_FD_ops_examples_gpu
997992
command:
998-
- "julia --project -e 'using CUDA; CUDA.versioninfo()'"
993+
- "julia --project=test -e 'using CUDA; CUDA.versioninfo()'"
999994
- "julia --color=yes --project=test test/Operators/finitedifference/opt_examples.jl"
1000995
agents:
1001996
slurm_gpus: 1
@@ -1020,7 +1015,7 @@ steps:
10201015
- label: "Perf: SEM operator benchmarks (cuda Float32)"
10211016
key: "perf_gpu_spectral_ops_cuda_float32"
10221017
command:
1023-
- "julia --project -e 'using CUDA; CUDA.versioninfo()'"
1018+
- "julia --project=test -e 'using CUDA; CUDA.versioninfo()'"
10241019
- "julia --color=yes --project=test test/Operators/spectralelement/benchmark_ops.jl --device CUDA --float-type Float32"
10251020
agents:
10261021
slurm_gpus: 1
@@ -1032,7 +1027,7 @@ steps:
10321027
- label: "Perf: SEM operator benchmarks (cuda Float64)"
10331028
key: "perf_gpu_spectral_ops_cuda_float64"
10341029
command:
1035-
- "julia --project -e 'using CUDA; CUDA.versioninfo()'"
1030+
- "julia --project=test -e 'using CUDA; CUDA.versioninfo()'"
10361031
- "julia --color=yes --project=test test/Operators/spectralelement/benchmark_ops.jl --device CUDA --float-type Float64"
10371032
agents:
10381033
slurm_gpus: 1
@@ -1048,7 +1043,7 @@ steps:
10481043
- label: "Perf: SEM operator benchmarks"
10491044
key: "perf_gpu_spectral_ops"
10501045
command:
1051-
- "julia --project -e 'using CUDA; CUDA.versioninfo()'"
1046+
- "julia --project=test -e 'using CUDA; CUDA.versioninfo()'"
10521047
- "julia --color=yes --project=test test/Operators/spectralelement/benchmark_ops.jl --device CUDA"
10531048
agents:
10541049
slurm_gpus: 1

ext/ClimaCoreCUDAExt.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,14 @@ module ClimaCoreCUDAExt
22

33
import ClimaComms
44
import ClimaCore: DataLayouts, Grids, Spaces, Fields
5+
import ClimaCore: Geometry
6+
import ClimaCore.Geometry: AxisTensor
57
import CUDA
8+
using CUDA
9+
using CUDA: threadIdx, blockIdx, blockDim
10+
import StaticArrays: SVector, SMatrix, SArray
11+
import ClimaCore.RecursiveApply:
12+
, , , radd, rmul, rsub, rdiv, rmap, rzero, rmin, rmax
613

714
include(joinpath("cuda", "data_layouts.jl"))
815
include(joinpath("cuda", "fields.jl"))

ext/cuda/fields.jl

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,14 @@ using CUDA: @cuda
33
import LinearAlgebra, Statistics
44
import ClimaCore: DataLayouts, Spaces, Grids, Fields
55
import ClimaCore.Fields: Field, FieldStyle
6-
import ClimaCore.Fields: AbstractFieldStyle
7-
import ClimaCore.Spaces: cuda_synchronize
6+
import ClimaCore.Fields: AbstractFieldStyle, bycolumn
7+
import ClimaCore.Spaces: AbstractSpace, cuda_synchronize
8+
9+
function bycolumn(fn, space::AbstractSpace, ::ClimaComms.CUDADevice)
10+
fn(:)
11+
return nothing
12+
end
13+
814
function Base.sum(
915
field::Union{Field, Base.Broadcast.Broadcasted{<:FieldStyle}},
1016
::ClimaComms.CUDADevice,

ext/cuda/limiters.jl

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
1-
import ClimaCore.Limiters: QuasiMonotoneLimiter
1+
import ClimaCore.Limiters:
2+
QuasiMonotoneLimiter,
3+
compute_element_bounds!,
4+
compute_neighbor_bounds_local!,
5+
apply_limiter!
26
import ClimaCore.Fields
7+
import ClimaCore: DataLayouts, Spaces, Topologies, Fields
8+
using CUDA
39

410
function config_threadblock(Nv, Nh)
511
nitems = Nv * Nh

ext/cuda/matrix_fields_multiple_field_solve.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import CUDA
22
import ClimaComms
33
import LinearAlgebra: UniformScaling
44
import ClimaCore.Operators
5+
import ClimaCore.MatrixFields
56
import ClimaCore.MatrixFields: multiple_field_solve!
67
import ClimaCore.MatrixFields: is_CuArray_type
78
import ClimaCore.MatrixFields: allow_scalar_func
@@ -13,9 +14,9 @@ is_CuArray_type(::Type{T}) where {T <: CUDA.CuArray} = true
1314

1415
function multiple_field_solve!(::ClimaComms.CUDADevice, cache, x, A, b, x1)
1516
Ni, Nj, _, _, Nh = size(Fields.field_values(x1))
16-
names = matrix_row_keys(keys(A))
17+
names = MatrixFields.matrix_row_keys(keys(A))
1718
Nnames = length(names)
18-
nthreads, nblocks = Topologies._configure_threadblock(Ni * Nj * Nh * Nnames)
19+
nthreads, nblocks = _configure_threadblock(Ni * Nj * Nh * Nnames)
1920
sscache = Operators.strip_space(cache)
2021
ssx = Operators.strip_space(x)
2122
ssA = Operators.strip_space(A)

ext/cuda/matrix_fields_single_field_solve.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import ClimaCore.Fields: Field
66
import ClimaCore.Fields
77
import ClimaCore.MatrixFields: _single_field_solve!
88
import ClimaCore.MatrixFields: band_matrix_solve!, unzip_tuple_field_values
9+
import ClimaCore.RecursiveApply: , , , rmap, rzero, rdiv
910

1011
# called by TuplesOfNTuples.jl's `inner_dispatch`:
1112
# which requires a particular argument order:

ext/cuda/operators_finite_difference.jl

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ import Base.Broadcast: Broadcasted
33
import ClimaComms
44
using CUDA: @cuda
55
import ClimaCore.Operators: AbstractStencilStyle, strip_space
6+
import ClimaCore.Operators: setidx!, getidx
67
import ClimaCore.Operators: StencilBroadcasted
8+
import ClimaCore.Operators: LeftBoundaryWindow, RightBoundaryWindow, Interior
79

810
struct CUDAColumnStencilStyle <: AbstractStencilStyle end
911
AbstractStencilStyle(::ClimaComms.CUDADevice) = CUDAColumnStencilStyle
@@ -24,11 +26,11 @@ function Base.copyto!(
2426
Nq = 1
2527
Nh = 1
2628
end
27-
(li, lw, rw, ri) = bounds = window_bounds(space, bc)
29+
(li, lw, rw, ri) = bounds = Operators.window_bounds(space, bc)
2830
Nv = ri - li + 1
2931
max_threads = 256
3032
nitems = Nv * Nq * Nq * Nh # # of independent items
31-
(nthreads, nblocks) = Topologies._configure_threadblock(max_threads, nitems)
33+
(nthreads, nblocks) = _configure_threadblock(max_threads, nitems)
3234
@cuda always_inline = true threads = (nthreads,) blocks = (nblocks,) copyto_stencil_kernel!(
3335
strip_space(out, space),
3436
strip_space(bc, space),
@@ -55,7 +57,13 @@ function copyto_stencil_kernel!(out, bc, space, bds, Nq, Nh, Nv)
5557
RightBoundaryWindow{Spaces.right_boundary_name(space)}() :
5658
Interior()
5759
)
58-
setidx!(space, out, idx, hidx, getidx(space, bc, window, idx, hidx))
60+
setidx!(
61+
space,
62+
out,
63+
idx,
64+
hidx,
65+
Operators.getidx(space, bc, window, idx, hidx),
66+
)
5967
end
6068
return nothing
6169
end

0 commit comments

Comments
 (0)