Preparations

We will run a couple of SLURM script with different runtimes. To prepare for this, let us compile a simple hello-world binary first.

mkdir -p /fsx/logs
cat >  native-build.sbatch << FILEEND 
#!/bin/bash
#SBATCH --job-name=hello-world-build
#SBATCH --ntasks=1
#SBATCH --output=/fsx/logs/%x_%j.out

mkdir -p /fsx/src
mkdir -p /fsx/bin

echo "## Create source: /fsx/src/hello.c"
cat > /fsx/src/hello.c << EOF
#include <mpi.h>
#include <stdio.h>

int main(int argc, char** argv) {
    // Initialize the MPI environment
    MPI_Init(NULL, NULL);

    // Get the number of processes
    int world_size;
    MPI_Comm_size(MPI_COMM_WORLD, &world_size);

    // Get the rank of the process
    int world_rank;
    MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);

    // Get the name of the processor
    char processor_name[MPI_MAX_PROCESSOR_NAME];
    int name_len;
    MPI_Get_processor_name(processor_name, &name_len);

    // Print off a hello world message
    printf("Hello world from processor %s, rank %d out of %d processors\n",
           processor_name, world_rank, world_size);

    // Finalize the MPI environment.
    MPI_Finalize();
}
EOF
echo "## load intelmpi module"
module load intelmpi
unset I_MPI_PMI_LIBRARY
echo "## Compile binary"
set -x
mpicc -o /fsx/bin/hello /fsx/src/hello.c
FILEEND

Submit and Check logs

Submitting the job will create directories to store the source and the binaries, load intelmpi (installed on the host) and build the binaries.

sbatch native-build.sbatch
sleep 2
cat /fsx/logs/hello-world-build_*.out