From be367426a9b5801ce6b9d879281dd986a55119c9 Mon Sep 17 00:00:00 2001
From: domenico <domenico.giordano@cern.ch>
Date: Tue, 11 Feb 2025 19:12:40 +0100
Subject: [PATCH 01/14] [BMK-1590] update install.sh procedure

---
 common/install.sh | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/common/install.sh b/common/install.sh
index 79d2c3fb..dafc6f57 100755
--- a/common/install.sh
+++ b/common/install.sh
@@ -26,10 +26,16 @@ function install_prmon(){
 
 
 # do not for slc6 because of BMK-671
+yum makecache --refresh
+
 yum repolist
 if [ `grep -c "Scientific Linux CERN" /etc/redhat-release` -ne 1 ]; then 
     yum install -y  centos-release epel-release ; 
-    yum install -y  unzip bzip2 which man file util-linux gcc wget tar freetype perl jq python-pip && 
+    the_python_pip=python3-pip
+    if [ `grep -c "CentOS Linux" /etc/redhat-release` -eq 1 ]; then
+        the_python_pip=python-pip
+    fi
+    yum install -y  unzip bzip2 which man file util-linux gcc wget tar freetype perl jq ${the_python_pip} && 
     yum clean all; 
 fi
 
-- 
GitLab


From 37faa867608be1b875ba6d1c11f2bc7ca9905bf3 Mon Sep 17 00:00:00 2001
From: domenico <domenico.giordano@cern.ch>
Date: Tue, 11 Feb 2025 19:18:29 +0100
Subject: [PATCH 02/14] [BMK-1590] first commit of a pepper build

---
 gen/pepper-ma/CHANGELOG.md                    |  5 ++
 gen/pepper-ma/Dockerfile.append               | 23 +++++++++
 gen/pepper-ma/gen-pepper-ma.spec              | 10 ++++
 gen/pepper-ma/gen-pepper-ma/DESCRIPTION       |  1 +
 .../gen-pepper-ma/gen-pepper-ma-bmk.sh        | 51 +++++++++++++++++++
 gen/pepper-ma/gen-pepper-ma/parseResults.sh   | 43 ++++++++++++++++
 6 files changed, 133 insertions(+)
 create mode 100644 gen/pepper-ma/CHANGELOG.md
 create mode 100644 gen/pepper-ma/Dockerfile.append
 create mode 100644 gen/pepper-ma/gen-pepper-ma.spec
 create mode 100644 gen/pepper-ma/gen-pepper-ma/DESCRIPTION
 create mode 100755 gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh
 create mode 100644 gen/pepper-ma/gen-pepper-ma/parseResults.sh

diff --git a/gen/pepper-ma/CHANGELOG.md b/gen/pepper-ma/CHANGELOG.md
new file mode 100644
index 00000000..2ae90db1
--- /dev/null
+++ b/gen/pepper-ma/CHANGELOG.md
@@ -0,0 +1,5 @@
+# Changelog for Monte Carlo Generator Pepper
+
+## [Unreleased]
+
+
diff --git a/gen/pepper-ma/Dockerfile.append b/gen/pepper-ma/Dockerfile.append
new file mode 100644
index 00000000..45ea48c4
--- /dev/null
+++ b/gen/pepper-ma/Dockerfile.append
@@ -0,0 +1,23 @@
+# Add here any workload-specific Dockerfile instructions.
+# They will be appended to the Dockerfile generated from a common template.
+
+# Pepper dependencies
+RUN dnf install -y gcc-c++ git cmake openmpi openmpi-devel \
+   lhapdf-devel python3-lhapdf hdf5  hdf5-openmpi hdf5-openmpi-devel python3-h5py
+
+RUN dnf clean all
+
+RUN lhapdf install NNPDF30_nlo_as_0118
+
+RUN git clone --branch native --depth 1 https://gitlab.com/spice-mc/pepper.git pepper-native
+RUN <<EOF
+export PATH=/usr/lib64/openmpi/bin:$PATH
+export LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH
+
+cd pepper-native
+cmake -S . -B build \
+   -DCMAKE_BUILD_TYPE=Release \
+   -DCMAKE_INSTALL_PREFIX="/usr/local" \
+   -DPEPPER_VCL_DISABLED=1
+cmake --build build -j --target install
+EOF
\ No newline at end of file
diff --git a/gen/pepper-ma/gen-pepper-ma.spec b/gen/pepper-ma/gen-pepper-ma.spec
new file mode 100644
index 00000000..49aa8a43
--- /dev/null
+++ b/gen/pepper-ma/gen-pepper-ma.spec
@@ -0,0 +1,10 @@
+HEPWL_BMKEXE=gen-pepper-ma-bmk.sh
+HEPWL_BMKOPTS="-c2 -t 2 -m none"
+HEPWL_BMKDIR=gen-pepper-ma
+HEPWL_BMKDESCRIPTION="Monte Carlo Generator Pepper"
+HEPWL_DOCKERIMAGENAME=gen-pepper-ma-bmk
+HEPWL_DOCKERIMAGETAG=ci-v1.0
+HEPWL_CVMFSREPOS=NONE
+HEPWL_EXTEND_SFT_SPEC=""
+HEPWL_BMKOS="gitlab-registry.cern.ch/linuxsupport/alma9-base:20250108-1.x86_64"
+HEPWL_BUILDARCH="x86_64,aarch64"
diff --git a/gen/pepper-ma/gen-pepper-ma/DESCRIPTION b/gen/pepper-ma/gen-pepper-ma/DESCRIPTION
new file mode 100644
index 00000000..09dd595b
--- /dev/null
+++ b/gen/pepper-ma/gen-pepper-ma/DESCRIPTION
@@ -0,0 +1 @@
+DESCRIBE ME
\ No newline at end of file
diff --git a/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh b/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh
new file mode 100755
index 00000000..e78c5158
--- /dev/null
+++ b/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh
@@ -0,0 +1,51 @@
+#!/bin/bash
+
+# Copyright 2019-2020 CERN. See the COPYRIGHT file at the top-level
+# directory of this distribution. For licensing information, see the
+# COPYING file at the top-level directory of this distribution.
+
+#set -x # enable debug printouts
+
+#set -e # immediate exit on error
+
+# Function doOne must be defined in each benchmark
+# Input argument $1: process index (between 1 and $NCOPIES)
+# Return value: please return 0 if this workload copy was successful, 1 otherwise
+# The following variables are guaranteed to be defined and exported: NCOPIES, NTHREADS, NEVENTS_THREAD, BMKDIR, DEBUG
+# The function is started in process-specific working directory <basewdir>/proc_$1:
+# please store here the individual log files for each of the NCOPIES processes
+function doOne(){
+  if [ "$1" == "" ] || [ "$2" != "" ]; then echo "[doOne] ERROR! Invalid arguments '$@' to doOne"; return 1; fi
+  echo "[doOne ($1)] $(date) starting in $(pwd)"
+  mpiexec --version
+
+  COPY=$1
+  let RANK=${COPY}-1
+  let LOWERCPU=${RANK}*${NTHREADS}
+  let UPPERCPU=${COPY}*${NTHREADS}-1  
+  # --bind-to core:${LOWERCPU}-${UPPERCPU} #FIXME
+  mpiexec -n $NTHREADS /usr/local/bin/pepper -p "g g -> g g" -b $(( $NEVENTS_THREAD * $NTHREADS)) -n 4 > out_$1.log 2>&1
+  status=${?}
+  echo "[doOne ($1)] $(date) completed (status=$status)"
+  # Return 0 if this workload copy was successful, 1 otherwise
+  return $status
+}
+
+export PATH=/usr/lib64/openmpi/bin:$PATH
+export LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH
+
+# FixME: need to define the validation of the input parameters
+# when clear what to use
+
+# Default values for NCOPIES, NTHREADS, NEVENTS_THREAD must be set in each benchmark
+NEVENTS_THREAD=1000
+NTHREADS=4
+NCOPIES=1
+
+
+# Source the common benchmark driver
+if [ -f $(dirname $0)/bmk-driver.sh ]; then
+  . $(dirname $0)/bmk-driver.sh
+else
+  . $(dirname $0)/../../../common/bmk-driver.sh
+fi
diff --git a/gen/pepper-ma/gen-pepper-ma/parseResults.sh b/gen/pepper-ma/gen-pepper-ma/parseResults.sh
new file mode 100644
index 00000000..4d3877b0
--- /dev/null
+++ b/gen/pepper-ma/gen-pepper-ma/parseResults.sh
@@ -0,0 +1,43 @@
+# Copyright 2019-2020 CERN. See the COPYRIGHT file at the top-level
+# directory of this distribution. For licensing information, see the
+# COPYING file at the top-level directory of this distribution.
+
+parseResultsDir=$(cd $(dirname ${BASH_SOURCE}); pwd) # needed to locate parseResults.py
+
+# Function parseResults must be defined in each benchmark (or in a separate file parseResults.sh)
+# The following variables are guaranteed to be defined and exported: NCOPIES, NTHREADS, NEVENTS_THREAD, BMKDIR, DEBUG, APP
+# Logfiles have been stored in process-specific working directories <basewdir>/proc_<1...NCOPIES>
+# The function is started in the base working directory <basewdir>:
+# please store here the overall json summary file for all NCOPIES processes combined
+function parseResults(){
+  echo "[parseResults] current directory: $(pwd)"
+  # #-----------------------
+  # Parse results (bash)
+  #-----------------------
+  echo "[parseResults] bash parser starting"
+  # Parsing  Event Throughput: xxxx ev/s
+
+  grep_string="Time per event:"
+  sed_string="s@[^:]*: -> Time per event: [0-9\.]*e[0-9\-]*s (\([0-9\.]*e[0-9\-\+]*\) events per hour.*@\1@"
+
+  res_score=`grep -H "${grep_string}" proc_*/out_*.log | sed -e "${sed_string}" | awk 'BEGIN{sum=0;}  { val=$1/3600.; sum+=val; } END{printf "{\"gen\": %.4f}", sum}' || (echo "{}"; return 1)`
+  STATUS_1=$?
+
+  res_stat=`grep -H "${grep_string}" proc_*/out_*.log | sed -e "${sed_string}" | awk 'BEGIN{amin=1000000;amax=0;count=0;sum=0;}  { val=$1/3600.; a[count]=val; count+=1; sum+=val; if(amax<val) amax=val; if(amin>val) amin=val} END{n = asort(a); if (n % 2) {   median=a[(n + 1) / 2]; } else {median=(a[(n / 2)] + a[(n / 2) + 1]) / 2.0;}; printf "{\"avg\": %.4f, \"median\": %.4f, \"min\": %.4f, \"max\": %.4f, \"count\": %d}", sum/count, median, amin, amax, count}' || (echo "{}"; return 1)`
+  STATUS_2=$?
+
+  [[ "$STATUS_1" == "0" ]] && [[ "$STATUS_2" == "0" ]] 
+  STATUS=$?
+  echo "[parseResults] parsing completed (status=$STATUS)"
+  [[ "$STATUS" != "0" ]] && return $STATUS
+  #-----------------------
+  # Generate summary
+  #-----------------------
+  echo "[parseResults] generate report"
+  resJSON="{\"wl-scores\": $res_score, \"wl-stats\": $res_stat }"
+  echo "$resJSON" > $baseWDir/parser_output.json  
+  #-----------------------
+  # Return status
+  #-----------------------
+  return $shstatus
+}
-- 
GitLab


From 9819863670358f3e72fd151c17e718546d992286 Mon Sep 17 00:00:00 2001
From: domenico <domenico.giordano@cern.ch>
Date: Wed, 12 Feb 2025 12:40:43 +0100
Subject: [PATCH 03/14] [BMK-1590] cover also arm arch

---
 gen/pepper-ma/gen-pepper-ma.spec | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gen/pepper-ma/gen-pepper-ma.spec b/gen/pepper-ma/gen-pepper-ma.spec
index 49aa8a43..7e019650 100644
--- a/gen/pepper-ma/gen-pepper-ma.spec
+++ b/gen/pepper-ma/gen-pepper-ma.spec
@@ -6,5 +6,5 @@ HEPWL_DOCKERIMAGENAME=gen-pepper-ma-bmk
 HEPWL_DOCKERIMAGETAG=ci-v1.0
 HEPWL_CVMFSREPOS=NONE
 HEPWL_EXTEND_SFT_SPEC=""
-HEPWL_BMKOS="gitlab-registry.cern.ch/linuxsupport/alma9-base:20250108-1.x86_64"
+HEPWL_BMKOS="gitlab-registry.cern.ch/linuxsupport/alma9-base:20250108-1"
 HEPWL_BUILDARCH="x86_64,aarch64"
-- 
GitLab


From 93e7cb6fd0592d7e974a67f5ec047560c824b011 Mon Sep 17 00:00:00 2001
From: domenico <domenico.giordano@cern.ch>
Date: Wed, 12 Feb 2025 16:39:09 +0100
Subject: [PATCH 04/14] impose to run apptainer without priviledges

---
 build-executor/utility.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/build-executor/utility.sh b/build-executor/utility.sh
index 4bf5508a..c0cdbea4 100644
--- a/build-executor/utility.sh
+++ b/build-executor/utility.sh
@@ -483,14 +483,14 @@ function test_singularity_from_registry(){
     theimage=oras://${CIENV_SINGULARITYREGISTRY}/${HEPWL_DOCKERIMAGENAME}:${thetag}
     echo -e "\n[test_singularity_from_registry] Run WL in singularity to test the image ${theimage}"
     [ ! -e ${CIENV_JOBDIR}/results ] && mkdir -p ${CIENV_JOBDIR}/results && chmod a+rw ${CIENV_JOBDIR}/results
-    execute_command_retry singularity run -e -C $USEGPU -B ${CIENV_JOBDIR}/results:/results ${theimage} $HEPWL_BMKOPTS -d
+    execute_command_retry singularity run --no-privs -e -C $USEGPU -B ${CIENV_JOBDIR}/results:/results ${theimage} $HEPWL_BMKOPTS -d
     status=$?
     echo -e "\n[test_singularity_from_registry] Run WL in singularity (to test the image) via execute_command_retry - completed (status=$status)"
     if [ $status -ne 0 ]; then 
         rm -f ${theimage}.sif; 
         fail "[test_singularity_from_registry] Run WL in singularity"; 
     fi
-     execute_command_retry singularity run -e -C $USEGPU -B ${CIENV_JOBDIR}/results:/results ${theimage} $HEPWL_BMKOPTS -h > x86_image_folder_dump.txt
+     execute_command_retry singularity run --no-privs -e -C $USEGPU -B ${CIENV_JOBDIR}/results:/results ${theimage} $HEPWL_BMKOPTS -h > x86_image_folder_dump.txt
     echo "[test_singularity_from_registry] finished at $(date)"
     echo -e "\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
     echo -e "\n[utility.sh] ${FUNCNAME[0]} finished at $(date)\n"
-- 
GitLab


From 99a303803369eff95fc4cdba504de18d964c0bf3 Mon Sep 17 00:00:00 2001
From: domenico <domenico.giordano@cern.ch>
Date: Wed, 12 Feb 2025 16:39:45 +0100
Subject: [PATCH 05/14] use taskset to force threads

---
 .../gen-pepper-ma/gen-pepper-ma-bmk.sh        | 43 ++++++++++++++++++-
 1 file changed, 41 insertions(+), 2 deletions(-)

diff --git a/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh b/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh
index e78c5158..18269e29 100755
--- a/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh
+++ b/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh
@@ -23,14 +23,53 @@ function doOne(){
   let RANK=${COPY}-1
   let LOWERCPU=${RANK}*${NTHREADS}
   let UPPERCPU=${COPY}*${NTHREADS}-1  
-  # --bind-to core:${LOWERCPU}-${UPPERCPU} #FIXME
-  mpiexec -n $NTHREADS /usr/local/bin/pepper -p "g g -> g g" -b $(( $NEVENTS_THREAD * $NTHREADS)) -n 4 > out_$1.log 2>&1
+  COMMAND="mpiexec -n $NTHREADS /usr/local/bin/pepper -p "g g -> g g" -b $(( $NEVENTS_THREAD * $NTHREADS)) -n 4 > out_$1.log 2>&1"
+  # optionally use taskset to constrain to physical CPU cores (only relevant when not using the full machine)
+  [[ "${USETASKSET}" == "1" ]] && COMMAND="taskset -c ${LOWERCPU}-${UPPERCPU} ${COMMAND}"
+  echo "${COMMAND}"
+  eval ${COMMAND}
   status=${?}
   echo "[doOne ($1)] $(date) completed (status=$status)"
   # Return 0 if this workload copy was successful, 1 otherwise
   return $status
 }
 
+
+# Optional function validateInputArguments may be defined in each benchmark
+# If it exists, it is expected to set NCOPIES, NTHREADS, NEVENTS_THREAD
+# (based on previous defaults and on user inputs USER_NCOPIES, USER_NTHREADS, USER_NEVENTS_THREADS)
+# Input arguments: none
+# Return value: please return 0 if input arguments are valid, 1 otherwise
+# The following variables are guaranteed to be defined: NCOPIES, NTHREADS, NEVENTS_THREAD
+# (benchmark defaults) and USER_NCOPIES, USER_NTHREADS, USER_NEVENTS_THREADS (user inputs)
+function validateInputArguments(){
+  if [ "$1" != "" ]; then echo "[validateInputArguments] ERROR! Invalid arguments '$@' to validateInputArguments"; return 1; fi
+  echo "[validateInputArguments] validate input arguments"
+  # Number of copies and number of threads per copy
+  if [ "$USER_NTHREADS" != "" ] && [ "$USER_NCOPIES" != "" ]; then
+    NCOPIES=$USER_NCOPIES
+    NTHREADS=$USER_NTHREADS
+  elif [ "$USER_NTHREADS" != "" ]; then
+    NTHREADS=$USER_NTHREADS
+    NCOPIES=$((`nproc`/$NTHREADS))
+  elif [ "$USER_NCOPIES" != "" ]; then
+    NCOPIES=$USER_NCOPIES
+    NTHREADS=$((`nproc`/$NCOPIES))
+  fi
+  # Number of events per thread
+  if [ "$USER_NEVENTS_THREAD" != "" ]; then NEVENTS_THREAD=$USER_NEVENTS_THREAD; fi
+
+  USETASKSET=0
+  for arg in $EXTRA_ARGS; do
+    [ "${arg}" == "--taskset" ] && USETASKSET=1
+  done 
+
+  echo "[validateInputArguments] USETASKSET=${USETASKSET}"
+
+  # Return 0 if input arguments are valid, 1 otherwise
+  return 0 # no checks
+}
+
 export PATH=/usr/lib64/openmpi/bin:$PATH
 export LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH
 
-- 
GitLab


From 16dad401fc7cadf0b63de22198f87df1e998d1d0 Mon Sep 17 00:00:00 2001
From: domenico <domenico.giordano@cern.ch>
Date: Wed, 12 Feb 2025 16:44:51 +0100
Subject: [PATCH 06/14] enable taskset

---
 gen/pepper-ma/gen-pepper-ma.spec | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gen/pepper-ma/gen-pepper-ma.spec b/gen/pepper-ma/gen-pepper-ma.spec
index 7e019650..ec3569e3 100644
--- a/gen/pepper-ma/gen-pepper-ma.spec
+++ b/gen/pepper-ma/gen-pepper-ma.spec
@@ -1,5 +1,5 @@
 HEPWL_BMKEXE=gen-pepper-ma-bmk.sh
-HEPWL_BMKOPTS="-c2 -t 2 -m none"
+HEPWL_BMKOPTS="-c2 -t 2 -m none --extra-args '--taskset'"
 HEPWL_BMKDIR=gen-pepper-ma
 HEPWL_BMKDESCRIPTION="Monte Carlo Generator Pepper"
 HEPWL_DOCKERIMAGENAME=gen-pepper-ma-bmk
-- 
GitLab


From b942b1a34a4a713e7050d6365326e5824268588e Mon Sep 17 00:00:00 2001
From: domenico <domenico.giordano@cern.ch>
Date: Thu, 13 Feb 2025 11:55:40 +0100
Subject: [PATCH 07/14] fix quotes

---
 gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh b/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh
index 18269e29..29a72f54 100755
--- a/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh
+++ b/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh
@@ -23,7 +23,7 @@ function doOne(){
   let RANK=${COPY}-1
   let LOWERCPU=${RANK}*${NTHREADS}
   let UPPERCPU=${COPY}*${NTHREADS}-1  
-  COMMAND="mpiexec -n $NTHREADS /usr/local/bin/pepper -p "g g -> g g" -b $(( $NEVENTS_THREAD * $NTHREADS)) -n 4 > out_$1.log 2>&1"
+  COMMAND="mpiexec -n $NTHREADS /usr/local/bin/pepper -p 'g g -> g g' -b $(( $NEVENTS_THREAD * $NTHREADS)) -n 4 > out_$1.log 2>&1"
   # optionally use taskset to constrain to physical CPU cores (only relevant when not using the full machine)
   [[ "${USETASKSET}" == "1" ]] && COMMAND="taskset -c ${LOWERCPU}-${UPPERCPU} ${COMMAND}"
   echo "${COMMAND}"
-- 
GitLab


From d81a8eb614a307b6659959e42894646018c120e0 Mon Sep 17 00:00:00 2001
From: domenico <domenico.giordano@cern.ch>
Date: Thu, 13 Feb 2025 15:43:45 +0100
Subject: [PATCH 08/14] allow run as root to avoid mpiexec to fail

---
 gen/pepper-ma/gen-pepper-ma/DESCRIPTION          | 2 +-
 gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh | 5 ++++-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/gen/pepper-ma/gen-pepper-ma/DESCRIPTION b/gen/pepper-ma/gen-pepper-ma/DESCRIPTION
index 09dd595b..f5265691 100644
--- a/gen/pepper-ma/gen-pepper-ma/DESCRIPTION
+++ b/gen/pepper-ma/gen-pepper-ma/DESCRIPTION
@@ -1 +1 @@
-DESCRIBE ME
\ No newline at end of file
+#FIXME DESCRIBE ME
\ No newline at end of file
diff --git a/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh b/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh
index 29a72f54..a70e7dc6 100755
--- a/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh
+++ b/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh
@@ -23,7 +23,10 @@ function doOne(){
   let RANK=${COPY}-1
   let LOWERCPU=${RANK}*${NTHREADS}
   let UPPERCPU=${COPY}*${NTHREADS}-1  
-  COMMAND="mpiexec -n $NTHREADS /usr/local/bin/pepper -p 'g g -> g g' -b $(( $NEVENTS_THREAD * $NTHREADS)) -n 4 > out_$1.log 2>&1"
+  # NB
+  # --allow-run-as-root is needed because in singularity the user seen inside the container
+  # is not the container's user (bmkuser) but the host user, that could be root 
+  COMMAND="mpiexec --allow-run-as-root -n $NTHREADS /usr/local/bin/pepper -p 'g g -> g g' -b $(( $NEVENTS_THREAD * $NTHREADS)) -n 4 > out_$1.log 2>&1"
   # optionally use taskset to constrain to physical CPU cores (only relevant when not using the full machine)
   [[ "${USETASKSET}" == "1" ]] && COMMAND="taskset -c ${LOWERCPU}-${UPPERCPU} ${COMMAND}"
   echo "${COMMAND}"
-- 
GitLab


From b899286089956b79332bae900a2cbc13fc0a6c08 Mon Sep 17 00:00:00 2001
From: domenico <domenico.giordano@cern.ch>
Date: Fri, 14 Feb 2025 15:30:28 +0100
Subject: [PATCH 09/14] revert order taskset mpiexec to make them working

---
 .../gen-pepper-ma/gen-pepper-ma-bmk.sh        | 58 ++++++-------------
 1 file changed, 17 insertions(+), 41 deletions(-)

diff --git a/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh b/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh
index a70e7dc6..0694ae56 100755
--- a/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh
+++ b/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh
@@ -23,13 +23,25 @@ function doOne(){
   let RANK=${COPY}-1
   let LOWERCPU=${RANK}*${NTHREADS}
   let UPPERCPU=${COPY}*${NTHREADS}-1  
+
+  USETASKSET=0
+  for arg in $EXTRA_ARGS; do
+    [ "${arg}" == "--taskset" ] && USETASKSET=1
+  done 
+
+  echo "[doOne ($1)] $(date) [validateInputArguments] USETASKSET=${USETASKSET}"
+
+
   # NB
   # --allow-run-as-root is needed because in singularity the user seen inside the container
   # is not the container's user (bmkuser) but the host user, that could be root 
-  COMMAND="mpiexec --allow-run-as-root -n $NTHREADS /usr/local/bin/pepper -p 'g g -> g g' -b $(( $NEVENTS_THREAD * $NTHREADS)) -n 4 > out_$1.log 2>&1"
+  PEPPER_COMMAND="/usr/local/bin/pepper -p 'g g -> g g' -b $(( $NEVENTS_THREAD * $NTHREADS)) -n 4 > out_$1.log 2>&1"
+  COMMAND="mpiexec --allow-run-as-root -n $NTHREADS ${PEPPER_COMMAND}"
   # optionally use taskset to constrain to physical CPU cores (only relevant when not using the full machine)
-  [[ "${USETASKSET}" == "1" ]] && COMMAND="taskset -c ${LOWERCPU}-${UPPERCPU} ${COMMAND}"
-  echo "${COMMAND}"
+  if [[ "${USETASKSET}" == "1" ]]; then
+    COMMAND="mpiexec --allow-run-as-root -n $NTHREADS taskset -c ${LOWERCPU}-${UPPERCPU} ${PEPPER_COMMAND}"
+  fi
+  echo "[doOne ($1)] $(date) going to execute command: ${COMMAND}"
   eval ${COMMAND}
   status=${?}
   echo "[doOne ($1)] $(date) completed (status=$status)"
@@ -38,41 +50,6 @@ function doOne(){
 }
 
 
-# Optional function validateInputArguments may be defined in each benchmark
-# If it exists, it is expected to set NCOPIES, NTHREADS, NEVENTS_THREAD
-# (based on previous defaults and on user inputs USER_NCOPIES, USER_NTHREADS, USER_NEVENTS_THREADS)
-# Input arguments: none
-# Return value: please return 0 if input arguments are valid, 1 otherwise
-# The following variables are guaranteed to be defined: NCOPIES, NTHREADS, NEVENTS_THREAD
-# (benchmark defaults) and USER_NCOPIES, USER_NTHREADS, USER_NEVENTS_THREADS (user inputs)
-function validateInputArguments(){
-  if [ "$1" != "" ]; then echo "[validateInputArguments] ERROR! Invalid arguments '$@' to validateInputArguments"; return 1; fi
-  echo "[validateInputArguments] validate input arguments"
-  # Number of copies and number of threads per copy
-  if [ "$USER_NTHREADS" != "" ] && [ "$USER_NCOPIES" != "" ]; then
-    NCOPIES=$USER_NCOPIES
-    NTHREADS=$USER_NTHREADS
-  elif [ "$USER_NTHREADS" != "" ]; then
-    NTHREADS=$USER_NTHREADS
-    NCOPIES=$((`nproc`/$NTHREADS))
-  elif [ "$USER_NCOPIES" != "" ]; then
-    NCOPIES=$USER_NCOPIES
-    NTHREADS=$((`nproc`/$NCOPIES))
-  fi
-  # Number of events per thread
-  if [ "$USER_NEVENTS_THREAD" != "" ]; then NEVENTS_THREAD=$USER_NEVENTS_THREAD; fi
-
-  USETASKSET=0
-  for arg in $EXTRA_ARGS; do
-    [ "${arg}" == "--taskset" ] && USETASKSET=1
-  done 
-
-  echo "[validateInputArguments] USETASKSET=${USETASKSET}"
-
-  # Return 0 if input arguments are valid, 1 otherwise
-  return 0 # no checks
-}
-
 export PATH=/usr/lib64/openmpi/bin:$PATH
 export LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH
 
@@ -80,10 +57,9 @@ export LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH
 # when clear what to use
 
 # Default values for NCOPIES, NTHREADS, NEVENTS_THREAD must be set in each benchmark
-NEVENTS_THREAD=1000
+NEVENTS_THREAD=100000
 NTHREADS=4
-NCOPIES=1
-
+NCOPIES=$(( `nproc` / $NTHREADS ))
 
 # Source the common benchmark driver
 if [ -f $(dirname $0)/bmk-driver.sh ]; then
-- 
GitLab


From 4f76d80a5fbbe898a5ac01bb142e05d6cafa032c Mon Sep 17 00:00:00 2001
From: domenico <domenico.giordano@cern.ch>
Date: Mon, 17 Feb 2025 14:29:04 +0100
Subject: [PATCH 10/14] add doc

---
 gen/pepper-ma/gen-pepper-ma/DESCRIPTION | 31 ++++++++++++++++++++++++-
 1 file changed, 30 insertions(+), 1 deletion(-)

diff --git a/gen/pepper-ma/gen-pepper-ma/DESCRIPTION b/gen/pepper-ma/gen-pepper-ma/DESCRIPTION
index f5265691..2119a41a 100644
--- a/gen/pepper-ma/gen-pepper-ma/DESCRIPTION
+++ b/gen/pepper-ma/gen-pepper-ma/DESCRIPTION
@@ -1 +1,30 @@
-#FIXME DESCRIBE ME
\ No newline at end of file
+Runs the Pepper program with MPI (mpiexec) and optional CPU core binding (taskset).
+Pepper: https://gitlab.com/spice-mc/pepper
+
+**PEPPER (Portable Engine for the Production of Parton-level Event Records)**
+is a highly efficient parton-level event generator used to simulate high-energy physics processes at colliders such as the LHC.
+
+### Configuration via EXTRA_ARGS
+In addition to standard commands, Pepper can be customized using the `EXTRA_ARGS` environment variable.
+
+#### Available Options (via EXTRA_ARGS):
+  --taskset            Enable CPU core binding using 'taskset' to restrict execution to specific cores.
+  --process <name>     (-p) Define the process type for Pepper. Default: "g_g__g_g".
+  --gpus <N>           (-g) Specify the number of GPUs (currently unused).
+  --batches <N>        (-b) Specify the number of batches for the simulation.
+
+#### Examples:
+  `EXTRA_ARGS="--taskset"`
+  Enables CPU core binding.
+
+  `EXTRA_ARGS="--process 'special_case'"`
+  Runs Pepper with a custom process type.
+
+  `EXTRA_ARGS="--taskset --process 'custom_proc'"`
+  Uses `taskset` and a custom process.
+
+  `EXTRA_ARGS="--gpus 2"`
+  Specifies 2 GPUs (not yet implemented).
+
+  `EXTRA_ARGS="--batches 100"`
+  Sets the number of batches for the simulation to 100.
\ No newline at end of file
-- 
GitLab


From 3b58072a0c2a38f65652f2a344bf5a3935dede97 Mon Sep 17 00:00:00 2001
From: domenico <domenico.giordano@cern.ch>
Date: Mon, 17 Feb 2025 14:29:29 +0100
Subject: [PATCH 11/14] add extra_args config

---
 .../gen-pepper-ma/gen-pepper-ma-bmk.sh        | 62 +++++++++++++------
 1 file changed, 43 insertions(+), 19 deletions(-)

diff --git a/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh b/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh
index 0694ae56..b779986a 100755
--- a/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh
+++ b/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh
@@ -16,35 +16,62 @@
 # please store here the individual log files for each of the NCOPIES processes
 function doOne(){
   if [ "$1" == "" ] || [ "$2" != "" ]; then echo "[doOne] ERROR! Invalid arguments '$@' to doOne"; return 1; fi
-  echo "[doOne ($1)] $(date) starting in $(pwd)"
-  mpiexec --version
+  VAR_DOONE_1=$1
+  VAR_DOONE_2=$2
 
-  COPY=$1
-  let RANK=${COPY}-1
-  let LOWERCPU=${RANK}*${NTHREADS}
-  let UPPERCPU=${COPY}*${NTHREADS}-1  
+  echo "[doOne (${VAR_DOONE_1})] $(date) starting in $(pwd)"
 
-  USETASKSET=0
-  for arg in $EXTRA_ARGS; do
-    [ "${arg}" == "--taskset" ] && USETASKSET=1
-  done 
+  NGPUS=0
+  USE_TASKSET=0
+  PEPPER_PROCESS="g_g__g_g"
 
-  echo "[doOne ($1)] $(date) [validateInputArguments] USETASKSET=${USETASKSET}"
+  if [[ "EXTRA_ARGS" != "" ]]; then
+    echo "[doOne (${VAR_DOONE_1})] EXTRA_ARGS=$EXTRA_ARGS"
+    # parse extra args if any
+    options=$(getopt -a -n gen-pepper-ma-bmk -o g:p:b: --long taskset,process:,gpus:,batches: -- $EXTRA_ARGS)
+    echo "options $options"
+    eval set -- "$options"
+    while [[ $# -gt 0 ]]; do
+      case "$1" in
+        --taskset ) USE_TASKSET=1; shift;;
+        --process | -p ) PEPPER_PROCESS="$2"; shift 2;;
+        --gpus | -g ) NGPUS="$2"; shift 2;;
+        --batches | -b ) NUMBER_OF_BATCHES="$2"; shift 2;;  # New batches parameter
+        -- ) shift; break;;
+        * ) break ;;  # Handle unexpected arguments safely
+      esac
+    done
 
+    echo "[doOne (${VAR_DOONE_1})] USE_TASKSET=${USE_TASKSET}"
+    echo "[doOne (${VAR_DOONE_1})] PEPPER_PROCESS=${PEPPER_PROCESS}"
+    echo "[doOne (${VAR_DOONE_1})] NGPUS=${NGPUS}"
+    echo "[doOne (${VAR_DOONE_1})] number_of_batches=${NUMBER_OF_BATCHES}"
 
+  fi
+
+  # Here start the process of grouping the cores from 0 to nproc-1
+  # in groups of NTHREADS cores, in case the TASKSET option is used
+  COPY=${VAR_DOONE_1}
+  RANK=$((COPY - 1))
+  LOWERCPU=$((RANK * NTHREADS))
+  UPPERCPU=$((COPY * NTHREADS - 1))
+
+  PEPPER_COMMAND="/usr/local/bin/pepper -p ${PEPPER_PROCESS} -b $(( $NEVENTS_THREAD * $NTHREADS)) -n ${NUMBER_OF_BATCHES} > out_${VAR_DOONE_1}.log 2>&1"
+  
   # NB
   # --allow-run-as-root is needed because in singularity the user seen inside the container
   # is not the container's user (bmkuser) but the host user, that could be root 
-  PEPPER_COMMAND="/usr/local/bin/pepper -p 'g g -> g g' -b $(( $NEVENTS_THREAD * $NTHREADS)) -n 4 > out_$1.log 2>&1"
   COMMAND="mpiexec --allow-run-as-root -n $NTHREADS ${PEPPER_COMMAND}"
+
   # optionally use taskset to constrain to physical CPU cores (only relevant when not using the full machine)
-  if [[ "${USETASKSET}" == "1" ]]; then
+  if [[ "${USE_TASKSET}" == "1" ]]; then
     COMMAND="mpiexec --allow-run-as-root -n $NTHREADS taskset -c ${LOWERCPU}-${UPPERCPU} ${PEPPER_COMMAND}"
   fi
-  echo "[doOne ($1)] $(date) going to execute command: ${COMMAND}"
+  
+  echo "[doOne (${VAR_DOONE_1})] $(date) going to execute command: ${COMMAND}"
   eval ${COMMAND}
   status=${?}
-  echo "[doOne ($1)] $(date) completed (status=$status)"
+  echo "[doOne (${VAR_DOONE_1})] $(date) completed (status=$status)"
   # Return 0 if this workload copy was successful, 1 otherwise
   return $status
 }
@@ -53,11 +80,8 @@ function doOne(){
 export PATH=/usr/lib64/openmpi/bin:$PATH
 export LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH
 
-# FixME: need to define the validation of the input parameters
-# when clear what to use
-
 # Default values for NCOPIES, NTHREADS, NEVENTS_THREAD must be set in each benchmark
-NEVENTS_THREAD=100000
+NEVENTS_THREAD=10000
 NTHREADS=4
 NCOPIES=$(( `nproc` / $NTHREADS ))
 
-- 
GitLab


From c47d669aa1aee0fb649e3f2213ef230aa6b5e431 Mon Sep 17 00:00:00 2001
From: domenico <domenico.giordano@cern.ch>
Date: Mon, 17 Feb 2025 14:29:56 +0100
Subject: [PATCH 12/14] modify spec

---
 gen/pepper-ma/Dockerfile.append  | 2 +-
 gen/pepper-ma/gen-pepper-ma.spec | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/gen/pepper-ma/Dockerfile.append b/gen/pepper-ma/Dockerfile.append
index 45ea48c4..c0c3ed2c 100644
--- a/gen/pepper-ma/Dockerfile.append
+++ b/gen/pepper-ma/Dockerfile.append
@@ -9,7 +9,7 @@ RUN dnf clean all
 
 RUN lhapdf install NNPDF30_nlo_as_0118
 
-RUN git clone --branch native --depth 1 https://gitlab.com/spice-mc/pepper.git pepper-native
+RUN git clone --branch native --depth 2 https://gitlab.com/spice-mc/pepper.git pepper-native
 RUN <<EOF
 export PATH=/usr/lib64/openmpi/bin:$PATH
 export LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH
diff --git a/gen/pepper-ma/gen-pepper-ma.spec b/gen/pepper-ma/gen-pepper-ma.spec
index ec3569e3..cb67c612 100644
--- a/gen/pepper-ma/gen-pepper-ma.spec
+++ b/gen/pepper-ma/gen-pepper-ma.spec
@@ -1,5 +1,5 @@
 HEPWL_BMKEXE=gen-pepper-ma-bmk.sh
-HEPWL_BMKOPTS="-c2 -t 2 -m none --extra-args '--taskset'"
+HEPWL_BMKOPTS="-c 2 -t 2 -m none --extra-args '--process=g_g__g_g --taskset -b 4'"
 HEPWL_BMKDIR=gen-pepper-ma
 HEPWL_BMKDESCRIPTION="Monte Carlo Generator Pepper"
 HEPWL_DOCKERIMAGENAME=gen-pepper-ma-bmk
-- 
GitLab


From 9361e3774752682febe680a64a8ccdb1b7341fba Mon Sep 17 00:00:00 2001
From: domenico <domenico.giordano@cern.ch>
Date: Mon, 17 Feb 2025 15:25:49 +0100
Subject: [PATCH 13/14] fix default number of batches

---
 gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh | 1 +
 1 file changed, 1 insertion(+)

diff --git a/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh b/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh
index b779986a..a32ca259 100755
--- a/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh
+++ b/gen/pepper-ma/gen-pepper-ma/gen-pepper-ma-bmk.sh
@@ -24,6 +24,7 @@ function doOne(){
   NGPUS=0
   USE_TASKSET=0
   PEPPER_PROCESS="g_g__g_g"
+  NUMBER_OF_BATCHES=4
 
   if [[ "EXTRA_ARGS" != "" ]]; then
     echo "[doOne (${VAR_DOONE_1})] EXTRA_ARGS=$EXTRA_ARGS"
-- 
GitLab


From d231a4d2ab3bdf81322fb920b8b1685c96e77a5d Mon Sep 17 00:00:00 2001
From: hep-wl-merge-request
 <project_60276_bot_a657ddd3683a1a32409e6efb4de82f12@noreply.gitlab.cern.ch>
Date: Mon, 17 Feb 2025 14:44:36 +0000
Subject: [PATCH 14/14] update WL list

---
 WL_list.md | 41 ++++++++++++++++++++++++-----------------
 1 file changed, 24 insertions(+), 17 deletions(-)

diff --git a/WL_list.md b/WL_list.md
index bb8de385..22f849b9 100644
--- a/WL_list.md
+++ b/WL_list.md
@@ -21,23 +21,24 @@ where:
 
 | Experiment |  WL repo  | SIF image registry | Docker image registry| Latest Built Version | Latest Pipeline status | Unpacked container size | 
 | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
-| alice | [digi-reco-core-run3-ma][alice_digi-reco-core-run3-ma_code] | [click for link][alice_digi-reco-core-run3-ma_sif] | [click for link][alice_digi-reco-core-run3-ma_img] | [v3.0][alice_digi-reco-core-run3-ma_pipelink] | ![ci][alice_digi-reco-core-run3-ma_pipeline]|   16G   |
-| atlas | [gen_sherpa-ma][atlas_gen_sherpa-ma_code] | [click for link][atlas_gen_sherpa-ma_sif] | [click for link][atlas_gen_sherpa-ma_img] | [v2.2][atlas_gen_sherpa-ma_pipelink] | ![ci][atlas_gen_sherpa-ma_pipeline]|    22G    |
-| atlas | [reco_mt-ma][atlas_reco_mt-ma_code] | [click for link][atlas_reco_mt-ma_sif] | [click for link][atlas_reco_mt-ma_img] | [v2.3][atlas_reco_mt-ma_pipelink] | ![ci][atlas_reco_mt-ma_pipeline]|         22G         |
-| atlas | [sim_mt-ma][atlas_sim_mt-ma_code] | [click for link][atlas_sim_mt-ma_sif] | [click for link][atlas_sim_mt-ma_img] | [v2.1][atlas_sim_mt-ma_pipelink] | ![ci][atlas_sim_mt-ma_pipeline]|        20G        |
-| belle2 | [gen-sim-reco-ma][belle2_gen-sim-reco-ma_code] | [click for link][belle2_gen-sim-reco-ma_sif] | [click for link][belle2_gen-sim-reco-ma_img] | [v2.2][belle2_gen-sim-reco-ma_pipelink] | ![ci][belle2_gen-sim-reco-ma_pipeline]|                   3.4G                   |
-| cms | [digi-run3-ma][cms_digi-run3-ma_code] | [click for link][cms_digi-run3-ma_sif] | [click for link][cms_digi-run3-ma_img] | [v1.1][cms_digi-run3-ma_pipelink] | ![ci][cms_digi-run3-ma_pipeline]|                5.8G                |
-| cms | [flowsim][cms_flowsim_code] | [click for link][cms_flowsim_sif] | [click for link][cms_flowsim_img] | [ci-v0.1][cms_flowsim_pipelink] | ![ci][cms_flowsim_pipeline]| 8.4G |
-| cms | [gen-sim-run3-ma][cms_gen-sim-run3-ma_code] | [click for link][cms_gen-sim-run3-ma_sif] | [click for link][cms_gen-sim-run3-ma_img] | [v1.1][cms_gen-sim-run3-ma_pipelink] | ![ci][cms_gen-sim-run3-ma_pipeline]|                              6.2G                              |
-| cms | [hlt-ma][cms_hlt-ma_code] | [click for link][cms_hlt-ma_sif] | [click for link][cms_hlt-ma_img] | [v0.2][cms_hlt-ma_pipelink] | ![ci][cms_hlt-ma_pipeline]|                      19G                      |
-| cms | [mlpf][cms_mlpf_code] | [click for link][cms_mlpf_sif] | [click for link][cms_mlpf_img] | [ci-v0.4][cms_mlpf_pipelink] | ![ci][cms_mlpf_pipeline]|  7.6G  |
-| cms | [reco-run3-ma][cms_reco-run3-ma_code] | [click for link][cms_reco-run3-ma_sif] | [click for link][cms_reco-run3-ma_img] | [v1.2][cms_reco-run3-ma_pipelink] | ![ci][cms_reco-run3-ma_pipeline]|                 6.5G                 |
-| hello | [world-c7-ma][hello_world-c7-ma_code] | [click for link][hello_world-c7-ma_sif] | [click for link][hello_world-c7-ma_img] | [v1.0][hello_world-c7-ma_pipelink] | ![ci][hello_world-c7-ma_pipeline]|         759M         |
-| hello | [world-cs8-ma][hello_world-cs8-ma_code] | [click for link][hello_world-cs8-ma_sif] | [click for link][hello_world-cs8-ma_img] | [ci-v1.0][hello_world-cs8-ma_pipelink] | ![ci][hello_world-cs8-ma_pipeline]|                    518M                    |
-| igwn | [pe][igwn_pe_code] | [click for link][igwn_pe_sif] | [click for link][igwn_pe_img] | [v0.5][igwn_pe_pipelink] | ![ci][igwn_pe_pipeline]|           2.9G           |
-| juno | [gen-sim-reco][juno_gen-sim-reco_code] | [click for link][juno_gen-sim-reco_sif] | [click for link][juno_gen-sim-reco_img] | [v3.1][juno_gen-sim-reco_pipelink] | ![ci][juno_gen-sim-reco_pipeline]|      3.3G      |
-| lhcb | [sim-run3-ma][lhcb_sim-run3-ma_code] | [click for link][lhcb_sim-run3-ma_sif] | [click for link][lhcb_sim-run3-ma_img] | [v1.1][lhcb_sim-run3-ma_pipelink] | ![ci][lhcb_sim-run3-ma_pipeline]|                  5.4G                  |
-| mg5amc | [madgraph4gpu-2022][mg5amc_madgraph4gpu-2022_code] | [click for link][mg5amc_madgraph4gpu-2022_sif] | [click for link][mg5amc_madgraph4gpu-2022_img] | [ci-v0.10][mg5amc_madgraph4gpu-2022_pipelink] | ![ci][mg5amc_madgraph4gpu-2022_pipeline]|                          11G                          |
+| alice | [digi-reco-core-run3-ma][alice_digi-reco-core-run3-ma_code] | [click for link][alice_digi-reco-core-run3-ma_sif] | [click for link][alice_digi-reco-core-run3-ma_img] | [v3.0][alice_digi-reco-core-run3-ma_pipelink] | ![ci][alice_digi-reco-core-run3-ma_pipeline]|    16G    |
+| atlas | [gen_sherpa-ma][atlas_gen_sherpa-ma_code] | [click for link][atlas_gen_sherpa-ma_sif] | [click for link][atlas_gen_sherpa-ma_img] | [v2.2][atlas_gen_sherpa-ma_pipelink] | ![ci][atlas_gen_sherpa-ma_pipeline]|     22G     |
+| atlas | [reco_mt-ma][atlas_reco_mt-ma_code] | [click for link][atlas_reco_mt-ma_sif] | [click for link][atlas_reco_mt-ma_img] | [v2.3][atlas_reco_mt-ma_pipelink] | ![ci][atlas_reco_mt-ma_pipeline]|          22G          |
+| atlas | [sim_mt-ma][atlas_sim_mt-ma_code] | [click for link][atlas_sim_mt-ma_sif] | [click for link][atlas_sim_mt-ma_img] | [v2.1][atlas_sim_mt-ma_pipelink] | ![ci][atlas_sim_mt-ma_pipeline]|         20G         |
+| belle2 | [gen-sim-reco-ma][belle2_gen-sim-reco-ma_code] | [click for link][belle2_gen-sim-reco-ma_sif] | [click for link][belle2_gen-sim-reco-ma_img] | [v2.2][belle2_gen-sim-reco-ma_pipelink] | ![ci][belle2_gen-sim-reco-ma_pipeline]|                    3.4G                    |
+| cms | [digi-run3-ma][cms_digi-run3-ma_code] | [click for link][cms_digi-run3-ma_sif] | [click for link][cms_digi-run3-ma_img] | [v1.1][cms_digi-run3-ma_pipelink] | ![ci][cms_digi-run3-ma_pipeline]|                 5.8G                 |
+| cms | [flowsim][cms_flowsim_code] | [click for link][cms_flowsim_sif] | [click for link][cms_flowsim_img] | [ci-v0.1][cms_flowsim_pipelink] | ![ci][cms_flowsim_pipeline]|  8.4G  |
+| cms | [gen-sim-run3-ma][cms_gen-sim-run3-ma_code] | [click for link][cms_gen-sim-run3-ma_sif] | [click for link][cms_gen-sim-run3-ma_img] | [v1.1][cms_gen-sim-run3-ma_pipelink] | ![ci][cms_gen-sim-run3-ma_pipeline]|                               6.2G                               |
+| cms | [hlt-ma][cms_hlt-ma_code] | [click for link][cms_hlt-ma_sif] | [click for link][cms_hlt-ma_img] | [v0.2][cms_hlt-ma_pipelink] | ![ci][cms_hlt-ma_pipeline]|                       19G                       |
+| cms | [mlpf][cms_mlpf_code] | [click for link][cms_mlpf_sif] | [click for link][cms_mlpf_img] | [ci-v0.4][cms_mlpf_pipelink] | ![ci][cms_mlpf_pipeline]|   7.6G   |
+| cms | [reco-run3-ma][cms_reco-run3-ma_code] | [click for link][cms_reco-run3-ma_sif] | [click for link][cms_reco-run3-ma_img] | [v1.2][cms_reco-run3-ma_pipelink] | ![ci][cms_reco-run3-ma_pipeline]|                  6.5G                  |
+| gen | [pepper-ma][gen_pepper-ma_code] | [click for link][gen_pepper-ma_sif] | [click for link][gen_pepper-ma_img] | [ci-v1.0][gen_pepper-ma_pipelink] | ![ci][gen_pepper-ma_pipeline]| 1.1G |
+| hello | [world-c7-ma][hello_world-c7-ma_code] | [click for link][hello_world-c7-ma_sif] | [click for link][hello_world-c7-ma_img] | [v1.0][hello_world-c7-ma_pipelink] | ![ci][hello_world-c7-ma_pipeline]|          759M          |
+| hello | [world-cs8-ma][hello_world-cs8-ma_code] | [click for link][hello_world-cs8-ma_sif] | [click for link][hello_world-cs8-ma_img] | [ci-v1.0][hello_world-cs8-ma_pipelink] | ![ci][hello_world-cs8-ma_pipeline]|                     518M                     |
+| igwn | [pe][igwn_pe_code] | [click for link][igwn_pe_sif] | [click for link][igwn_pe_img] | [v0.5][igwn_pe_pipelink] | ![ci][igwn_pe_pipeline]|            2.9G            |
+| juno | [gen-sim-reco][juno_gen-sim-reco_code] | [click for link][juno_gen-sim-reco_sif] | [click for link][juno_gen-sim-reco_img] | [v3.1][juno_gen-sim-reco_pipelink] | ![ci][juno_gen-sim-reco_pipeline]|       3.3G       |
+| lhcb | [sim-run3-ma][lhcb_sim-run3-ma_code] | [click for link][lhcb_sim-run3-ma_sif] | [click for link][lhcb_sim-run3-ma_img] | [v1.1][lhcb_sim-run3-ma_pipelink] | ![ci][lhcb_sim-run3-ma_pipeline]|                   5.4G                   |
+| mg5amc | [madgraph4gpu-2022][mg5amc_madgraph4gpu-2022_code] | [click for link][mg5amc_madgraph4gpu-2022_sif] | [click for link][mg5amc_madgraph4gpu-2022_img] | [ci-v0.10][mg5amc_madgraph4gpu-2022_pipelink] | ![ci][mg5amc_madgraph4gpu-2022_pipeline]|                           11G                           |
 
 [alice_digi-reco-core-run3-ma_code]: https://gitlab.cern.ch/hep-benchmarks/hep-workloads/-/blob/master/alice/digi-reco-core-run3-ma/alice-digi-reco-core-run3-ma
 [alice_digi-reco-core-run3-ma_sif]: https://gitlab.cern.ch/hep-benchmarks/hep-workloads-sif/container_registry/?search%5B%5D=alice-digi-reco-core-run3-ma-bmk
@@ -105,6 +106,12 @@ where:
 [cms_reco-run3-ma_pipelink]: https://gitlab.cern.ch/hep-benchmarks/hep-workloads/-/pipelines/6452700
 [cms_reco-run3-ma_pipeline]: https://gitlab.cern.ch/hep-benchmarks/hep-workloads/badges/qa-build-cms-reco-run3-ma/pipeline.svg
 
+[gen_pepper-ma_code]: https://gitlab.cern.ch/hep-benchmarks/hep-workloads/-/blob/master/gen/pepper-ma/gen-pepper-ma
+[gen_pepper-ma_sif]: https://gitlab.cern.ch/hep-benchmarks/hep-workloads-sif/container_registry/?search%5B%5D=gen-pepper-ma-bmk
+[gen_pepper-ma_img]: https://gitlab.cern.ch/hep-benchmarks/hep-workloads/container_registry/?search%5B%5D=gen-pepper-ma-bmk
+[gen_pepper-ma_pipelink]: https://gitlab.cern.ch/hep-benchmarks/hep-workloads/-/pipelines/10405484
+[gen_pepper-ma_pipeline]: https://gitlab.cern.ch/hep-benchmarks/hep-workloads/badges/qa-build-gen-pepper-ma/pipeline.svg
+
 [hello_world-c7-ma_code]: https://gitlab.cern.ch/hep-benchmarks/hep-workloads/-/blob/master/hello/world-c7-ma/hello-world-c7-ma
 [hello_world-c7-ma_sif]: https://gitlab.cern.ch/hep-benchmarks/hep-workloads-sif/container_registry/?search%5B%5D=hello-world-c7-ma-bmk
 [hello_world-c7-ma_img]: https://gitlab.cern.ch/hep-benchmarks/hep-workloads/container_registry/?search%5B%5D=hello-world-c7-ma-bmk
-- 
GitLab