We should define something like, e.g., "assign_mpi_devices":
if context isa ClimaComms.MPICommsContext &&
device isa ClimaComms.CUDADevice
# assign GPUs based on local rank
local_comm = ClimaComms.MPI.Comm_split_type(
context.mpicomm,
ClimaComms.MPI.COMM_TYPE_SHARED,
ClimaComms.MPI.Comm_rank(context.mpicomm),
)
CUDA.device!(
ClimaComms.MPI.Comm_rank(local_comm) % length(CUDA.devices()),
)
end
from ClimaCore's benchmark utility: https://github.com/CliMA/ClimaCore.jl/blob/25792d42b04c36dc6f2a6f50cd9d75cf2416b5cb/test/Operators/spectralelement/benchmark_utils.jl#L189-L200
We should define something like, e.g., "
assign_mpi_devices":from ClimaCore's benchmark utility: https://github.com/CliMA/ClimaCore.jl/blob/25792d42b04c36dc6f2a6f50cd9d75cf2416b5cb/test/Operators/spectralelement/benchmark_utils.jl#L189-L200