<commit_before># IPM

Integrated Performance Monitoring for HPC

## Quick start

IPM uses the common GNU autotools build system for compilation. As such, a
typical install of IPM from this repository must begin by generating the
autoconf `configure` script via our provided `bootstrap.sh` script:

    ./bootstrap.sh

Once this is done, you should be able to run

    ./configure
    make
    make install

As usual, you will likely want to examine key options available for the
`configure` script, which can be viewed by running `./configure --help`. For
example, you can enable support for hardware performance counter collection via
PAPI by specifying the PAPI installation path using the `--with-papi=<path>`
option. You may also need to specify your MPI compiler wrappers via the `MPICC`
and `MPIFC` variables - see `./configure --help` for details.

Once you have built and installed IPM, using it to profile your application
should be fairly straightforward. Suppose that `$PREFIX` is the installation
prefix you used when installing IPM. In this case, you can enable profiling by
appending

    -L$PREFIX -lipm

to your link line (making sure it is the last argument). If you are linking an
application that uses the Fortran bindings to MPI, then you will also need to
add `-lipmf`, making sure that it comes before `-lipm`:

    -L$PREFIX -lipmf -lipm

As usual, if you are using dynamic linking and `$PREFIX/lib` has not been added
to your `$LD_LIBRARY_PATH`, then you will likely also want to pass the former
to the linker as an `-rpath`.

**Note**: The `master` branch of IPM is in general usable, but should be
considered development software. We strongly recommend that for production use
you build a tagged release of IPM. The most recent release is `2.0.4`.

### Examples

Suppose that you are building a pure C MPI code contained in a single source
file that you would like to profile with IPM, and that `mpicc` is the MPI C
compiler wrapper for your system. In this case, you could simply run:

    mpicc my_code.c -o my_code.x -L$PREFIX/lib -lipm

to produce an IPM instrumented executable.
 
Now suppose that you are building a mixed C and Fortran MPI code that you would
like to profile with IPM, and that `mpicc` and `mpifort` are the MPI C and
Fortran compiler wrappers for your system. In this case, you could use:<commit_msg>Corrected typo in README.md<commit_after># IPM

Integrated Performance Monitoring for HPC

## Quick start

IPM uses the common GNU autotools build system for compilation. As such, a
typical install of IPM from this repository must begin by generating the
autoconf `configure` script via our provided `bootstrap.sh` script:

    ./bootstrap.sh

Once this is done, you should be able to run

    ./configure
    make
    make install

As usual, you will likely want to examine key options available for the
`configure` script, which can be viewed by running `./configure --help`. For
example, you can enable support for hardware performance counter collection via
PAPI by specifying the PAPI installation path using the `--with-papi=<path>`
option. You may also need to specify your MPI compiler wrappers via the `MPICC`
and `MPIFC` variables - see `./configure --help` for details.

Once you have built and installed IPM, using it to profile your application
should be fairly straightforward. Suppose that `$PREFIX` is the installation
prefix you used when installing IPM. In this case, you can enable profiling by
appending

    -L$PREFIX/lib -lipm

to your link line (making sure it is the last argument). If you are linking an
application that uses the Fortran bindings to MPI, then you will also need to
add `-lipmf`, making sure that it comes before `-lipm`:

    -L$PREFIX/lib -lipmf -lipm

As usual, if you are using dynamic linking and `$PREFIX/lib` has not been added
to your `$LD_LIBRARY_PATH`, then you will likely also want to pass the former
to the linker as an `-rpath`.

**Note**: The `master` branch of IPM is in general usable, but should be
considered development software. We strongly recommend that for production use
you build a tagged release of IPM. The most recent release is `2.0.4`.

### Examples

Suppose that you are building a pure C MPI code contained in a single source
file that you would like to profile with IPM, and that `mpicc` is the MPI C
compiler wrapper for your system. In this case, you could simply run:

    mpicc my_code.c -o my_code.x -L$PREFIX/lib -lipm

to produce an IPM instrumented executable.
 
Now suppose that you are building a mixed C and Fortran MPI code that you would
like to profile with IPM, and that `mpicc` and `mpifort` are the MPI C and
Fortran compiler wrappers for your system. In this case, you could use:
{'fraction_non_alphanumeric': 0.056543837357052096, 'fraction_numerical': 0.0012706480304955528, 'mean_word_length': 3.9663512092534177, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3153545', 'n_tokens_mistral': 1316, 'n_tokens_neox': 1244, 'n_words': 750}