Skip to content

Commit 51d8f0e

Browse files
committed
Add option to read input from CTF and run asynchronous reconstruction to full system test script
1 parent c1f05c0 commit 51d8f0e

File tree

3 files changed

+107
-54
lines changed

3 files changed

+107
-54
lines changed

prodtests/full-system-test/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ The following options exist (some of the options are not used in all scripts, an
4646
* 0: Read `ctf_dictionary.root` as input.
4747
* 1: Create `ctf_dictionary.root`. Note that this was already done automatically if the raw data was simulated with `full_system_test.sh`.
4848
* `SYNCMODE`: Run only reconstruction steps of the synchronous reconstruction.
49+
* Note that there is no `ASYNCMODE` but instead the `CTFINPUT` option already enforces asynchronous processing.
4950
* `NUMAGPUIDS`: NUMAID-aware GPU id selection. Needed for the full EPN configuration with 8 GPUs, 2 NUMA domains, 4 GPUs per domain.
5051
In this configuration, 2 instances of `dpl-workflow.sh` must run in parallel.
5152
To be used in combination with `NUMAID` to select the id per workflow.
@@ -56,6 +57,7 @@ The following options exist (some of the options are not used in all scripts, an
5657
* `EXTINPUT`: Receive input from raw FMQ channel instead of running o2-raw-file-reader.
5758
* 0: `dpl-workflow.sh` can run as standalone benchmark, and will read the input itself.
5859
* 1: To be used in combination with either `datadistribution.sh` or `raw-reader.sh` or with another DataDistribution instance.
60+
* `CTFINPUT`: Read input from CTF ROOT file. This option is incompatible to EXTINPUT=1. The CTF ROOT file can be stored via SAVECTF=1.
5961
* `NHBPERTF`: Time frame length (in HBF)
6062
* `GLOBALDPLOPT`: Global DPL workflow options appended to o2-dpl-run.
6163
* `EPNPIPELINES`: Set default EPN pipeline multiplicities.

prodtests/full-system-test/dpl-workflow.sh

Lines changed: 91 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ if [ "0$ALIENVLVL" == "0" ]; then
88
alienv --no-refresh load O2/latest
99
fi
1010

11+
# Set general arguments
1112
ARGS_ALL="--session default --severity $SEVERITY --shm-segment-id $NUMAID --shm-segment-size $SHMSIZE"
1213
if [ $EXTINPUT == 1 ] || [ $NUMAGPUIDS == 1 ]; then
1314
ARGS_ALL+=" --no-cleanup"
@@ -19,59 +20,49 @@ if [ $NORATELOG == 1 ]; then
1920
ARGS_ALL+=" --fairmq-rate-logging 0"
2021
fi
2122

22-
if [ $EXTINPUT == 1 ]; then
23-
CMD_X="B:TPC/RAWDATA;C:ITS/RAWDATA;D:TOF/RAWDATA;D:MFT/RAWDATA;E:FT0/RAWDATA;F:MID/RAWDATA;G:EMC/RAWDATA;H:PHS/RAWDATA"
24-
CMD_Y="name=readout-proxy,type=pull,method=connect,address=ipc://@stfb-to-dpl$1,transport=shmem,rateLogging=0"
25-
CMD_INPUT="o2-dpl-raw-proxy $ARGS_ALL --dataspec $CMD_X --channel-config $CMD_Y"
26-
else
27-
CMD_X="HBFUtils.nHBFPerTF=$NHBPERTF;"
28-
CMD_INPUT="o2-raw-file-reader-workflow $ARGS_ALL --configKeyValues $CMD_X --delay $TFDELAY --loop $NTIMEFRAMES --max-tf 0 --input-conf rawAll.cfg"
29-
fi
30-
31-
CMD_CTF_TYPE="none"
32-
if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 1 ]; then CMD_CTF_TYPE="both"; fi
33-
if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 0 ]; then CMD_CTF_TYPE="dict"; fi
34-
if [ $CREATECTFDICT == 0 ] && [ $SAVECTF == 1 ]; then CMD_CTF_TYPE="ctf"; fi
35-
CMD_CTF="o2-ctf-writer-workflow $ARGS_ALL --output-type $CMD_CTF_TYPE --onlyDet ITS,MFT,TPC,TOF,FT0,MID,EMC,PHS"
36-
if [ $CREATECTFDICT == 1 ] && [ $; then
37-
CMD_CTF+=" --save-dict-after 1"
38-
fi
39-
23+
# Set some individual workflow arguments depending on configuration
24+
TPC_INPUT=zsraw
25+
TPC_OUTPUT=tracks,clusters,disable-writer
26+
TPC_CONFIG=
27+
TPC_CONFIG_KEY=
28+
TOF_INPUT=raw
29+
TOF_OUTPUT=clusters,matching-info
30+
ITS_CONFIG=
31+
ITS_CONFIG_KEY=
4032
if [ $SYNCMODE == 1 ]; then
41-
CFG_X="fastMultConfig.cutMultClusLow=30;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500"
42-
ITS_CONFIG="--configKeyValues $CFG_X"
43-
TPC_CONFIG="GPU_global.synchronousProcessing=1;"
44-
CMD_MID="cat"
33+
ITS_CONFIG_KEY+="fastMultConfig.cutMultClusLow=30;fastMultConfig.cutMultClusHigh=2000;fastMultConfig.cutMultVtxHigh=500"
34+
TPC_CONFIG_KEY+=" GPU_global.synchronousProcessing=1;"
35+
fi
36+
if [ $CTFINPUT == 1 ]; then
37+
ITS_CONFIG+=" --async-phase"
4538
else
46-
ITS_CONFIG=
47-
TPC_CONFIG=
48-
CMD_MID="o2-mid-reco-workflow $ARGS_ALL --disable-root-output $DISABLE_MC"
39+
ITS_CONFIG+=" --entropy-encoding"
40+
TOF_OUTPUT+=",ctf"
41+
TPC_OUTPUT+=",encoded-clusters"
4942
fi
50-
TPC_CONFIG2=
5143

5244
if [ $GPUTYPE == "HIP" ]; then
5345
if [ $NUMAID == 0 ] || [ $NUMAGPUIDS == 0 ]; then
5446
export TIMESLICEOFFSET=0
5547
else
5648
export TIMESLICEOFFSET=$NGPUS
5749
fi
58-
TPC_CONFIG+="GPU_proc.deviceNum=0;GPU_global.mutexMemReg=true;"
59-
CFG_Y="ROCR_VISIBLE_DEVICES={timeslice${TIMESLICEOFFSET}}"
60-
TPC_CONFIG2+=" --environment $CFG_Y"
50+
TPC_CONFIG_KEY+="GPU_proc.deviceNum=0;GPU_global.mutexMemReg=true;"
51+
TPC_CONFIG+=" --environment \"ROCR_VISIBLE_DEVICES={timeslice${TIMESLICEOFFSET}}\""
6152
export HSA_NO_SCRATCH_RECLAIM=1
6253
#export HSA_TOOLS_LIB=/opt/rocm/lib/librocm-debug-agent.so.2
6354
else
64-
TPC_CONFIG+="GPU_proc.deviceNum=-2;"
55+
TPC_CONFIG_KEY+="GPU_proc.deviceNum=-2;"
6556
fi
6657

6758
if [ $GPUTYPE != "CPU" ]; then
68-
TPC_CONFIG+="GPU_proc.forceMemoryPoolSize=$GPUMEMSIZE;"
59+
TPC_CONFIG_KEY+="GPU_proc.forceMemoryPoolSize=$GPUMEMSIZE;"
6960
if [ $HOSTMEMSIZE == "0" ]; then
7061
HOSTMEMSIZE=$(( 1 << 30 ))
7162
fi
7263
fi
7364
if [ $HOSTMEMSIZE != "0" ]; then
74-
TPC_CONFIG+="GPU_proc.forceHostMemoryPoolSize=$HOSTMEMSIZE;"
65+
TPC_CONFIG_KEY+="GPU_proc.forceHostMemoryPoolSize=$HOSTMEMSIZE;"
7566
fi
7667

7768
if [ $EPNPIPELINES == 1 ]; then
@@ -84,25 +75,71 @@ else
8475
N_ITSDEC=1
8576
fi
8677

87-
$CMD_INPUT | \
88-
o2-itsmft-stf-decoder-workflow $ARGS_ALL --pipeline its-stf-decoder:$N_ITSDEC | \
89-
o2-itsmft-stf-decoder-workflow $ARGS_ALL --runmft true | \
90-
o2-its-reco-workflow $ARGS_ALL --trackerCA $DISABLE_MC --clusters-from-upstream --disable-root-output --entropy-encoding $ITS_CONFIG | \
91-
o2-itsmft-entropy-encoder-workflow $ARGS_ALL --runmft true | \
92-
o2-tpc-reco-workflow ${ARGS_ALL/--severity $SEVERITY/--severity $SEVERITY_TPC} --input-type=zsraw $DISABLE_MC --output-type tracks,clusters,encoded-clusters,disable-writer --pipeline tpc-tracker:$NGPUS,tpc-entropy-encoder:$N_TPCENT $TPC_CONFIG2 --configKeyValues "HBFUtils.nHBFPerTF=$NHBPERTF;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$TPC_CONFIG" | \
93-
o2-tpcits-match-workflow $ARGS_ALL --disable-root-input --disable-root-output $DISABLE_MC --pipeline itstpc-track-matcher:$N_TPCITS | \
94-
o2-ft0-flp-dpl-workflow $ARGS_ALL --disable-root-output | \
95-
o2-ft0-reco-workflow $ARGS_ALL --disable-root-input --disable-root-output $DISABLE_MC | \
96-
o2-ft0-entropy-encoder-workflow $ARGS_ALL | \
97-
o2-mid-raw-to-digits-workflow $ARGS_ALL | \
98-
$CMD_MID | \
99-
o2-mid-entropy-encoder-workflow $ARGS_ALL | \
100-
o2-phos-reco-workflow $ARGS_ALL --input-type raw --output-type cells | \
101-
o2-phos-entropy-encoder-workflow $ARGS_ALL |\
102-
o2-emcal-reco-workflow $ARGS_ALL --input-type raw --output-type cells --disable-root-output | \
103-
o2-emcal-entropy-encoder-workflow $ARGS_ALL |\
104-
o2-tof-compressor $ARGS_ALL | \
105-
o2-tof-reco-workflow $ARGS_ALL --configKeyValues "HBFUtils.nHBFPerTF=$NHBPERTF" --input-type raw --output-type ctf,clusters,matching-info --disable-root-output $DISABLE_MC | \
106-
o2-tpc-scdcalib-interpolation-workflow $ARGS_ALL --disable-root-output --disable-root-input | \
107-
$CMD_CTF | \
108-
o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --run
78+
# Input workflow
79+
if [ $CTFINPUT == 1 ]; then
80+
TPC_INPUT=compressed-clusters-ctf
81+
TOF_INPUT=digits
82+
WORKFLOW="o2-ctf-reader-workflow --ctf-input o2_ctf_0000000000.root $ARGS_ALL | "
83+
elif [ $EXTINPUT == 1 ]; then
84+
WORKFLOW="o2-dpl-raw-proxy $ARGS_ALL --dataspec \"B:TPC/RAWDATA;C:ITS/RAWDATA;D:TOF/RAWDATA;D:MFT/RAWDATA;E:FT0/RAWDATA;F:MID/RAWDATA;G:EMC/RAWDATA;H:PHS/RAWDATA\" --channel-config \"name=readout-proxy,type=pull,method=connect,address=ipc://@stfb-to-dpl,transport=shmem,rateLogging=0\" | "
85+
else
86+
WORKFLOW="o2-raw-file-reader-workflow $ARGS_ALL --configKeyValues \"HBFUtils.nHBFPerTF=$NHBPERTF;\" --delay $TFDELAY --loop $NTIMEFRAMES --max-tf 0 --input-conf rawAll.cfg | "
87+
fi
88+
89+
#Decoder workflows
90+
if [ $CTFINPUT == 0 ]; then
91+
WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --pipeline its-stf-decoder:$N_ITSDEC | "
92+
WORKFLOW+="o2-itsmft-stf-decoder-workflow $ARGS_ALL --runmft true | "
93+
WORKFLOW+="o2-ft0-flp-dpl-workflow $ARGS_ALL --disable-root-output | "
94+
WORKFLOW+="o2-mid-raw-to-digits-workflow $ARGS_ALL | "
95+
WORKFLOW+="o2-tof-compressor $ARGS_ALL | "
96+
fi
97+
98+
# Common workflows
99+
WORKFLOW+="o2-its-reco-workflow $ARGS_ALL --trackerCA $DISABLE_MC --clusters-from-upstream --disable-root-output $ITS_CONFIG --configKeyValues \"HBFUtils.nHBFPerTF=128;$ITS_CONFIG_KEY\" | "
100+
WORKFLOW+="o2-tpc-reco-workflow ${ARGS_ALL/--severity $SEVERITY/--severity $SEVERITY_TPC} --input-type=$TPC_INPUT $DISABLE_MC --output-type $TPC_OUTPUT --pipeline tpc-tracker:$NGPUS,tpc-entropy-encoder:$N_TPCENT $TPC_CONFIG --configKeyValues \"HBFUtils.nHBFPerTF=$NHBPERTF;GPU_global.deviceType=$GPUTYPE;GPU_proc.debugLevel=0;$TPC_CONFIG_KEY\" | "
101+
WORKFLOW+="o2-tpcits-match-workflow $ARGS_ALL --disable-root-input --disable-root-output $DISABLE_MC --pipeline itstpc-track-matcher:$N_TPCITS --configKeyValues \"HBFUtils.nHBFPerTF=128;\" | "
102+
WORKFLOW+="o2-ft0-reco-workflow $ARGS_ALL --disable-root-input --disable-root-output $DISABLE_MC --configKeyValues \"HBFUtils.nHBFPerTF=128;\" | "
103+
WORKFLOW+="o2-tof-reco-workflow $ARGS_ALL --configKeyValues \"HBFUtils.nHBFPerTF=$NHBPERTF\" --input-type $TOF_INPUT --output-type $TOF_OUTPUT --disable-root-input --disable-root-output $DISABLE_MC | "
104+
105+
# Workflows disabled in sync mode
106+
if [ $SYNCMODE == 0 ]; then
107+
WORKFLOW+="o2-mid-reco-workflow $ARGS_ALL --disable-root-output $DISABLE_MC | "
108+
# WORKFLOW+="o2-mft-reco-workflow $ARGS_ALL --clusters-from-upstream --disable-mc --disable-root-output --configKeyValues \"HBFUtils.nHBFPerTF=128;\" | " # Disabled since currently crashing
109+
WORKFLOW+="o2-primary-vertexing-workflow $ARGS_ALL --disable-mc --disable-root-input --disable-root-output --validate-with-ft0 | "
110+
WORKFLOW+="o2-secondary-vertexing-workflow $ARGS_ALL --disable-root-input --disable-root-output | "
111+
fi
112+
113+
# Workflows disabled in async mode
114+
if [ $CTFINPUT == 0 ]; then
115+
WORKFLOW+="o2-phos-reco-workflow $ARGS_ALL --input-type raw --output-type cells | "
116+
WORKFLOW+="o2-emcal-reco-workflow $ARGS_ALL --input-type raw --output-type cells --disable-root-output | "
117+
118+
WORKFLOW+="o2-itsmft-entropy-encoder-workflow $ARGS_ALL --runmft true | "
119+
WORKFLOW+="o2-ft0-entropy-encoder-workflow $ARGS_ALL | "
120+
WORKFLOW+="o2-mid-entropy-encoder-workflow $ARGS_ALL | "
121+
WORKFLOW+="o2-phos-entropy-encoder-workflow $ARGS_ALL | "
122+
WORKFLOW+="o2-emcal-entropy-encoder-workflow $ARGS_ALL | "
123+
124+
WORKFLOW+="o2-tpc-scdcalib-interpolation-workflow $ARGS_ALL --disable-root-output --disable-root-input | "
125+
126+
# Output workflow
127+
CTF_OUTPUT_TYPE="none"
128+
if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="both"; fi
129+
if [ $CREATECTFDICT == 1 ] && [ $SAVECTF == 0 ]; then CTF_OUTPUT_TYPE="dict"; fi
130+
if [ $CREATECTFDICT == 0 ] && [ $SAVECTF == 1 ]; then CTF_OUTPUT_TYPE="ctf"; fi
131+
CMD_CTF="o2-ctf-writer-workflow $ARGS_ALL --output-type $CTF_OUTPUT_TYPE --onlyDet ITS,MFT,TPC,TOF,FT0,MID,EMC,PHS"
132+
if [ $CREATECTFDICT == 1 ] && [ $; then
133+
CMD_CTF+=" --save-dict-after 1"
134+
fi
135+
WORKFLOW+="$CMD_CTF | "
136+
fi
137+
138+
# DPL run binary
139+
WORKFLOW+="o2-dpl-run $ARGS_ALL $GLOBALDPLOPT --run"
140+
141+
# Execute the command we have assembled
142+
#echo Running workflow:
143+
#echo $WORKFLOW | sed "s/| */|\n/g"
144+
#echo
145+
eval $WORKFLOW

prodtests/full-system-test/setenv.sh

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ if [ -z "$SYNCMODE" ]; then export SYNCMODE=0; fi # Run onl
2121
if [ -z "$NUMAID" ]; then export NUMAID=0; fi # SHM segment id to use for shipping data as well as set of GPUs to use (use 0 / 1 for 2 NUMA domains)
2222
if [ -z "$NUMAGPUIDS" ]; then export NUMAGPUIDS=0; fi # NUMAID-aware GPU id selection
2323
if [ -z "$EXTINPUT" ]; then export EXTINPUT=0; fi # Receive input from raw FMQ channel instead of running o2-raw-file-reader
24+
if [ -z "$CTFINPUT" ]; then export CTFINPUT=0; fi # Read input from CTF (incompatible to EXTINPUT=1)
2425
if [ -z "$NHBPERTF" ]; then export NHBPERTF=128; fi # Time frame length (in HBF)
2526
if [ -z "$GLOBALDPLOPT" ]; then export GLOBALDPLOPT=; fi # Global DPL workflow options appended at the end
2627
if [ -z "$EPNPIPELINES" ]; then export EPNPIPELINES=0; fi # Set default EPN pipeline multiplicities
@@ -30,3 +31,16 @@ if [ -z "$NORATELOG" ]; then export NORATELOG=1; fi # Disable
3031

3132
SEVERITY_TPC="info" # overrides severity for the tpc workflow
3233
DISABLE_MC="--disable-mc"
34+
35+
if [ $EXTINPUT == 1 ] && [ $CTFINPUT == 1 ]; then
36+
echo EXTINPUT and CTFINPUT are incompatible
37+
exit 1
38+
fi
39+
if [ $SAVECTF == 1 ] && [ $CTFINPUT == 1 ]; then
40+
echo SAVECTF and CTFINPUT are incompatible
41+
exit 1
42+
fi
43+
if [ $SYNCMODE == 1 ] && [ $CTFINPUT == 1 ]; then
44+
echo SYNCMODE and CTFINPUT are incompatible
45+
exit 1
46+
fi

0 commit comments

Comments
 (0)