Giter VIP home page Giter VIP logo

pycubexr's Introduction

pyCubexR

PyPI - Python Version GitHub release (latest by date) PyPI version PyPI - License GitHub issues GitHub pull requests GitHub Workflow Status

pyCubexR is a Python package for reading the Cube4 (.cubex) file format. Cube is used as a performance report explorer for Scalasca and Score-P. It is used as a generic tool for displaying a multidimensional performance space consisting of the dimensions (i) performance metric, (ii) call path, and (iii) system resource. Each dimension can be represented as a tree, where non-leaf nodes of the tree can be collapsed or expanded to achieve the desired level of granularity. The Cube4 (.cubex) data format is provided for Cube files produced with the Score-P performance instrumentation and measurement infrastructure or the Scalasca version 2.x trace analyzer (and other compatible tools).

For additional information about the supported features of the Cube4 file format, see the Cube file format documentation. The report contains general information about Cube, pyCubexR, and other related tools.

For questions regarding pyCubexR please send a message to [email protected].

Installation

To install the current release, which includes support for Ubuntu and Windows:

$ pip install pycubexr

To update pyCubexR to the latest version, add --upgrade flag to the above commands.

Usage

The following code provides a minimal example that shows how pyCubexR can be used to read all metrics, callpaths, and measurement values of a .cubex file:

from pycubexr import CubexParser

cubex_file_path = "some/profile.cubex"
with CubexParser(cubex_file_path) as cubex:
    # iterate over all metrics in cubex file
    for metric in cubex.get_metrics():
        metric_values = cubex.get_metric_values(metric=metric)

        # return the name of the current metric
        metric_name = metric.name

        # iterate over all callpaths in cubex file
        for cnode_id in metric_values.cnode_indices:
            cnode = cubex.get_cnode(cnode_id)

            # return the current region i.e. callpath
            region = cubex.get_region(cnode)

            # return the name of the current region
            region_name = region.name

            # return the measurement values for all mpi processes for the current metric and callpath
            cnode_values = metric_values.cnode_values(cnode)

Not all .cubex files must contain measurement values for all metrics for each callpath. This is especially true for MPI functions such as MPI_Waitall. In some cases, metrics can be missing. Use the MissingMetricError to deal with these exceptions.

from pycubexr import CubexParser
from pycubexr.utils.exceptions import MissingMetricError

cubex_file_path = "some/profile.cubex"
with CubexParser(cubex_file_path) as cubex:
    for metric in cubex.get_metrics():

        try:
            metric_values = cubex.get_metric_values(metric=metric)

            for cnode_id in metric_values.cnode_indices:
                cnode = cubex.get_cnode(cnode_id)

                # return only a specific number of measurement values for the current metric and callpath
                cnode_values = metric_values.cnode_values(cnode)[:5]

                region = cubex.get_region(cnode)

                # print the data read from the file
                print('\t' + '-' * 100)
                print(f'\tRegion: {region.name}\n\tMetric: {metric.name}\n\tMetricValues: {cnode_values})')

        except MissingMetricError as e:
            # Ignore missing metrics
            pass

The call tree of a .cubex file can be displayed with the following code:

from pycubexr import CubexParser

cubex_file_path = "some/profile.cubex"
with CubexParser(cubex_file_path) as cubex:
    # print the call tree of the .cubex file
    cubex.print_calltree() 

In special cases, it is also possible that a .cubex file is missing measurement values for some of the callpaths of a metric or that a .cubex file of the same application contains fewer callpaths than another file. These cases need to be handled externally and are not supported by pyCubexR.

License

BSD 3-Clause "New" or "Revised" License

pycubexr's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

pycubexr's Issues

Project report

Is your feature request related to a problem? Please describe.
As I wrote this library without any real specification of the Cube file format, I think it would be nice to add my report (which contains documentation for the file format) to this repository for other users.

Describe the solution you'd like
Add the report to the repo.
I can create a PR for it.

New pyCubexR Release

Hello,

We are using pyCubexR in our tool, Hatchet. We are kindly wondering if you are planning to do a new PyPI release soon (so we can install it using pip) since we would like to use the latest changes on pyCubexR. We would like to add pyCubexR to our setup.py or requirements.txt. Thank you!

The PR on the Hatchet repo that uses pyCubexR: hatchet/hatchet#418

Best regards,
Onur

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.