Apr
19
Mon
Timemory ECP Tutorial
Apr 19 @ 12:00 pm – 3:00 pm

Software monitoring

Have you ever written a multi-level logging abstraction for your project? Created an error checking system? Written a high-level timer + label abstraction? Have you then added additional abstractions for logging data values and/or recording the memory usage? Did you add or want to add support for exporting these labels to external profilers like VTune, Nsight, TAU, etc.? Do you need to support flushing this data intermittently? If your answer to any of these questions is yes, this is the right tutorial for you.

Logging, error-checking, high-level timekeeping abstractions are a staple in HPC applications. As projects grow in complexity and users, the developers often end up having to provide these abstractions because these capabilities are generally viewed as necessary for debugging, validation, and ensuring optimal performance. Timemory aims to simplify monitoring the state and performance of your application so that relevant debugging, logging, and performance data can be trivially enabled or disabled in a consistent and portable manner.

Why timemory?

Timemory is designed as a toolkit for implementing profiling, debugging, and logging solutions as well as providing a holistic profiling solution. If you would like to keep all your current abstractions and only want type-safe handles for invoking groups of them in bulk, timemory can provide that; if you would like to simplify aggregating the data from different MPI/UPC++ ranks, timemory can provide that; if you only want to add support for exporting to JSON/XML/etc., timemory can provide that; if you want to create a new command-line tool which combines different measurements, timemory can provide the components to easily do that; if you want a holistic solution that you can easily extend or restrict, timemory can provide that.

What is timemory?

Timemory is a multi-purpose C++ toolkit and suite of C/C++/Fortran/Python tools for performance analysis, optimization studies, logging, and debugging. The primary objective of timemory is to create a universal instrumentation framework which streamlines building software monitoring interfaces and tools by coupling the inversion of control programming principle with C++ template metaprogramming. The original intention of the toolkit design was specific to performance analysis, however, it was later realized that the design allowed debugging and logging abstractions to co-exist seamlessly with the performance analysis abstractions.
The design allows developers to construct production quality implementations which couple application-specific software monitoring requirements with third-party tools and libraries. In order to help ensure this objective is fully realized, timemory provides a number of pre-built implementations of a generic C/C++/Fortran library interface, compiler instrumentation, dynamic instrumentation, various popular frameworks such as MPI, OpenMP, NCCL, and Kokkos, Python bindings, and an extended analogue of the UNIX time command-line tool.

Does HPC need another profiling tool?

No. HPC has a surplus of performance analysis tools and APIs: VTune, NSight, TAU, Caliper, Score-P, Callgrind, LIKWID, Arm-MAP, CrayPAT, OpenSpeedShop, ittnotify, NVTX, PAPI, CUPTI, MPI-P, MPI-T, OMPT, gperftools, ROC-profiler, ROC-tracer, and innumerable application-specific abstractions which perform anything from basic timekeeping and memory usage to implementations and callbacks for the aforementioned APIs. We designed timemory as a way to easily integrate and maintain the exact set of measurements/tools/features you want to support with an interface best suited for your application.

Contents of the Tutorial

This is a preliminary outline of the tutorial. The tutorial is divided into two days. The first day will cover the front-end tools for C/C++/Fortran/CUDA/Python. The second day will cover how to use the C++ toolkit. The interactive tutorials will be held on Mondays: 9:00 AM – 12:00 PM PT (12:00 PM – 3:00 PM ET).

Day 1: Tools and Library (04/19/2021)

Introduction to timemory

  • Motivation
  • Design philosophy and nomenclature
  • Installation

Command-line Tools

  • timemory-avail — information tool
  • timem — UNIX time + more
  • timemory-run — dynamic instrumentation and binary re-writing
  • timemory-plotter — matplotlib plotting of results
  • timemory-roofline — generate the roofline

Library API

  • Compiler instrumentation
  • Extern C interface

Python API

  • Decorators and context-managers
  • Iterating over results in-situ

