#!/bin/bash # Phase P9 follow-up: thread scaling with the GTC outputs on a RAM disk (/dev/shm), to separate compute scaling # from the gp3 disk's write throughput (125 MB/s baseline; one GSA GTC is ~13 MB). Run with OMNI=0. set -uo pipefail OUT=$2 W=/work/p9; R=$OUT/p9b; mkdir -p $W $R N=$(nproc) DEBIAN_FRONTEND=noninteractive apt-get install -y -q gcc > /dev/null curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal > /dev/null 2>&1 export PATH="$HOME/.cargo/bin:$PATH" VIRTUAL_ENV=$PWD/.venv uv pip install -q ./rust/simurg-core || { echo "!! simurg-core build failed"; exit 1; } .venv/bin/python -c "from simurg._core import backend; print('backend', backend())" GSA=https://webdata.illumina.com/downloads/productfiles/global-screening-array/v1-0 mkdir -p $W/gsa && cd $W/gsa for z in infinium-global-screening-array-24-v1-0-c2-manifest-file-bpm-build38.zip \ infinium-global-screening-array-v1-0-c1-cluster-file.zip; do curl -sSfL --retry 5 -O "$GSA/$z" && unzip -oq $z done cd - > /dev/null BPM=$W/gsa/GSA-24v1-0_C2.bpm; EGT=$W/gsa/GSA-24v1-0_C1_ClusterFile.egt .venv/bin/python scripts/p8/prepare.py --tsv scripts/p8/gse165845_samples.tsv --dl /dev/shm/geo --out /dev/shm/idats \ --workers 24 2>&1 | tail -2 || exit 1 df -h /dev/shm | tail -1 echo "=== scaling, outputs on /dev/shm $(date -u +%T) ===" .venv/bin/python bench/scaling.py --bpm $BPM --egt $EGT --idats /dev/shm/idats --out $W/shm --work /dev/shm/out \ --clean --threads 1,4,8,16,24,$N 2>&1 | grep -v WARNING cp $W/shm/scaling.json $R/scaling_rust_shm.json lscpu | grep -i "model name\|^CPU(s)" > $R/cpu.txt echo "=== task done $(date -u +%T) ==="