Skip to content
#software testing Open access

QuEST-Kit/QuEST: v4.3.0

Sep 2026 · Zenodo (CERN European Organization for Nuclear Research)

Abstract

Overview This release accelerates simulation of (especially) few-qubit Quregs, adds control and performance tuning utilities for MPI and GPU superusers, adds randomised Trotter simulation, and reduces the likelihood of QuEST symbols colliding with other software stacks. Optimisations QuEST's simulation of few-qubit Qureg has been accelerated, by reducing memory transfer overheads (between function stacks, and between CPU and GPU memory), and through optional BMI2 intrinsics. QuEST's CPU and multithreaded backend has been accelerated (at all scales) on specific platforms / compilers, by switching to custom complex arithmetic. QuEST's detection of CUDA-aware MPI has been expanded to MPICH CRAY systems, greatly accelerating multi-GPU simulation. New features Added experimental initCustomMpiCommQuESTEnv() and initCustomMpiCommQuESTEnv() functions which permit users to retain control of MPI during QuEST simulation, and dedicate only a sub-communicator (e.g. only some MPI processes) to QuEST. Users can now also disable QuEST distribution through initCustomQuESTEnv() while still themselves using MPI, even when QuEST was compiled with MPI. Added an experimental setQuESTNumGpuThreadsPerBlock() function to override QuEST's GPU parallelisation granularity at runtime, permitting simple performance tuning. This accompanies a getter (get...), an environment variable QUEST_DEFAULT_NUM_GPU_THREADS_PER_BLOCK to override the parallelisation at launch time, and a CMake option of the same name to override at build-time. Added experimental functions saveQuregToFile() and createQuregFromFile(), which use ADIOS2 for Qureg checkpointing. Added sortPauliStrSumLexicographic() and sortPauliStrSumMagnitude() to reorder the terms within a PauliStrSum, affecting the numerical accuracy of Trotterisation. The Trotter functions now accept an additional permuteTerms boolean, which when true, sees every Trotter repetition randomise the ordering of the Trotter terms, often improving numerical accuracy. This affects: The QFT functions now accept an inverse boolean, to apply the inverse QFT. Improved the CMake build: Added QUEST_INSTALL_BINARIES to enable including examples and user-source in the QuEST installation directory. Added a warning when CMake configures a (unoptimised) non-release build. Removed brittle, platform-specific compiler flags (to work around a since-resolved performance problem). Added QUEST_ prefix to (almost) all CMake options, to avoid collision with other projects (see API breaks below). During compilation of the tests, the compiled executable is no longer run (for Catch2 test discovery), improving ease of compilation on supercomputers (e.g. systems with distinct job-submission and job-run nodes). API breaks As above, the Trotter functions now accept an additional permuteTerms boolean. This affects: apply(Multi)(State)(Controlled)TrotterizedPauliStrSumGadget() applyTrotterizedNonUnitaryPauliStrSumGadget() applyTrotterized(Unitary|Imaginary|Noisy)TimeEvolution() As above, the QFT functions now accept an inverse boolean. This affects: apply(Full)QuantumFourierTransform() A superfluous numControls argument was removed from the std::vector (C++ only) overloads of applyMultiStateControlledSqrtSwap() and applyMultiStateControlledCompMatr2(). All debug functions now explicitly contain the word QuEST (for example, setQuESTSeeds()) as the second word, indicated by [QuEST] below. This affects functions: (set|get)[QuEST]Seeds(ToDefault)() get[QuEST]NumSeeds() set[QuEST]InputErrorHandler() set[QuEST]Validation(On|Off)() set[QuEST]ValidationEpsilon(ToDefault)() set[QuEST]MaxNumReportedItems() set[QuEST]MaxNumReportedSigFigs() set[QuEST]NumReportedNewlines() set[QuEST]ReportedPauli(Chars|StrStyle)() get[QuEST]GpuCacheSize() clear[QuEST]GpuCache() get[QuEST]EnvironmentString() All environment variables now begin with QUEST_, as indicated by [QUEST_] below. This affects environment variables: [QUEST_]PERMIT_NODES_TO_SHARE_GPU [QUEST_]DEFAULT_VALIDATION_EPSILON [QUEST_]TEST_NUM_QUBITS_IN_QUREG [QUEST_]TEST_MAX_NUM_QUBIT_PERMUTATIONS [QUEST_]TEST_MAX_NUM_SUPEROP_TARGETS [QUEST_]TEST_NUM_MIXED_DEPLOYMENT_REPETITIONS TEST_ALL_DEPLOYMENTS has become QUEST_TEST_TRY_ALL_DEPLOYMENTS All CMake options have been renamed, to now begin with QUEST_ or USER_ (to disambiguate whether they relate to the QuEST library or the user's optional source files), and several have been made more explicit. The changes are: USER_SOURCE -> USER_SOURCE_NAMES OUTPUT_EXE -> USER_OUTPUT_EXE_NAME LIB_NAME -> QUEST_OUTPUT_LIB_NAME VERBOSE_LIB_NAME -> QUEST_APPEND_CONFIG_TO_LIB_NAME FLOAT_PRECISION -> QUEST_FLOAT_PRECISION BUILD_EXAMPLES -> QUEST_BUILD_EXAMPLES ENABLE_MULTITHREADING -> QUEST_ENABLE_OMP ENABLE_DISTRIBUTION -> QUEST_ENABLE_MPI ENABLE_TESTING -> QUEST_BUILD_TESTS DOWNLOAD_CATCH2 -> QUEST_TESTS_DOWNLOAD_CATCH2 [QUEST_]ENABLE_CUDA [QUEST_]ENABLE_CUQUANTUM [QUEST_]ENABLE_HIP [QUEST_]ENABLE_DEPRECATED_API [QUEST_]DISABLE_DEPRECATION_WARNINGS Minor changes The output of reportQuESTEnv() has been rearranged and reordered. setSeeds (now called setQuESTSeeds()) now validates that its given list of integers is non-null. The int fields of the QuESTEnv struct (such as isMultithreaded) have been changed to type bool (exposed by in C). Added extended examples set_num_gpu_threads.(c|cpp) and user_owned_(sub)mpi.(c|cpp) Patches #729 Restored compatibility with ROCm 6 and beyond, and removed the need for -Ofast to be applied to CPU subroutines. #699 Patched an overflow bug in the GPU (Thrust) backend affecting simulation using more than 64 GiB of memory in a single GPU (i.e. a non-distributed 32-qubit statevector, or 16-qubit density matrix). Formerly, the below functions would induce a crash, or set all amplitudes to zero, or output zero. (set|create)FullStateDiagMatrFromPauliStrSum() setQuregToPauliStrSum() calcTotalProb() calcProbOf(Multi)QubitOutcome() calcFidelity() calcExpecPauliStr() calcExpecPauliStrSum() calcExpecFullStateDiagMatr() apply(Multi)QubitProjector() initRandomPureState() #693 Restored compatibility with CUDA 13 (solving compilation failure). #817 Added guards to avoid bug on AMD GPUs with >= 2^32 amplitudes per GPU. Expect to patch underlying issue in v4.3.1. Notable internal changes The CPU and GPU backends no longer use std::complex arithmetic overloads, and instead make use of custom cpu_qcomp and gpu_qcomp types. The internal functions no longer pass qubit lists as copies of heap-based std::vector . They now instead use List64 - a custom, stack-based, light-weight, fixed-capacity list - and pass constant references thereof (``ConstList64`) where possible. Internal MPI calls now use a dedicated MPI communicator rather than MPI_COMM_WORLD to avoid collisions with user messages. New contributors This release contained contributions from new contributors: Vasco Ferreira in #702, #705, #708 Maurice Jamieson in #706 Daniel Expósito Patiño in #738 Íñigo Aréjula Aísa in #722 Amon K. in #783 Ashmit JaiSarita Gupta in #780 PoJen Wang in #796 Mukul Kumar in #791 (unmerged, but contains useful benchmarking)

View source

Similar papers

#computer vision Review Sep 2017

Agile Software Development Methods: Review and Analysis

This publication proposes a definition and a classification of agile software development approaches and analyses ten software development methods that can be characterized as being "agile" against the defined criterion.

P. Abrahamsson, O. Salo, Jussi Ronkainen et al. · 727 citations · ⚡54
#computer vision Jun 2008

The impact of agile practices on communication in software development

The study shows that agile practices improve both informal and formal communication, but indicates that, in larger development situations involving multiple external stakeholders, a mismatch of adequate communication mechanisms can sometimes even hinder the communication.

M. Pikkarainen, Jukka Haikara, O. Salo et al. · 401 citations · ⚡48
#machine learning Review Open access Oct 2014

Software development in startup companies: A systematic mapping study

The results indicate that software engineering work practices are chosen opportunistically, adapted and configured to provide value under the constrains imposed by the startup context.

Nicolò Paternoster, Carmine Giardino, M. Unterkalmsteiner et al. · 394 citations · ⚡54
#computer vision Review Mar 2008

Agile methods in European embedded software development organisations: a survey on the actual use and usefulness of Extreme Programming and Scrum

The results show that the embedded industry has been able to apply agile methods in its development processes and that the appreciation of the agile methods and their individual practices appears to increase once adopted and applied in practice.

O. Salo, P. Abrahamsson · 238 citations · ⚡9
#computer vision Open access Jul 2017

What happens when software developers are (un)happy

Consequences of happiness and unhappiness that are beneficial and detrimental for developers' mental well-being, the software development process, and the produced artifacts are found.

D. Graziotin, Fabian Fagerholm, Xiaofeng Wang et al. · 236 citations · ⚡13
#computer vision Open access Oct 2004

Mobile-D: an agile approach for mobile application development

The Mobile-D approach is briefly outlined here and the experiences gained from four case studies are discussed, which helped develop an agile development approach for mobile application development.

P. Abrahamsson, Antti Hanhineva, H. Hulkko et al. · 225 citations · ⚡18

Related blog posts

MIT News · Artificial Intelligence Oct 2, 2026

Documenting the tech worker movement

Writing as a participant and researcher, PhD student JS Tan SM ’22 has co-authored a new book about the rise of tech worker protests and the employer backlash that followed.

GPT-Lab Sep 23, 2026

Requirements Don’t Live in Isolation: What We’re Exploring with Req-Space

Requirements in large systems rarely exist in isolation. Their meaning depends on the wider project context - other requirements, policies, decisions, tests, and implementation details. That becomes especially important when AI is used for review, because spotting a possible conflict or gap is only the beginning. ReqSpace explores how AI, visualisation, and connected project context can help reviewers understand those findings, trace the relationships behind them, and focus on the questions that…

GPT-Lab Sep 17, 2026

Beyond Prompt Engineering: The Role of Tacit Knowledge in Software Engineering

AI is making software generation faster, but speed does not remove the need for expertise. As more work is delegated to AI, tacit knowledge may become one of the most important human advantages in software engineering. The post Beyond Prompt Engineering: The Role of Tacit Knowledge in Software Engineering appeared first on GPT-Lab.

We use cookies to run the site and, with your consent, for analytics and to show ads. See our Cookie Policy.