Python Command-Line Tools

  • timemory-python-profiler — python function profiler
  • timemory-python-trace — python line-by-line tracing
  • timemory-line-profiler — classic line-profiler tool extended to collect different metrics

Visualizing and Analyzing Results

  • Converting timemory data to pandas dataframes via Hatchet
  • Manipulating dataframes
  • Visualizing in Jupyter notebooks

Day 2: C++ and Python Toolkit (04/26/2021)

Python

  • Using Individual Components to build your own tools

C++

  • Creating a new component
  • Using a custom component for timemory-run
  • Designing a customized profiling API for your project
  • Designing a customized debugging/logging interface for your project
    • Wrapping externally defined functions
    • Creating profiling/debugging libraries for your project
    • Insert measurements/logging/error-checking around C/C++ function calls
    • Auditing incoming arguments and return values
  • Replacing externally defined functions
    • Experiment with mixed-precision without modifying original source code

How to Attend

  • The lecture series is available to everyone.
  • No-cost registration is necessary, meeting password will be sent to registrants.
  • For the exercises, timemory can be installed locally or registrants may use a provided docker image.

Presenters

  • Jonathan Madsen
  • Laurie Stephey
  • Muazz Gul Awan
  • Rahulkumar Gayatri

Tutorial Material
Recording – Day 1
Recording – Day 2

Apr
20
Tue
ALCF GPU Hackathon 2021
Apr 20 all-day

Argonne GPU Hackathon 2021

The Argonne GPU Hackathon is a multi-day event designed to help teams of three to six developers accelerate their own codes on GPUs using a programming model, or machine learning framework of their choice. Each team is assigned mentors for the duration of the event.

Dates

  • April 20, 27-29, 2021

Prerequisites

  • Teams are expected to be fluent with the code or project they bring to the event and motivated to make progress during the hackathon.
  • No advanced GPU skills required, but teams are expected to know the basics of GPU programming and profiling at the event. A collection of GPU lectures, tutorials, and labs are available for all participants at no fee.

See https://www.gpuhackathons.org/index.php/event/argonne-gpu-hackathon-2021 for eligibility and more information.

Apr
26
Mon
Timemory ECP Tutorial
Apr 26 @ 12:00 pm – 3:00 pm

Software monitoring

Have you ever written a multi-level logging abstraction for your project? Created an error checking system? Written a high-level timer + label abstraction? Have you then added additional abstractions for logging data values and/or recording the memory usage? Did you add or want to add support for exporting these labels to external profilers like VTune, Nsight, TAU, etc.? Do you need to support flushing this data intermittently? If your answer to any of these questions is yes, this is the right tutorial for you.

Logging, error-checking, high-level timekeeping abstractions are a staple in HPC applications. As projects grow in complexity and users, the developers often end up having to provide these abstractions because these capabilities are generally viewed as necessary for debugging, validation, and ensuring optimal performance. Timemory aims to simplify monitoring the state and performance of your application so that relevant debugging, logging, and performance data can be trivially enabled or disabled in a consistent and portable manner.

Why timemory?

Timemory is designed as a toolkit for implementing profiling, debugging, and logging solutions as well as providing a holistic profiling solution. If you would like to keep all your current abstractions and only want type-safe handles for invoking groups of them in bulk, timemory can provide that; if you would like to simplify aggregating the data from different MPI/UPC++ ranks, timemory can provide that; if you only want to add support for exporting to JSON/XML/etc., timemory can provide that; if you want to create a new command-line tool which combines different measurements, timemory can provide the components to easily do that; if you want a holistic solution that you can easily extend or restrict, timemory can provide that.

What is timemory?

