HPC application development: Fortran

If you want to develop HPC applications in Fortran, you can consider following the following training sessions.

graph TD Best_practices_for_scientific_computing[Best practices for scientific computing] --> Version_control_with_git[Version control with Git] Best_practices_for_scientific_computing --> Linux_intro[Linux introduction] Linux_intro --> HPC_intro[HPC introduction] HPC_intro --> Containers_on_HPC[Containers on HPC] Best_practices_for_scientific_computing --> Fortran_for_programmers[Fortran for programmers] Fortran_for_programmers --> Parallel_programming_with_OpenMP[Parallel programming with OpenMP] Parallel_programming_with_OpenMP --> Parallel_programming_with_MPI[Parallel programming with MPI] Parallel_programming_with_OpenMP --> Defensive_programming_and_debugging[Defensive programming and debugging] Parallel_programming_with_MPI --> Defensive_programming_and_debugging Defensive_programming_and_debugging --> Code_optimization[Code optimization] Parallel_programming_with_OpenMP -. optional .-> GPU_offloading_with_OpenMP[GPU offloading with OpenMP] classDef optional fill:#f7f7f7,stroke:#777,stroke-dasharray: 4 4,color:#333 class GPU_offloading_with_OpenMP optional click Best_practices_for_scientific_computing "https://gjbex.github.io/Best-practices-for-scientific-computing/" "Best practices for scientific computing" click Version_control_with_git "https://gjbex.github.io/Version-control-with-git" "Version control with Git" click Linux_intro "https://gjbex.github.io/Training-sessions/linux_intro" "Linux introduction" click HPC_intro "https://gjbex.github.io/Training-sessions/hpc_intro" "HPC introduction" click Containers_on_HPC "https://gjbex.github.io/Containers-for-HPC/" "Containers on HPC" click Fortran_for_programmers "https://gjbex.github.io/Fortran-for-programmers/" "Fortran for programmers" click Defensive_programming_and_debugging "https://gjbex.github.io/Defensive-programming-and-debugging/" "Defensive programming and debugging" click Parallel_programming_with_OpenMP "https://gjbex.github.io/Training-sessions/parallel_programming_with_openmp" "Parallel programming with OpenMP" click Parallel_programming_with_MPI "https://gjbex.github.io/Training-sessions/parallel_programming_with_mpi" "Parallel programming with MPI" click GPU_offloading_with_OpenMP "https://gjbex.github.io/OpenMP-GPU-offloading/" "GPU offloading with OpenMP" click Code_optimization "https://gjbex.github.io/Code-optimization/" "Code optimization"

Dashed arrows indicate optional branches.

Start with the shared scientific-computing, Linux and HPC foundations if these are new to you. Then follow "Fortran for programmers" to build a modern Fortran foundation for scientific programming.

After that, choose "Parallel programming with OpenMP" for shared-memory nodes and "Parallel programming with MPI" for distributed-memory systems.

For production-quality parallel Fortran applications, continue with "Defensive programming and debugging" to learn how to test and debug shared-memory and MPI applications.

"GPU offloading with OpenMP" is an optional branch when accelerators are part of your target system.

"Code optimization" is most useful after you have a correct CPU implementation, know which programming model you will use, and have the debugging skills to validate changes.