From e57d387fdfe5855e8d6b64694487d9555f3d801e Mon Sep 17 00:00:00 2001 From: Durganshu Date: Tue, 16 Jul 2024 01:49:33 +0200 Subject: [PATCH 1/3] Replaced qdmi calls in ArchitectureFactory with sys-sage ones --- CMakeLists.txt | 7 +++++++ cmake/Findqdmi.cmake | 2 +- cmake/Findsys-sage.cmake | 13 +++++++++++++ src/ArchitectureFactory.cpp | 37 ++++++++++++------------------------- 4 files changed, 33 insertions(+), 26 deletions(-) create mode 100644 cmake/Findsys-sage.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index f9ac46cc3..3e9f9be2d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,6 +20,9 @@ find_package(qdmi REQUIRED) # Find QInfo package find_package(qinfo REQUIRED) +# Find sys-sage package +find_package(sys-sage REQUIRED) + # Find the Threads package find_package(Threads REQUIRED) @@ -141,12 +144,14 @@ foreach(src_file ${ANALYSIS_PASSES_SOURCE_FILES}) qdmi qinfo #fomac + sys-sage utilities) target_include_directories(${target_name} PRIVATE ${CMAKE_INSTALL_PREFIX}/include ${QDMI_INCLUDE_DIRS} ${QMAP_INCLUDE_DIRS} + ${SYS_SAGE_INCLUDE_DIRS} PUBLIC $ $) @@ -169,6 +174,7 @@ foreach(src_file ${TRANSFORMATION_PASSES_SOURCE_FILES}) qdmi qinfo #fomac + sys-sage utilities ) @@ -180,6 +186,7 @@ foreach(src_file ${TRANSFORMATION_PASSES_SOURCE_FILES}) ${QDMI_INCLUDE_DIRS} ${MQT_QMAP_INCLUDE_BUILD_DIR} ${QMAP_INCLUDE_DIRS} + ${SYS_SAGE_INCLUDE_DIRS} PUBLIC $ $) diff --git a/cmake/Findqdmi.cmake b/cmake/Findqdmi.cmake index 1e4331904..b05dece61 100644 --- a/cmake/Findqdmi.cmake +++ b/cmake/Findqdmi.cmake @@ -3,7 +3,7 @@ include(FetchContent) FetchContent_Declare( qdmi GIT_REPOSITORY git@github.com:Munich-Quantum-Software-Stack/QDMI.git - GIT_TAG develop + GIT_TAG ibm-backend-testing ) FetchContent_MakeAvailable(qdmi) diff --git a/cmake/Findsys-sage.cmake b/cmake/Findsys-sage.cmake new file mode 100644 index 000000000..36f1b58a1 --- /dev/null +++ b/cmake/Findsys-sage.cmake @@ -0,0 +1,13 @@ +include(FetchContent) + +FetchContent_Declare( + sys-sage + GIT_REPOSITORY git@github.com:Durganshu/sys-sage.git + GIT_TAG qc-integration +) + +FetchContent_MakeAvailable(sys-sage) + +FetchContent_GetProperties(sys-sage) + +set(SYS_SAGE_INCLUDE_DIRS "${sys-sage_SOURCE_DIR}/include") \ No newline at end of file diff --git a/src/ArchitectureFactory.cpp b/src/ArchitectureFactory.cpp index 1c19bc548..8dd6d706f 100644 --- a/src/ArchitectureFactory.cpp +++ b/src/ArchitectureFactory.cpp @@ -1,5 +1,5 @@ #include "ArchitectureFactory.hpp" - +#include "sys-sage.hpp" #include #include #include @@ -7,34 +7,21 @@ namespace mqt { Architecture createArchitecture(QDMI_Device dev) { - int num_qubits = 0; - - int err = QDMI_query_qubits_num(dev, &num_qubits); - if (err != QDMI_SUCCESS) - throw std::runtime_error("Could not get number of qubits via QDMI"); - if (num_qubits == 0) - throw std::runtime_error("Number of qubits cannot be zero"); - - QDMI_Qubit qubits; + + // QDMI_Parser: sys-sage's interface to qdmi (for retrieving the static topology) + QDMI_Parser qdmi; - // create a coupling map - err = QDMI_query_all_qubits(dev, &qubits); + // An instance to QunatumBackend for storing the topology + QuantumBackend* qc = new QuantumBackend(0, "IBM_Backend"); - if (err != QDMI_SUCCESS || qubits == NULL) - throw std::runtime_error("Could not get qubits via QDMI"); + // Create the topology + qdmi.createQcTopo(qc, dev); - CouplingMap cm{}; - for (int i = 0; i < num_qubits; i++) - { - if (qubits[i].coupling_mapping != NULL && qubits[i].size_coupling_mapping) - { - for (int j = 0; j < qubits[i].size_coupling_mapping; j++) - cm.emplace(i, qubits[i].coupling_mapping[j]); - } - } + std::uint16_t num_qubits = qc->GetNumberofQubits(); - free(qubits); + CouplingMap cm = qc->GetAllCouplingMaps(); - return {static_cast(num_qubits), cm}; + delete qc; + return {num_qubits, cm}; } } // namespace mqt From cc9e6daf726a1a5ab4398f238e1a5f795c35e075 Mon Sep 17 00:00:00 2001 From: Durganshu Date: Tue, 16 Jul 2024 19:29:54 +0200 Subject: [PATCH 2/3] Suggested changes in Cmake --- CMakeLists.txt | 2 -- cmake/Findsys-sage.cmake | 6 +----- src/ArchitectureFactory.cpp | 4 ++-- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3e9f9be2d..dc118756f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -151,7 +151,6 @@ foreach(src_file ${ANALYSIS_PASSES_SOURCE_FILES}) PRIVATE ${CMAKE_INSTALL_PREFIX}/include ${QDMI_INCLUDE_DIRS} ${QMAP_INCLUDE_DIRS} - ${SYS_SAGE_INCLUDE_DIRS} PUBLIC $ $) @@ -186,7 +185,6 @@ foreach(src_file ${TRANSFORMATION_PASSES_SOURCE_FILES}) ${QDMI_INCLUDE_DIRS} ${MQT_QMAP_INCLUDE_BUILD_DIR} ${QMAP_INCLUDE_DIRS} - ${SYS_SAGE_INCLUDE_DIRS} PUBLIC $ $) diff --git a/cmake/Findsys-sage.cmake b/cmake/Findsys-sage.cmake index 36f1b58a1..ebd742d32 100644 --- a/cmake/Findsys-sage.cmake +++ b/cmake/Findsys-sage.cmake @@ -6,8 +6,4 @@ FetchContent_Declare( GIT_TAG qc-integration ) -FetchContent_MakeAvailable(sys-sage) - -FetchContent_GetProperties(sys-sage) - -set(SYS_SAGE_INCLUDE_DIRS "${sys-sage_SOURCE_DIR}/include") \ No newline at end of file +FetchContent_MakeAvailable(sys-sage) \ No newline at end of file diff --git a/src/ArchitectureFactory.cpp b/src/ArchitectureFactory.cpp index 8dd6d706f..a0fdd72d9 100644 --- a/src/ArchitectureFactory.cpp +++ b/src/ArchitectureFactory.cpp @@ -1,5 +1,5 @@ #include "ArchitectureFactory.hpp" -#include "sys-sage.hpp" +#include #include #include #include @@ -11,7 +11,7 @@ Architecture createArchitecture(QDMI_Device dev) { // QDMI_Parser: sys-sage's interface to qdmi (for retrieving the static topology) QDMI_Parser qdmi; - // An instance to QunatumBackend for storing the topology + // An instance to QuantumBackend for storing the topology QuantumBackend* qc = new QuantumBackend(0, "IBM_Backend"); // Create the topology From 49aebf4578ca7ac0b6819441639ccf82d712467d Mon Sep 17 00:00:00 2001 From: Durganshu Date: Fri, 16 Aug 2024 22:50:12 +0200 Subject: [PATCH 3/3] No dynamic allocation --- src/ArchitectureFactory.cpp | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/ArchitectureFactory.cpp b/src/ArchitectureFactory.cpp index a0fdd72d9..dce687131 100644 --- a/src/ArchitectureFactory.cpp +++ b/src/ArchitectureFactory.cpp @@ -8,20 +8,16 @@ namespace mqt { Architecture createArchitecture(QDMI_Device dev) { - // QDMI_Parser: sys-sage's interface to qdmi (for retrieving the static topology) - QDMI_Parser qdmi; + // QdmiParser: sys-sage's interface to qdmi (for retrieving the static topology) + QdmiParser qdmi; // An instance to QuantumBackend for storing the topology - QuantumBackend* qc = new QuantumBackend(0, "IBM_Backend"); + QuantumBackend qc = createQcTopo(dev); - // Create the topology - qdmi.createQcTopo(qc, dev); + std::uint16_t num_qubits = qc.GetNumberofQubits(); - std::uint16_t num_qubits = qc->GetNumberofQubits(); + CouplingMap cm = qc.GetAllCouplingMaps(); - CouplingMap cm = qc->GetAllCouplingMaps(); - - delete qc; return {num_qubits, cm}; } } // namespace mqt