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).

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

qprof-1.5.0.tar.gz (12.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

qprof-1.5.0-py3-none-any.whl (22.5 kB view details)

Uploaded Python 3

File details

Details for the file qprof-1.5.0.tar.gz.

File metadata

  • Download URL: qprof-1.5.0.tar.gz
  • Upload date:
  • Size: 12.9 kB
  • Tags: Source
  • Uploaded using 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}

File hashes

Hashes for qprof-1.5.0.tar.gz
Algorithm Hash digest
SHA256 e5674b0a1ad5c07cbeb46171a932a0bfe2c5ac6c96885ad0f11d9de5901279c7
MD5 570c79254a5b0e3143e971c8b8082ab8
BLAKE2b-256 21a620ce62d20f4e3ec0235a2f4233f65cd16db4a0776551773b533c80bd7ae7

See more details on using hashes here.

File details

Details for the file qprof-1.5.0-py3-none-any.whl.

File metadata

  • Download URL: qprof-1.5.0-py3-none-any.whl
  • Upload date:
  • Size: 22.5 kB
  • Tags: Python 3
  • Uploaded using 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}

File hashes

Hashes for qprof-1.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 73d11951b802f1fdc48c32d97e7b0ec86dbd8d165a518813ccee1e5a72294a62
MD5 76fd97cfc40a57cce9d1297965f26686
BLAKE2b-256 f95212763db2aa6631df124082be44bf00826e629e2236d7e8ab061b9706080f

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.5.0 This release

2 files

1.4.1

2 files

1.4.0

2 files

1.3.0

2 files

1.2.0

2 files

1.1.0

2 files

1.0.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page