Electron benchmark set for comparing the optimized MCDC tree across:
- pure Python
- serial Numba
- Numba CPU parallel (MPI ranks)
- Numba GPU target
The cases are lightweight Lockwood-style slab problems for three elements:
AlCuU
You can still run the Python driver directly:
cd /usr/workspace/derman1/tuo/ACE-work/test/MCDC-P-electron
export MCDC_VV_PROCESS_DATA_LIBRARY_DIR=/path/to/electron-vv-data
python3 run.pyUseful overrides:
python3 run.py \
--cases Al Cu \
--n-particles 1000 10000 100000 \
--cpu-ranks 4 \
--gpu-ranks 1 \
--launcher autoNotes:
CPU parallelhere means multiple MPI ranks running--mode=numba --target=cpu.GPU parallelmeans--mode=numba --target=gpu; if a Flux allocation is active, the driver usesflux run.- The driver prepends the configured
MCDCsource tree toPYTHONPATH, so runs target the optimized local source tree by default. - Results go under
results/<timestamp>/with per-run logs and asummary.csv.
The recommended entry point is the dispatcher:
./submit_flux.shThat script submits one Flux job per (element, N_PARTICLE, backend) combination.
Example:
3elements:Al Cu U2particle counts:1000 100004backends:python,numba,numba_cpu_parallel,numba_gpu_parallel
This gives 3 x 2 x 4 = 24 independent Flux jobs, and they can run concurrently as resources become available.
The scripts currently default to these site paths:
REPO_ROOT=/usr/workspace/derman1/tuo/ACE-work/test/MCDC-P-electronMCDC_ROOT=/usr/workspace/derman1/tuo/ACE-work/test/MCDCMCDC_VV_PROCESS_DATA_LIBRARY_DIR=/usr/workspace/derman1/tuo/ACE-work/test/mcdc-lib
Useful overrides:
CPU_QUEUE=pbatch GPU_QUEUE=pbatch \
CPU_RANKS=4 GPU_RANKS=1 \
N_PARTICLES="1000 10000" \
./submit_flux.shWalltime defaults are intentionally conservative:
CPU_TIME=08hGPU_TIME=08h
You can shorten them at submit time, for example:
CPU_QUEUE=pbatch GPU_QUEUE=pbatch \
CPU_TIME=02h GPU_TIME=01h \
N_PARTICLES="1000 10000" \
./submit_flux.shIf ./submit_flux.sh gives permission denied, either make the scripts executable:
chmod u+x submit_flux.sh submit_cpu_flux.sh submit_gpu_flux.shor run with:
bash submit_flux.shTo inspect queues on the system:
flux queue list
flux queue status pbatchIf pbatch is marked with *, it is the default queue, so explicitly setting CPU_QUEUE=pbatch GPU_QUEUE=pbatch is optional.
Each dispatcher call creates a dispatch directory:
results/dispatch_<timestamp>/
Inside it:
flux_logs/*.outandflux_logs/*.err: per-job Flux stdout/stderr logsjob_results/<case>/<backend>/N<particle>/: per-job run outputssubmitted_jobs.tsv: manifest of submitted jobs, job ids, result paths, and log paths
If you want to submit just one worker directly:
CASE=Al BACKEND=python N_PARTICLE=1000 flux batch -N1 -n1 submit_cpu_flux.sh
CASE=Al BACKEND=numba_gpu_parallel N_PARTICLE=1000 flux batch -N1 -n1 -g1 submit_gpu_flux.sh