Timemory is a multi-purpose C++ toolkit and suite of C/C++/Fortran/Python tools for performance analysis, optimization studies, logging, and debugging. The primary objective of timemory is to create a universal instrumentation framework which streamlines building software monitoring interfaces and tools by coupling the inversion of control programming principle with C++ template metaprogramming. The original intention of the toolkit design was specific to performance analysis, however, it was later realized that the design allowed debugging and logging abstractions to co-exist seamlessly with the performance analysis abstractions.
The design allows developers to construct production quality implementations which couple application-specific software monitoring requirements with third-party tools and libraries. In order to help ensure this objective is fully realized, timemory provides a number of pre-built implementations of a generic C/C++/Fortran library interface, compiler instrumentation, dynamic instrumentation, various popular frameworks such as MPI, OpenMP, NCCL, and Kokkos, Python bindings, and an extended analogue of the UNIX time command-line tool.

Does HPC need another profiling tool?

No. HPC has a surplus of performance analysis tools and APIs: VTune, NSight, TAU, Caliper, Score-P, Callgrind, LIKWID, Arm-MAP, CrayPAT, OpenSpeedShop, ittnotify, NVTX, PAPI, CUPTI, MPI-P, MPI-T, OMPT, gperftools, ROC-profiler, ROC-tracer, and innumerable application-specific abstractions which perform anything from basic timekeeping and memory usage to implementations and callbacks for the aforementioned APIs. We designed timemory as a way to easily integrate and maintain the exact set of measurements/tools/features you want to support with an interface best suited for your application.

Contents of the Tutorial

This is a preliminary outline of the tutorial. The tutorial is divided into two days. The first day will cover the front-end tools for C/C++/Fortran/CUDA/Python. The second day will cover how to use the C++ toolkit. The interactive tutorials will be held on Mondays: 9:00 AM – 12:00 PM PT (12:00 PM – 3:00 PM ET).

Day 1: Tools and Library (04/19/2021)

Introduction to timemory

  • Motivation
  • Design philosophy and nomenclature
  • Installation

Command-line Tools

  • timemory-avail — information tool
  • timem — UNIX time + more
  • timemory-run — dynamic instrumentation and binary re-writing
  • timemory-plotter — matplotlib plotting of results
  • timemory-roofline — generate the roofline

Library API

  • Compiler instrumentation
  • Extern C interface

Python API

  • Decorators and context-managers
  • Iterating over results in-situ

Python Command-Line Tools

  • timemory-python-profiler — python function profiler
  • timemory-python-trace — python line-by-line tracing
  • timemory-line-profiler — classic line-profiler tool extended to collect different metrics

Visualizing and Analyzing Results

  • Converting timemory data to pandas dataframes via Hatchet
  • Manipulating dataframes
  • Visualizing in Jupyter notebooks

Day 2: C++ and Python Toolkit (04/26/2021)

Python

  • Using Individual Components to build your own tools

C++

  • Creating a new component
  • Using a custom component for timemory-run
  • Designing a customized profiling API for your project
  • Designing a customized debugging/logging interface for your project
    • Wrapping externally defined functions
    • Creating profiling/debugging libraries for your project
    • Insert measurements/logging/error-checking around C/C++ function calls
    • Auditing incoming arguments and return values
  • Replacing externally defined functions
    • Experiment with mixed-precision without modifying original source code

How to Attend

  • The lecture series is available to everyone.
  • No-cost registration is necessary, meeting password will be sent to registrants.
  • For the exercises, timemory can be installed locally or registrants may use a provided docker image.

Presenters

  • Jonathan Madsen
  • Laurie Stephey
  • Muazz Gul Awan
  • Rahulkumar Gayatri

Tutorial Material
Recording – Day 1
Recording – Day 2

Apr
27
Tue
ALCF GPU Hackathon 2021
Apr 27 all-day

Argonne GPU Hackathon 2021

The Argonne GPU Hackathon is a multi-day event designed to help teams of three to six developers accelerate their own codes on GPUs using a programming model, or machine learning framework of their choice. Each team is assigned mentors for the duration of the event.

Dates

  • April 20, 27-29, 2021

Prerequisites

  • Teams are expected to be fluent with the code or project they bring to the event and motivated to make progress during the hackathon.
  • No advanced GPU skills required, but teams are expected to know the basics of GPU programming and profiling at the event. A collection of GPU lectures, tutorials, and labs are available for all participants at no fee.

See https://www.gpuhackathons.org/index.php/event/argonne-gpu-hackathon-2021 for eligibility and more information.

Apr
28
Wed
ALCF GPU Hackathon 2021
Apr 28 all-day

Argonne GPU Hackathon 2021

The Argonne GPU Hackathon is a multi-day event designed to help teams of three to six developers accelerate their own codes on GPUs using a programming model, or machine learning framework of their choice. Each team is assigned mentors for the duration of the event.

Dates

  • April 20, 27-29, 2021

Prerequisites

  • Teams are expected to be fluent with the code or project they bring to the event and motivated to make progress during the hackathon.
  • No advanced GPU skills required, but teams are expected to know the basics of GPU programming and profiling at the event. A collection of GPU lectures, tutorials, and labs are available for all participants at no fee.

See https://www.gpuhackathons.org/index.php/event/argonne-gpu-hackathon-2021 for eligibility and more information.

Apr
29
Thu
ALCF GPU Hackathon 2021
Apr 29 all-day

Argonne GPU Hackathon 2021

The Argonne GPU Hackathon is a multi-day event designed to help teams of three to six developers accelerate their own codes on GPUs using a programming model, or machine learning framework of their choice. Each team is assigned mentors for the duration of the event.

Dates

  • April 20, 27-29, 2021

Prerequisites

  • Teams are expected to be fluent with the code or project they bring to the event and motivated to make progress during the hackathon.
  • No advanced GPU skills required, but teams are expected to know the basics of GPU programming and profiling at the event. A collection of GPU lectures, tutorials, and labs are available for all participants at no fee.

See https://www.gpuhackathons.org/index.php/event/argonne-gpu-hackathon-2021 for eligibility and more information.

Apr
30
Fri
Webinar: HDF5 Application Tuning (part 2)
Apr 30 @ 12:00 pm – 1:00 pm

HDF5 Application Tuning: There is more than one way to skin a cat(fish)

Before returning to application tuning (in part 3), in this second part of the series, we take a closer look at HDF5 performance variability. We highlight the main variability sources, their impact on performance, and considerations for HDF5 container design.

More information about the webinar as well as presentation materials can be found here.

May
12
Wed
Automated Fortran–C++ Bindings for Large-Scale Scientific Applications
May 12 @ 1:00 pm – 2:00 pm

The IDEAS Productivity project, in partnership with the DOE Computing Facilities of the ALCF, OLCF, and NERSC and the DOE Exascale Computing Project (ECP) has resumed the webinar series on Best Practices for HPC Software Developers, which we began in 2016.

As part of this series, we offer one-hour webinars on topics in scientific software development and high-performance computing, approximately once a month. The May webinar is titled Automated Fortran–C++ Bindings for Large-Scale Scientific Applications, and will be presented by Seth Johnson (Oak Ridge National Laboratory). The webinar will take place on Wednesday, May 12, 2021 at 1:00 pm ET.

Abstract:

Although many active scientific codes use modern Fortran, most contemporary scientific software libraries are implemented in C and C++. Providing their numerical, algorithmic, or data management features to Fortran codes requires writing and maintaining substantial amounts of glue code. In the same vein, some projects are actively moving key kernels from Fortran toward C++ to support performance portability models and other rapidly-developing, dynamic programming paradigms. How can a project smoothly connect existing Fortran code to new internal C++ kernels or external C++ libraries? The webinar will introduce SWIG-Fortran, which provides a solution with a wide range of flexibility, including support for performant data transfers, MPI support, and direct translation of C++ features to Fortran interfaces.

Jun
9
Wed
Using the PSIP Toolkit to Achieve Your Goals – A Case Study at The HDF Group
Jun 9 @ 1:00 pm – 2:00 pm

The IDEAS Productivity project, in partnership with the DOE Computing Facilities of the ALCF, OLCF, and NERSC and the DOE Exascale Computing Project (ECP) has resumed the webinar series on Best Practices for HPC Software Developers, which we began in 2016.

As part of this series, we offer one-hour webinars on topics in scientific software development and high-performance computing, approximately once a month. The June webinar is titled Using the PSIP Toolkit to Achieve Your Goals – A Case Study at The HDF Group, and will be presented by Elena Pourmal (The HDF Group), Reed Milewicz (Sandia National Laboratories) and Elsa Gonsiorowski (Lawrence Livermore National Laboratory). The webinar will take place on Wednesday, June 9, 2021 at 1:00 pm ET.

Abstract:

Productivity and Sustainability Improvement Planning (PSIP) is a lightweight, iterative workflow that allows software development teams to identify development bottlenecks and track progress toward goals to overcome them. In this talk, we present an overview of the PSIP methodology and toolkit, and describe how the HDF5 Group used PSIP to make improvements in three key areas of their software development process.

Jun
14
Mon
Getting Started with E4S for Industry and Agencies Workshop
Jun 14 @ 11:00 am – Jun 15 @ 2:00 pm

Getting Started with E4S for Industry and Agencies Workshop

The Extreme-scale Scientific Software Stack (E4S) project aims to tame both the complexity and portability problems by creating an ecosystem of numerical libraries, runtime systems, and tools that lowers the barrier for entry for the HPC and AI/ML developer communities. E4S is a community effort to provide open source software packages for developing, deploying, and running scientific applications on HPC platforms. It aims to deliver a modular, interoperable, and deployable software stack based on the Spack package manager.  The “Getting Started with E4S for Industry and Agencies” workshop was held on June 14-15, 2021. The intended audience was technical people from companies and US government agencies that are considering using E4S in their environment.

Workshop Agenda (Slides)

Day 1: Monday, June 14

8:00 AM – 9:30 AM – Overview E4S, Mike Heroux, Director of ECP Software Technology (Video)

  • Who should attend:
    • Technical Leaders and developers who may or may not be familiar with E4S;
    • Prospective and first-time developers using E4S
  • Topics addressed: This overview will discuss the philosophy behind E4S, the E4S components, and why industry should understand and consider adopting some of these components.

 

10:00 AM – 12:00 PM – Getting Started with E4S for Industry and Agency Tutorial, Sameer Shende (ECP Technical Lead for E4S) and team (Video)

  • Who should attend: Prospective and first-time developers of E4S.

 

  • Topics addressed: Hands-on instructions on the E4S build environment. Participants will learn how to incorporate E4S products into codes. Participants may use their own code or one provided.

 

Day 2: Tuesday, June 15

8:00 AM- 9:00 AM: E4S Q&A (Video)

Opportunity to discuss with Sameer Shende and Mike Heroux any high-level questions on what products to consider for specific industry/agency applications

  • Who should attend:
    • Technical Leaders and developers who may or may not be familiar with E4S and have questions about applicability to industry problems
    • All Tutorial participants
  • Topics addressed: High-level questions on what products to consider for specific industry/agency applications, unanswered questions from Day 1

 

9:00 AM – 11:45 AM:  Continuation of hands-on session focusing on AI & ML, GPUs, Sameer Shende, E4S (ECP Technical Lead for E4S) and team (Video)

  • Who should attend: Day 1 tutorial participants.
  • Topics addressed: Continued hands-on instructions on the E4S environment

Topics addressed in tutorial

  • Pantheon demo – David Rogers, LANL
  • Performance evaluation tools: TAU
  • E4S AI & ML packages
  • E4S GPU support
  • GPU runtime support: OneAPI, ROCm, and CUDA
  • Advanced Spack: E4S Spack build cache