caliper

Caliper is an instrumentation and performance profiling library

https://github.com/llnl/caliper

Science Score: 72.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
    Links to: ieee.org
  • Committers with academic emails
    26 of 46 committers (56.5%) from academic institutions
  • Institutional organization owner
    Organization llnl has institutional domain (software.llnl.gov)
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (13.8%) to scientific vocabulary

Keywords

annotation-apis caliper cpp hpc instrumentation performance performance-analysis performance-monitoring radiuss trace

Keywords from Contributors

build-tools hpsf spack comparative-analysis data-analytics graphs hierarchical-data trees cpp17 distributed
Last synced: 6 months ago · JSON representation ·

Repository

Caliper is an instrumentation and performance profiling library

Basic Info
Statistics
  • Stars: 386
  • Watchers: 21
  • Forks: 72
  • Open Issues: 39
  • Releases: 24
Topics
annotation-apis caliper cpp hpc instrumentation performance performance-analysis performance-monitoring radiuss trace
Created over 10 years ago · Last pushed 6 months ago
Metadata Files
Readme License Citation

README.md

Caliper: A Performance Analysis Toolbox in a Library

Github Actions Build Status Coverage

Caliper is a performance instrumentation and profiling library for HPC (high-performance computing) programs. It provides source-code annotation APIs for marking regions of interest in C, C++, Fortran, and Python codes, as well as measurement functionality for a wide range of runtime profiling, event tracing, and performance monitoring use cases.

Caliper can generate simple human-readable reports or files for performance data analysis frameworks like Hatchet and Thicket. It can also generate detailed event traces for timeline visualizations with Perfetto and the Google Chrome trace viewer.

Features include:

  • Low-overhead source-code annotation API
  • Recording program metadata for analyzing collections of runs
  • Fully threadsafe implementation
  • Support for parallel programming models like MPI, OpenMP, Kokkos, CUDA, ROCm, and RAJA
  • Event-based and sample-based performance measurements
  • Trace and profile recording
  • Connection to third-party tools, e.g. NVidia's NSight tools, AMD ROCProf, or Intel(R) VTune(tm)

Overview

Caliper is primarily a source-code instrumentation library. To use it, insert Caliper instrumentation markers around source-code regions of interest in the target program, like the C++ function and region markers in the example below:

```C++

include

int getanswer() { CALICXXMARKFUNCTION;

CALI_MARK_BEGIN("computing");
int ret = 2 * 3 * 7;
CALI_MARK_END("computing");
return ret;

} ```

There are annotation APIs for C, C++, Fortran, and Python codes. To take performance measurements, Caliper provides built-in profiling recipes for a wide range of performance engineering use cases. Available functionality includes MPI function and message profiling, CUDA and HIP API as well as GPU activity profiling, loop profiling, call-path sampling, and much more. As a simple example, the runtime-report recipe prints the time spent in the annotated regions on screen:

$ CALI_CONFIG=runtime-report ./answer
Path          Time (E) Time (I) Time % (E) Time % (I)
main          0.000072 0.000083  17.469875  20.188570
  get_answer  0.000008 0.000011   1.864844   2.718695
    computing 0.000004 0.000004   0.853851   0.853851

Aside from simple text reports, Caliper can generate machine-readable output in JSON or its own custom .cali file format, which can be analyzed with the Caliper-provided cali-query tool and CalQL query language, or imported into Python analysis scripts with the caliper-reader Python module. In addition, Caliper can collect data for Thicket, a Python-based toolkit for Exploratory Data Analysis of parallel performance data.

Documentation

Extensive documentation is available here: https://software.llnl.gov/Caliper/

Usage examples of the C++, C, and Fortran annotation and ConfigManager APIs are provided in the examples directory.

A basic tutorial is available here: https://github.com/daboehme/caliper-tutorial

Building and installing

Caliper can be installed with the spack package manager:

$ spack install caliper

Building Caliper manually requires cmake 3.12+ and a C++11-compatible Compiler. Clone Caliper from github and proceed as follows:

$ git clone https://github.com/LLNL/Caliper.git
$ cd Caliper
$ mkdir build && cd build
$ cmake -DCMAKE_INSTALL_PREFIX=<path to install location> ..
$ make
$ make install

Link Caliper to a program by adding libcaliper:

$ g++ -o app app.o -L<path install location>/lib64 -lcaliper

There are many build flags to enable optional features, such as -DWITH_MPI for MPI support. See the "Build and install" section in the documentation for further information.

Authors

Caliper was created by David Boehme, boehme3@llnl.gov.

A complete list of contributors is available on GitHub.

Major contributors include:

Citing Caliper

To reference Caliper in a publication, please cite the following paper:

On GitHub, you can copy this citation in APA or BibTeX format via the "Cite this repository" button. Or, see the comments in CITATION.cff for the raw BibTeX.

