Skip to main content

qprof

qprof stands for quantum profiler and aims at providing a unique tool to profile quantum circuits.

For the moment, qprof is able to understand quantum circuits generated with qiskit and myQLM and can generate profiling results in JSON and a gprof compatible format.

Installation

qprof being a Python module, it is installable with pip.

From Gitlab

git clone https://gitlab.com/qcomputing/qprof/qprof.git
pip install qprof/

From PyPi

qprof is now available on PyPi! To download and install the last version, just type

pip install qprof

Plugins for library support are not installed by default in order to avoid pulling silently huge dependencies like qiskit in your project. In order to install the plugins you can use the appropriate target when installing qprof:

pip install qprof[qiskit]
pip install qprof[myqlm]

Usage

Profiling

The profiling is performed with the qprof.profile function.

The qprof.profile function needs a quantum routine implemented with one of the supported frameworks along with the "base" gate times, provided as a dictionary, and an exporter, given either as a string or as an instance of BaseExporter.

Example of profiling:

# Import the qprof tools
from qprof import profile

# Import the framework tools to generate a quantum routine
from qiskit.aqua.algorithms import Grover
from qiskit.aqua.components.oracles import LogicalExpressionOracle


# Generate the routine to benchmark.
input_3sat = """
c example DIMACS-CNF 3-SAT
p cnf 3 5
-1 -2 -3 0
1 -2 3 0
1 2 -3 0
1 -2 -3 0
-1 2 3 0
"""

oracle = LogicalExpressionOracle(input_3sat)
grover = Grover(oracle)
circuit = grover.construct_circuit()

# Hard-coded gate times retrieved by hand
gate_times = {"U1": 0, "U2": 89, "U3": 178, "CX": 930, "BARRIER": 0}

# Profile the resulting quantum routine and use the "gprof" exporter
qprof_out = profile(circuit, gate_times, "gprof")

# Print to stdout the analysis report
print(qprof_out)

Full profiling example

Requirements for the example

You should have the dot tool installed on your machine, along with the gprof2dot tool that can be installed with pip install gprof2dot.

Profile the code

Let save the code of the previous section in a file profile.py.

You can generate the following graph with the command

python3 profile.py | gprof2dot -n 0 -e 0 | dot -Tpng -o profiling_result.png

image

Limitations

  • qprof is not able to analyse recursive routine calls yet. If your quantum circuit contains calls to recursive routines, expect the unexpected.

  • The call-graph analysis is done as if all the quantum gates were executed sequentially. Parallel execution support is a work in progress in the parallel_support branch. The main issue that still needs to be solved is the output format.

Troubleshooting

Unknown routines shows up in reports

If Unknown routines are showing up in the reports, check that you named correctly all the routines you defined.

If the problem is still present, open an issue.

Reported times using gprof output format are false

The gprof output format has a very limited precision of 10 milli-seconds when dealing with timings. This means that routines running in less than 5 milli-seconds will, due to rounding error, appear as taking 0 milli-seconds.

In order to circumvent this issue, the qprof.exporters.GprofExporter takes an optional parameter default_time in its constructor. This default_time will be used to scale all the execution times such that the longest routine will take exactly default_time seconds on the report.

By default, the value of default_time is 10 seconds. In order to change it you need to instantiate the exporter yourself:

from qprof import profile
from qprof.exporters import GprofExporter

routine = # ...
gate_times = # ...
exporter = GprofExporter(default_time=100) # 100 seconds for default_time

result = profile(routine, gate_times, exporter)

Note that giving None to default_time will disable the execution time scaling.

Who is using qprof?

Here is a list of projects using qprof.

If you used qprof in your project and would like to appear in this list, please let me know (open an issue, send me a mail, anything you want).

Metadata

Release files for qprof 1.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for qprof 1.5.0
File Size Uploaded
qprof-1.5.0.tar.gz 12.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for qprof 1.5.0
File Interpreter ABI Platform
qprof-1.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 35.4 kB

Release files / qprof-1.5.0.tar.gz

Download URL qprof-1.5.0.tar.gz
Size 12.9 kB
Tags Source
SHA-256 checksum
How to use checksums
e5674b0a1ad5c07cbeb46171a932a0bfe2c5ac6c96885ad0f11d9de5901279c7
BLAKE2b-256 checksum
How to use checksums
21a620ce62d20f4e3ec0235a2f4233f65cd16db4a0776551773b533c80bd7ae7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / qprof-1.5.0-py3-none-any.whl

Download URL qprof-1.5.0-py3-none-any.whl
Size 22.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
73d11951b802f1fdc48c32d97e7b0ec86dbd8d165a518813ccee1e5a72294a62
BLAKE2b-256 checksum
How to use checksums
f95212763db2aa6631df124082be44bf00826e629e2236d7e8ab061b9706080f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

1.5.0 This release

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page