Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
9 changes: 9 additions & 0 deletions smoketests/Project.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[deps]
ADIOS2 = "e0ce9d3b-0dbd-416f-8264-ccca772f60ec"
CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"
CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0"
GrayScott = "089a57ea-382b-4fd7-9f05-24902db6ec52"
MPI = "da04e1cc-30fd-572f-bb4f-1f8673147195"

[extras]
MPIPreferences = "3da0fdf6-3ccc-4f1b-acd9-58baa6c99267"
81 changes: 81 additions & 0 deletions smoketests/run_smoketest.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
using TOML

backend = ARGS[1]

# Base configuration with fixed parameters
base_config = Dict(
"Du" => 0.2,
"Dv" => 0.1,
"F" => 0.02,
"k" => 0.048,
"dt" => 1.0,
"plotgap" => 10,
"noise" => 0.1,
"checkpoint" => false,
"checkpoint_freq" => 700,
"checkpoint_output" => "ckpt.bp",
"restart" => false,
"restart_input" => "ckpt.bp",
"mesh_type" => "image",
"verbose" => false,
)

# Parameter ranges for grid search
L_values = [2^i for i in 6:10] # 8 to 1024 in powers of 2
steps_values = [1000, 10000, 50000, 100000]
precision_values = ["Float32", "Float64"]
kernel_language_values = ["Plain", "KernelAbstractions"]

# Create output directory if it doesn't exist
mkpath("configs")

# Counter for configurations
config_count = 0

# Generate all combinations and run simulations
for L in L_values,
steps in steps_values,
precision in precision_values,
kernel_language in kernel_language_values

# Create a copy of base configuration
config = copy(base_config)

# Add variable parameters
config["L"] = L
config["steps"] = steps
config["precision"] = precision
config["backend"] = backend
config["kernel_language"] = kernel_language

# Generate unique output filename based on parameters
output_filename = "gs-$(backend)-$(L)L-$(precision).bp"
config["output"] = output_filename

# Create config filename
config_filename = "configs/config_$(config_count).toml"

# Write configuration to TOML file
open(config_filename, "w") do io
TOML.print(io, config)
end

# Run simulation with this configuration
if backend == "CUDA"
run_cmd = `julia --project -e 'import GrayScott, CUDA; GrayScott.main(ARGS)' $config_filename`
else
run_cmd = `julia --project -e 'import GrayScott; GrayScott.main(ARGS)' $config_filename`
end

# Print information about current run
println("Running configuration $config_count:")
println("L: $L, Steps: $steps, Precision: $precision, Backend: $backend, Kernel: $kernel_language")

# Run the simulation
run(run_cmd)
println("Successfully completed configuration $config_count")

global config_count += 1
end

println("Completed all $config_count configurations")
19 changes: 19 additions & 0 deletions smoketests/smoke_cpu.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/bin/bash

#SBATCH -J smoke_cpu
#SBATCH -A ntrain1
#SBATCH -q shared
#SBATCH -C cpu
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -c 128
#SBATCH -t 02:00:00
#SBATCH -o smoke_cpu.log

set -eu

module load julia/1.10

export JULIA_NUM_THREADS=128

julia --project=$PWD run_smoketest.jl CPU
19 changes: 19 additions & 0 deletions smoketests/smoke_cpu_mpi.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/bin/bash

#SBATCH -J smoke_cmpi
#SBATCH -A ntrain1
#SBATCH -q shared
#SBATCH -C cpu
#SBATCH -N 1
#SBATCH -n 2
#SBATCH -c 64
#SBATCH -t 02:00:00
#SBATCH -o smoke_cpu_mpi.log

set -eu

module load julia/1.10

export JULIA_NUM_THREADS=64

srun julia --project=$PWD run_smoketest.jl CPU
19 changes: 19 additions & 0 deletions smoketests/smoke_gpu.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/bin/bash

#SBATCH -J smoke_gpu
#SBATCH -A ntrain1
#SBATCH -q shared
#SBATCH -C gpu
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -c 32
#SBATCH -t 02:00:00
#SBATCH -o smoke_gpu.log

set -eu

module load julia/1.10

export JULIA_NUM_THREADS=32

julia --project=$PWD run_smoketest.jl CUDA
19 changes: 19 additions & 0 deletions smoketests/smoke_gpu_mpi.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/bin/bash

#SBATCH -J smoke_gmpi
#SBATCH -A ntrain1
#SBATCH -q shared
#SBATCH -C gpu
#SBATCH -n 2
#SBATCH -c 32
#SBATCH --gpus-per-task=1
#SBATCH -t 02:00:00
#SBATCH -o smoke_gpu_mpi.log

set -eu

module load julia/1.10

export JULIA_NUM_THREADS=32

srun julia --project=$PWD run_smoketest.jl CUDA
47 changes: 47 additions & 0 deletions smoketests/visualize.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import ADIOS2
import CairoMakie

bp_file = "gs-1MPI-1GPU-64L-F32.bp"

adios = ADIOS2.adios_init_serial()
io = ADIOS2.declare_io(adios, "reader")
reader = ADIOS2.open(io, bp_file, ADIOS2.mode_read)

# get the number of available steps in the reader, only works for bp files
steps = ADIOS2.steps(reader)
npixels = 256
local_count = 32

# Grid is 1800x1800x1800. Use Tuples () for selection
local_start = convert(Int64, ceil((npixels - local_count) / 2))
start = (local_start, local_start, convert(Int64, ceil(npixels / 2)))
count = (local_count, local_count, 1)
sliceU = Array{Float32, 2}(undef, local_count, local_count)
sliceV = Array{Float32, 2}(undef, local_count, local_count)

for step in 1:steps
ADIOS2.begin_step(reader)

varU = ADIOS2.inquire_variable(io, "U")
@assert varU isa ADIOS2.Variable string("Could not find variable U")
ADIOS2.set_selection(varU, start, count)

varV = ADIOS2.inquire_variable(io, "U")
@assert varV isa ADIOS2.Variable string("Could not find variable V")
ADIOS2.set_selection(varV, start, count)

ADIOS2.get(reader, varU, sliceU)
ADIOS2.get(reader, varV, sliceV)
ADIOS2.end_step(reader)

println("Showing step ", step)

f = CairoMakie.Figure()
CairoMakie.heatmap(f[1, 1], sliceU)
CairoMakie.heatmap(f[1, 2], sliceV)
display(f)
CairoMakie.save(string("U_V_", step, ".png"), f)
end

ADIOS2.close(reader)
ADIOS2.adios_finalize(adios)