Skip to content

Commit

Permalink
add extensions unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
omlins committed Dec 12, 2023
1 parent c593840 commit 9c28831
Show file tree
Hide file tree
Showing 9 changed files with 120 additions and 0 deletions.
18 changes: 18 additions & 0 deletions test/test_projects/Diffusion3D/Project.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name = "Diffusion3D"
uuid = "aac712e6-b0d5-474a-aefa-bdd351e14480"
authors = ["Samuel Omlin <[email protected]>"]
version = "0.1.0"

[deps]
ParallelStencil = "94395366-693c-11ea-3b26-d9b7aac5d958"

[compat]
ParallelStencil = ">= 0.4.0"

[weakdeps]
AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e"
CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"

[extensions]
#AMDGPUExt = "AMDGPU"
CUDAExt = "CUDA"
9 changes: 9 additions & 0 deletions test/test_projects/Diffusion3D/ext/AMDGPUExt.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
module AMDGPUExt
using Diffusion3D
import AMDGPU
using ParallelStencil
using ParallelStencil.FiniteDifferences3D
@init_parallel_stencil(AMDGPU, Float64, 3)
Diffusion3D.diffusion3D(backend::Type{<:AMDGPUBackend}) = (@info "using AMDGPU backend"; diffusion3D())
include(joinpath(@__DIR__, "..", "src", "backends", "diffusion3D.jl"))
end
9 changes: 9 additions & 0 deletions test/test_projects/Diffusion3D/ext/CUDAExt.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
module CUDAExt
using Diffusion3D
import CUDA
using ParallelStencil
using ParallelStencil.FiniteDifferences3D
@init_parallel_stencil(CUDA, Float64, 3)
Diffusion3D.diffusion3D(backend::Type{<:CUDABackend}) = (@info "using CUDA backend"; diffusion3D())
include(joinpath(@__DIR__, "..", "src", "backends", "diffusion3D.jl"))
end
8 changes: 8 additions & 0 deletions test/test_projects/Diffusion3D/src/CPU.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module CPU
using ..Diffusion3D
using ParallelStencil
using ParallelStencil.FiniteDifferences3D
@init_parallel_stencil(Threads, Float64, 3)
Diffusion3D.diffusion3D(backend::Type{<:CPUBackend}) = (@info "using CPU backend"; diffusion3D())
include(joinpath(@__DIR__, "..", "src", "backends", "diffusion3D.jl"))
end
11 changes: 11 additions & 0 deletions test/test_projects/Diffusion3D/src/Diffusion3D.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
module Diffusion3D
export CPUBackend, CUDABackend, AMDGPUBackend, diffusion3D

abstract type AbstractBackend end
struct CPUBackend <: AbstractBackend end
struct CUDABackend <: AbstractBackend end
struct AMDGPUBackend <: AbstractBackend end

diffusion3D(backend::Type{<:AbstractBackend}) = error("module not loaded or diffusion3D not implemented for backend: $backend")
include("CPU.jl")
end
39 changes: 39 additions & 0 deletions test/test_projects/Diffusion3D/src/backends/diffusion3D.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
@parallel function diffusion3D_step!(T2, T, Ci, lam, dt, dx, dy, dz)
@inn(T2) = @inn(T) + dt*(lam*@inn(Ci)*(@d2_xi(T)/dx^2 + @d2_yi(T)/dy^2 + @d2_zi(T)/dz^2));
return
end

function diffusion3D()
# Physics
lam = 1.0; # Thermal conductivity
cp_min = 1.0; # Minimal heat capacity
lx, ly, lz = 10.0, 10.0, 10.0; # Length of computational domain in dimension x, y and z

# Numerics
nx, ny, nz = 8, 8, 8; # Number of gridpoints in dimensions x, y and z
nt = 3; # Number of time steps
dx = lx/(nx-1); # Space step in x-dimension
dy = ly/(ny-1); # Space step in y-dimension
dz = lz/(nz-1); # Space step in z-dimension

# Array initializations
T = @zeros(nx, ny, nz);
T2 = @zeros(nx, ny, nz);
Ci = @zeros(nx, ny, nz);

# Initial conditions (heat capacity and temperature with two Gaussian anomalies each)
Ci .= 1.0./( cp_min .+ Data.Array([5*exp(-(((ix-1)*dx-lx/1.5))^2-(((iy-1)*dy-ly/2))^2-(((iz-1)*dz-lz/1.5))^2) +
5*exp(-(((ix-1)*dx-lx/3.0))^2-(((iy-1)*dy-ly/2))^2-(((iz-1)*dz-lz/1.5))^2) for ix=1:size(T,1), iy=1:size(T,2), iz=1:size(T,3)]) )
T .= Data.Array([100*exp(-(((ix-1)*dx-lx/2)/2)^2-(((iy-1)*dy-ly/2)/2)^2-(((iz-1)*dz-lz/3.0)/2)^2) +
50*exp(-(((ix-1)*dx-lx/2)/2)^2-(((iy-1)*dy-ly/2)/2)^2-(((iz-1)*dz-lz/1.5)/2)^2) for ix=1:size(T,1), iy=1:size(T,2), iz=1:size(T,3)])
T2 .= T; # Assign also T2 to get correct boundary conditions.

# Time loop
dt = min(dx^2,dy^2,dz^2)*cp_min/lam/8.1; # Time step for the 3D Heat diffusion
for it = 1:nt
@parallel diffusion3D_step!(T2, T, Ci, lam, dt, dx, dy, dz);
T, T2 = T2, T;
end

return Data.Array
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
push!(LOAD_PATH, "@stdlib") # NOTE: this is needed to enable this test to run from the Pkg manager
push!(LOAD_PATH, joinpath(@__DIR__, ".."))
using Test
using Pkg
Pkg.activate(joinpath(@__DIR__, "test_projects", "Diffusion3D"))
Pkg.instantiate()
import AMDGPU
using Diffusion3D
@test diffusion3D(AMDGPUBackend) <: AMDGPU.ROCArray
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
push!(LOAD_PATH, "@stdlib") # NOTE: this is needed to enable this test to run from the Pkg manager
push!(LOAD_PATH, joinpath(@__DIR__, ".."))
using Test
using Pkg
Pkg.activate(joinpath(@__DIR__, "test_projects", "Diffusion3D"))
Pkg.instantiate()
import CUDA
using Diffusion3D
@test diffusion3D(CUDABackend) <: CUDA.CuArray
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
push!(LOAD_PATH, "@stdlib") # NOTE: this is needed to enable this test to run from the Pkg manager
push!(LOAD_PATH, joinpath(@__DIR__, ".."))
using Test
using Pkg
Pkg.activate(joinpath(@__DIR__, "test_projects", "Diffusion3D"))
Pkg.instantiate()
using Diffusion3D
@test diffusion3D(CPUBackend) <: Array

0 comments on commit 9c28831

Please sign in to comment.