File size: 1,427 Bytes
23e02ba | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #!/usr/bin/env bash
set -euo pipefail
# Run one physical node's chunk for a given wave.
#
# Mapping:
# chunk_index = WAVE_INDEX * ACTUAL_NODES + NODE_RANK
#
# This lets a smaller number of real nodes process a larger plan in multiple
# waves without changing the underlying generation code.
ACTUAL_NODES=${ACTUAL_NODES:?Set ACTUAL_NODES to the number of real compute nodes available in this wave.}
NODE_RANK=${NODE_RANK:-${SLURM_ARRAY_TASK_ID:-0}}
WAVE_INDEX=${WAVE_INDEX:?Set WAVE_INDEX, starting from 0.}
TOTAL_MATERIALS=${TOTAL_MATERIALS:-9046}
CHUNK_SIZE=${CHUNK_SIZE:?Set CHUNK_SIZE to the best single-node material count.}
if (( ACTUAL_NODES <= 0 )); then
echo "ERROR: ACTUAL_NODES must be positive." >&2
exit 2
fi
if (( NODE_RANK < 0 || NODE_RANK >= ACTUAL_NODES )); then
echo "ERROR: NODE_RANK=${NODE_RANK} must be in [0, ACTUAL_NODES)." >&2
exit 2
fi
NODE_INDEX=$((WAVE_INDEX * ACTUAL_NODES + NODE_RANK))
FIRST_IDX=$((NODE_INDEX * CHUNK_SIZE))
if (( FIRST_IDX >= TOTAL_MATERIALS )); then
echo "Wave node has no work:"
echo " WAVE_INDEX=${WAVE_INDEX}"
echo " ACTUAL_NODES=${ACTUAL_NODES}"
echo " NODE_RANK=${NODE_RANK}"
echo " NODE_INDEX=${NODE_INDEX}"
echo " FIRST_IDX=${FIRST_IDX}"
echo " TOTAL_MATERIALS=${TOTAL_MATERIALS}"
exit 0
fi
export NODE_INDEX TOTAL_MATERIALS CHUNK_SIZE
ROOT=${ROOT:-/workspace/mp_20_pxrdnet}
bash "${ROOT}/cpu_multinode_generation/run_node_chunk.sh"
|