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
Limitations
-
qprofis 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e5674b0a1ad5c07cbeb46171a932a0bfe2c5ac6c96885ad0f11d9de5901279c7
|
|
| MD5 |
570c79254a5b0e3143e971c8b8082ab8
|
|
| BLAKE2b-256 |
21a620ce62d20f4e3ec0235a2f4233f65cd16db4a0776551773b533c80bd7ae7
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73d11951b802f1fdc48c32d97e7b0ec86dbd8d165a518813ccee1e5a72294a62
|
|
| MD5 |
76fd97cfc40a57cce9d1297965f26686
|
|
| BLAKE2b-256 |
f95212763db2aa6631df124082be44bf00826e629e2236d7e8ab061b9706080f
|