Release

Caliper is released under a BSD 3-clause license. See LICENSE for details.

LLNL-CODE-678900

Owner

  • Name: Lawrence Livermore National Laboratory
  • Login: LLNL
  • Kind: organization
  • Email: github-admin@llnl.gov
  • Location: Livermore, CA, USA

For over 70 years, the Lawrence Livermore National Laboratory has applied science and technology to make the world a safer place.

Citation (CITATION.cff)

# If you are referencing Caliper in a publication, please cite the paper
# described here:
# 
#   David Boehme, Todd Gamblin, David Beckingsale, Peer-Timo Bremer,
#   Alfredo Gimenez, Matthew Legendre, Olga Pearce, and Martin Schulz.
#   Caliper: Performance Introspection for HPC Software Stacks.
#   In Supercomputing 2016 (SC'16), Salt Lake City, Utah, USA, November 2016.
#   LLNL-CONF-699263
#
# Or, in BibTeX:
# 
# @inproceedings{boehme:sc2016,
#   Articleno = {47},
#   Author = {Boehme, David and Gamblin, Todd and Beckingsale, David and Bremer, Peer-Timo and Gimenez, Alfredo and LeGendre, Matthew and Pearce, Olga and Schulz, Martin},
#     Booktitle = {Proceedings of the ACM/IEEE International Conference for High Performance Computing, Networking, Storage and Analysis},
#   Month = nov,
#   Note = {LLNL-CONF-699263},
#   Numpages = {11},
#   Pages = {47:1--47:11},
#   Publisher = {IEEE Computer Society},
#   Series = {SC '16},
#   Title = {Caliper: Performance Introspection for {HPC} Software Stacks},
#   Url = {http://dl.acm.org/citation.cfm?id=3014904.3014967},
#   Year = {2016},
#   Bdsk-Url-1 = {http://dl.acm.org/citation.cfm?id=3014904.3014967}}
# }
#
# And here is the CITATION.cff format:

cff-version: 1.2.0
message: "If you are referencing Caliper in a publication, please cite the paper below"
title: Caliper
repository-code: https://github.com/LLNL/Caliper
preferred-citation:
  type: conference-paper
  doi: 10.1109/SC.2016.46
  authors:
  - family-names: "Boehme"
    given-names: "David"
    orcid: "https://orcid.org/0000-0002-4159-1519"
  - family-names: "Gamblin"
    given-names: "Todd"
  - family-names: "Beckingsale"
    given-names: "David"
    orcid: "https://orcid.org/0000-0003-2545-4837"
  - family-names: "Bremer"
    given-names: "Peer-Timo"
    orcid: "https://orcid.org/0000-0003-4107-3831"
  - family-names: "Gimenez"
    given-names: "Alfredo"
  - family-names: "LeGendre"
    given-names: "Matthew"
  - family-names: "Pearce"
    given-names: "Olga"
    orcid: "https://orcid.org/0000-0002-1904-9627"
  - family-names: "Schulz"
    given-names: "Martin"
    orcid: "https://orcid.org/0000-0001-9013-435X"
  title: "Caliper: Performance Introspection for HPC Software Stacks"
  url: "http://dl.acm.org/citation.cfm?id=3014904.3014967"
  conference:
    name: "International Conference for High Performance Computing, Networking, Storage and Analysis (SC'16)"
    city: "Salt Lake City"
    region: "Utah"
    country: "USA"
    date-start: 2016-11-13
    date-end: 2016-11-18
  year: 2016
  notes: LLNL-CONF-699263

GitHub Events

Total
  • Create event: 12
  • Release event: 4
  • Issues event: 11
  • Watch event: 36
  • Delete event: 4
  • Issue comment event: 41
  • Push event: 97
  • Pull request event: 103
  • Fork event: 10
Last Year
  • Create event: 12
  • Release event: 4
  • Issues event: 11
  • Watch event: 36
  • Delete event: 4
  • Issue comment event: 41
  • Push event: 97
  • Pull request event: 103
  • Fork event: 10

Committers

Last synced: 9 months ago

All Time
  • Total Commits: 1,682
  • Total Committers: 46
  • Avg Commits per committer: 36.565
  • Development Distribution Score (DDS): 0.19
Past Year
  • Commits: 108
  • Committers: 6
  • Avg Commits per committer: 18.0
  • Development Distribution Score (DDS): 0.222
Top Committers
Name Email Commits
David Boehme b****3@l****v 1,363
Alfredo Gimenez g****1@l****v 79
David Poliakoff d****f@g****m 74
Srinivasan Ramesh r****2@c****v 23
Adrien Bernede 5****e 23
Alfredo Adolfo Gimenez a****z@g****m 14
David Poliakoff p****1@l****v 12
Dan Ibanez i****d 9
Kathleen Shoga s****1@l****v 8
Srinivasan Ramesh r****2@c****v 7
David Beckingsale d****e@g****m 7
Srinivasan Ramesh r****2@l****v 6
Jonathan R. Madsen j****n 6
Srinivasan Ramesh r****2@c****v 4
Ian Lumsden l****n@g****m 4
Srini s****h@c****u 4
Chad Wood c****w@c****u 3
PhilipDeegan p****n@g****m 2
Jean-Noël Grad j****d@i****e 2
Christoph Junghans j****s@l****v 2
Stephanie Brink b****2@l****v 2
Tom Epperly t****y@g****m 2
sylvia4 s****4@c****v 2
sylvia4 s****4@c****v 2
Udayanga Shaminda Wickramasinghe u****a@c****v 1
Srinivasan Ramesh r****2@r****v 1
Srinivasan Ramesh r****2@c****v 1
Rasmus Wriedt Larsen l****1@l****v 1
David Boehme D****e 1
Matthew LeGendre l****1@l****v 1
and 16 more...

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 53
  • Total pull requests: 267
  • Average time to close issues: 4 months
  • Average time to close pull requests: 21 days
  • Total issue authors: 37
  • Total pull request authors: 20
  • Average comments per issue: 2.74
  • Average comments per pull request: 0.6
  • Merged pull requests: 241
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 10
  • Pull requests: 108
  • Average time to close issues: 5 days
  • Average time to close pull requests: 2 days
  • Issue authors: 10
  • Pull request authors: 6
  • Average comments per issue: 0.2
  • Average comments per pull request: 0.47
  • Merged pull requests: 97
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • adayton1 (3)
  • adrienbernede (3)
  • PhilipDeegan (3)
  • ibaned (3)
  • aaroncblack (3)
  • corbett5 (2)
  • yaoyi92 (2)
  • KokoFan16 (2)
  • adam-sim-dev (2)
  • termi-official (2)
  • balos1 (2)
  • tonycurtis (1)
  • kennyweiss (1)
  • daboehme (1)
  • bertwesarg (1)
Pull Request Authors
  • daboehme (265)
  • adrienbernede (34)
  • ibaned (9)
  • ilumsden (9)
  • jngrad (4)
  • PhilipDeegan (4)
  • tjeter (2)
  • tpatki (2)
  • slabasan (2)
  • cdwdirect (2)
  • EvelynNamugwanya (2)
  • sampollard (2)
  • termi-official (2)
  • ammarwa (2)
  • adayton1 (1)
Top Labels
Issue Labels
Pull Request Labels

Packages

  • Total packages: 5
  • Total downloads:
    • pypi 20,584 last-month
  • Total dependent packages: 11
    (may contain duplicates)
  • Total dependent repositories: 6
    (may contain duplicates)
  • Total versions: 78
  • Total maintainers: 3
pypi.org: caliper-reader

A Python library for reading Caliper .cali files

  • Homepage: https://github.com/LLNL/Caliper
  • Documentation: https://caliper-reader.readthedocs.io/
  • License: Copyright (c) 2015-2021, Lawrence Livermore National Security, LLC. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  • Latest release: 0.4.1
    published over 1 year ago
  • Versions: 6
  • Dependent Packages: 3
  • Dependent Repositories: 6
  • Downloads: 20,584 Last month
Rankings
Dependent packages count: 3.1%
Stargazers count: 3.7%
Forks count: 5.7%
Average: 5.8%
Dependent repos count: 6.0%
Downloads: 10.4%
Maintainers (1)
Last synced: 6 months ago
proxy.golang.org: github.com/LLNL/Caliper
  • Versions: 29
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent packages count: 6.5%
Average: 6.7%
Dependent repos count: 6.9%
Last synced: 6 months ago
proxy.golang.org: github.com/llnl/caliper
  • Versions: 29
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent packages count: 6.5%
Average: 6.7%
Dependent repos count: 6.9%
Last synced: 6 months ago
spack.io: caliper

Caliper is a program instrumentation and performance measurement framework. It is designed as a performance analysis toolbox in a library, allowing one to bake performance analysis capabilities directly into applications and activate them at runtime.

  • Versions: 13
  • Dependent Packages: 8
  • Dependent Repositories: 0
Rankings
Dependent repos count: 0.0%
Dependent packages count: 6.7%
Average: 8.6%
Stargazers count: 12.9%
Forks count: 14.7%
Maintainers (2)
Last synced: 6 months ago
spack.io: py-caliper-reader

A Python library for reading Caliper .cali files.

  • Versions: 1
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent repos count: 0.0%
Average: 28.3%
Dependent packages count: 56.5%
Last synced: 6 months ago

Dependencies

.github/workflows/cmake.yml actions
  • actions/checkout v2 composite