|
QDMI v1.3.0-dev
Quantum Device Management Interface
|
This document describes breaking changes and provides guidance for upgrading between versions. For a complete list of changes, including minor and patch releases, please refer to the changelog.
As of this release, the QDMI header-only library is no longer required to be linked into QDMI device implementations. Instead, each QDMI device now bundles all necessary headers in its own include directory. This allows distributing any QDMI device implementation in a truly standalone manner. You can remove the qdmi::qdmi target from the CMake configuration of your device implementation.
To properly resolve the imports, you will need to adjust the header includes in your device implementation. Any include of the form
must be replaced with
where my is the prefix of your device implementation.
Device implementations may now be compiled with hidden symbol visibility, which is a common best practice for C++ libraries to reduce symbol clashes and improve load times. To ensure that all necessary symbols are exported, a new header file my_qdmi/export.h (where my is the device prefix) is provided as part of the device template. This header defines a macro for marking symbols for export, and you should use this macro to annotate all public symbols in your device implementation. Generally, we do this for you, by marking all QDMI interface functions with MY_QDMI_EXPORT.
The only thing that device implementations need to do is to provide a compile-definition for MY_QDMI_device_EXPORTS and the settings for compiling with hidden symbol visibility:
where MY is, again, the device prefix.
The QDMI device template has been updated to be compatible with the latest version of the QDMI specification and to include several improvements. Most importantly, as described above, the device implementation no longer needs to link against the QDMI header-only library and is now built with hidden symbol visibility by default.
Beyond that, the template has been extended to include:
In order to avoid a mismatch in the target name for the qdmi_project_warnings target between the source and installed versions of QDMI, the target alias has been adjusted. If your project relies on qdmi::project_warnings, you need to change it to qdmi::qdmi_project_warnings. More rationale is available in the PR description.
The CMake functionality for handling the prefixing of QDMI devices was refactored to improve the usability and flexibility. Particularly, the generate_device_defs_executable CMake function has been changed to allow the optional specification of the QDMI device target to link via a TARGET keyword argument. Example usage:
This change is expected to be fully backwards compatible.
The QDMI device template has been significantly updated to be more useful and provide a fully fletched starting point for new devices. This includes updating the existing template code with the latest best practices, including updating the CMake version range to 3.24-4.2 and using C++20 features.
In addition to these basic changes, the template has been extended to include:
The corresponding documentation has been updated to reflect these changes.
In addition, the template instantiation workflow has changed: the template files are no longer written as a side effect of the CMake configure step. Instead, configuration only defines the prefix and output path, and the actual file generation happens when the explicit build target qdmi-template is invoked (use qdmi-template-clean to overwrite an existing output directory).
Version 1.2.0 introduces several breaking changes, primarily related to type system improvements, duration/length unit handling, and API enhancements for neutral atom devices. Please review all sections carefully when upgrading.
Two new program formats were added to the QDMI_Program_Format enum to support additional quantum programming frameworks:
These additions are backward-compatible and do not require changes to existing code.
Breaking Change: Length and duration properties now use integer types (int64_t or uint64_t) instead of double, and represent values in device-specific units rather than standard SI units.
Device implementations must now provide the following properties to define their unit system:
Before (v1.1.0):
After (v1.2.0):
To get the device's duration unit, use the QDMI_DEVICE_PROPERTY_DURATIONUNIT property.
Migration: Replace all occurrences of QDMI_SITE_PROPERTY_ID with QDMI_SITE_PROPERTY_INDEX in your codebase.
Version 1.2.0 adds comprehensive support for neutral atom quantum computing platforms through a set of new device, site, and operation properties. These additions are non-breaking and optional for non-neutral-atom devices.
These properties enable precise modeling of neutral atom device capabilities.
Two new functions have been added for querying job properties:
These functions allow clients to retrieve job metadata and previously set parameter values, enabling better job tracking and debugging.
Breaking Change: The functions QDMI_job_wait and QDMI_device_job_wait now require an additional timeout parameter.
Function Signatures:
Timeout Parameter:
Migration:
Four new authentication options have been added to QDMI_SESSION_PARAMETER and QDMI_DEVICE_SESSION_PARAMETER enums to support diverse authentication mechanisms:
Breaking Change: The addition of new authentication options has changed the numeric values of existing enum entries in QDMI_SESSION_PARAMETER and QDMI_DEVICE_SESSION_PARAMETER.
Impact:
Migration:
Device Implementation Requirements:
Breaking Change: The QDMI_JOB_STATUS enum values have been reordered to better reflect the typical job lifecycle progression.
Impact:
Migration:
Breaking Change: The minimum required CMake version has been raised from 3.19 to 3.24.
Migration:
Rationale: This change enables better build system features and improved dependency management.
For quick reference, here are all breaking changes in v1.2.0: