Skip to content

Commit b2f2cc0

Browse files
committed
Use PrecompileTools
1 parent 296646d commit b2f2cc0

File tree

4 files changed

+89
-17
lines changed

4 files changed

+89
-17
lines changed

Project.toml

+2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
1212
MPI = "da04e1cc-30fd-572f-bb4f-1f8673147195"
1313
OneDimensionalNodes = "c5182250-406c-41f5-b9da-836c94d3c2ab"
1414
P4estTypes = "f636fe8e-398d-42a9-9d15-dd2c0670d30f"
15+
PrecompileTools = "aea7be01-6a6a-4083-8856-8a6e6704d82a"
1516
RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01"
1617
Requires = "ae029012-a4dd-5104-9daa-d747884805df"
1718
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
@@ -36,6 +37,7 @@ MPI = "0.20"
3637
OneDimensionalNodes = "1"
3738
P4estTypes = "0.2.0"
3839
RecipesBase = "1"
40+
PrecompileTools = "1"
3941
Requires = "1"
4042
SparseArrays = "1"
4143
StaticArrays = "1"

ext/RavenCUDAExt.jl

+20-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
module RavenCUDAExt
22

3-
import Raven
4-
import Adapt
5-
import MPI
6-
import StaticArrays
3+
import PrecompileTools
4+
5+
PrecompileTools.@recompile_invalidations begin
6+
import Raven
7+
import Adapt
8+
import MPI
9+
import StaticArrays
10+
import CUDA
11+
end
712

813
isdefined(Base, :get_extension) ? (using CUDA) : (using ..CUDA)
914
isdefined(Base, :get_extension) ? (using CUDA.CUDAKernels) : (using ..CUDA.CUDAKernels)
@@ -59,4 +64,15 @@ else
5964
Adapt.adapt_storage(::CUDA.KernelAdaptor, ::MPI.Comm) = nothing
6065
end
6166

67+
PrecompileTools.@setup_workload let
68+
if CUDA.functional()
69+
PrecompileTools.@compile_workload begin
70+
for FT in (Float32, Float64)
71+
AT = CuArray
72+
Raven.precompile_workload(FT, AT)
73+
end
74+
end
75+
end
76+
end
77+
6278
end # module RavenCUDAExt

src/Raven.jl

+27-13
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
11
module Raven
22

3-
using Adapt
4-
using Compat
5-
using GPUArraysCore
6-
using KernelAbstractions
7-
using KernelAbstractions.Extras: @unroll
8-
using LinearAlgebra
9-
using MPI
10-
using OneDimensionalNodes
11-
import P4estTypes
12-
using RecipesBase
13-
using StaticArrays
14-
using StaticArrays: tuple_prod, tuple_length, size_to_tuple
15-
using SparseArrays
3+
using PrecompileTools: @setup_workload, @compile_workload, @recompile_invalidations
4+
5+
@recompile_invalidations begin
6+
using Adapt
7+
using Compat
8+
using GPUArraysCore
9+
using KernelAbstractions
10+
using KernelAbstractions.Extras: @unroll
11+
using LinearAlgebra
12+
using MPI
13+
using OneDimensionalNodes
14+
import P4estTypes
15+
using RecipesBase
16+
using StaticArrays
17+
using StaticArrays: tuple_prod, tuple_length, size_to_tuple
18+
using SparseArrays
19+
end
1620

1721
export LobattoCell, GaussCell
1822

@@ -60,6 +64,7 @@ include("grids.jl")
6064
include("gridmanager.jl")
6165
include("gridarrays.jl")
6266
include("kron.jl")
67+
include("precompile.jl")
6368

6469
if !isdefined(Base, :get_extension)
6570
using Requires
@@ -82,4 +87,13 @@ function __init__()
8287
end
8388
end
8489

90+
@setup_workload let
91+
@compile_workload begin
92+
for FT in (Float32, Float64)
93+
AT = Array
94+
precompile_workload(FT, AT)
95+
end
96+
end
97+
end
98+
8599
end # module Raven

src/precompile.jl

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
function precompile_workload(FT, AT)
2+
lcell2d = LobattoCell{FT,AT}(2, 2)
3+
vertices2d = [
4+
SVector{2,FT}(0, 0), # 1
5+
SVector{2,FT}(2, 0), # 2
6+
SVector{2,FT}(0, 2), # 3
7+
SVector{2,FT}(2, 2), # 4
8+
SVector{2,FT}(4, 0), # 5
9+
SVector{2,FT}(4, 2), # 6
10+
]
11+
cells2d = [(1, 2, 3, 4), (4, 2, 6, 5)]
12+
13+
generate(GridManager(lcell2d, brick(FT, 1, 1)))
14+
generate(GridManager(lcell2d, coarsegrid(vertices2d, cells2d)))
15+
16+
lcell3d = LobattoCell{FT,AT}(2, 2, 2)
17+
vertices3d = [
18+
SVector{3,FT}(0, 0, 0), # 1
19+
SVector{3,FT}(2, 0, 0), # 2
20+
SVector{3,FT}(0, 2, 0), # 3
21+
SVector{3,FT}(2, 2, 0), # 4
22+
SVector{3,FT}(0, 0, 2), # 5
23+
SVector{3,FT}(2, 0, 2), # 6
24+
SVector{3,FT}(0, 2, 2), # 7
25+
SVector{3,FT}(2, 2, 2), # 8
26+
SVector{3,FT}(4, 0, 0), # 9
27+
SVector{3,FT}(4, 2, 0), # 10
28+
SVector{3,FT}(4, 0, 2), # 11
29+
SVector{3,FT}(4, 2, 2), # 12
30+
]
31+
cells3d = [(1, 2, 3, 4, 5, 6, 7, 8), (4, 2, 10, 9, 8, 6, 12, 11)]
32+
33+
generate(GridManager(lcell3d, brick(FT, 1, 1, 1)))
34+
generate(GridManager(lcell3d, coarsegrid(vertices3d, cells3d)))
35+
36+
GaussCell{FT,AT}(2, 2)
37+
GaussCell{FT,AT}(2, 2, 2)
38+
39+
return
40+
end

0 commit comments

Comments
 (0)