[[PageOutline]] = Before running your job = Before you run your job you should consider the following in order for your job to run most efficiently on Cypress. == Tools for implementing various levels of job parallelism on Cypress == See [wiki:IntroToMulti-Processing2025August Module 2 of 8 - Introduction to Multi-processing] for more information on tools available on Cypress for creating and preparing your jobs at the various levels of parallelism - programming, single job, and multi-job. == Review your software provider's information == See [wiki:Workshops/IntroToMulti-Processing2025August#CodesforMulti-CoresMulti-Nodes.Offloading Codes for Multi-Cores, Multi-Nodes. Offloading]. == Parallelism at the application level == Refer to the following table to determine what programming model to use based on the type of algorithm your job requires. ||= Algorithm Type =||= Programming Model =||= Hardware Used =||= Examples =|| ||Single Instruction Multiple data (SIMD) ||Compiler vectorization ||Intel Advanced Vector Extensions (AVX), 256-bit vector processor ||See [https://wiki.hpc.tulane.edu/trac/wiki/cypress#MathLibraries Math Libraries] || ||Multithreaded (shared memory) ||OpenMP ||1 Node, >=2 cores ||See [wiki:cypress/Programming/OpenMp OpenMP] || ||Problem domain decomposition ||MPI ||>=2 Nodes ||See [wiki:cypress/Programming/Mpi MPI]|| ||Massively Parallel, Single Instruction Multiple Threads (SIMT) ||#pragma offload (GPU kernels not available on Cypress) ||Coprocessors - !XeonPhi (GPUs not available on Cypress) ||See [wiki:cypress/XeonPhi XeonPhi], [wiki:Workshops/cypress/OffloadingWithOpenMP Offloading to Accelerator] || ||Hybrid Parallel ||MPI + OpenMP ||>=2 Nodes ||See [wiki:cypress/using#HybridJobs Hybrid Jobs] job script|| == Parallelism at the job scripting level == * Many independent tasks See [wiki:IntroToMulti-Processing2025August#RunningManySerialParallelJobs Running Many Serial/Parallel Jobs] if your computational workload can be split easily - or perhaps with some minimal or one-time effort - into many independent tasks, requiring minimal communication. For more information. * Many dependent tasks Otherwise, see [wiki:cypress/Programming/Mpi MPI] if your computational workload includes too many tasks to run on a single node '''and''' the tasks require a significant level of inter - communication '''during''' the computation.