From 8805dd3d7b00e58b372c19fb3bb9fabd4b175642 Mon Sep 17 00:00:00 2001 From: "Stefan J. Wernli" Date: Wed, 20 Oct 2021 15:27:58 -0700 Subject: [PATCH 1/6] Basic Runtime Driver implementation --- .../Runtime/lib/QIR/BasicRuntimeDriver.cpp | 75 +++++++++++++++++++ src/Qir/Runtime/lib/QIR/CMakeLists.txt | 1 + .../public/BasicRuntimeDriverFactory.h | 21 ++++++ 3 files changed, 97 insertions(+) create mode 100644 src/Qir/Runtime/lib/QIR/BasicRuntimeDriver.cpp create mode 100644 src/Qir/Runtime/public/BasicRuntimeDriverFactory.h diff --git a/src/Qir/Runtime/lib/QIR/BasicRuntimeDriver.cpp b/src/Qir/Runtime/lib/QIR/BasicRuntimeDriver.cpp new file mode 100644 index 00000000000..a59bc3f1e26 --- /dev/null +++ b/src/Qir/Runtime/lib/QIR/BasicRuntimeDriver.cpp @@ -0,0 +1,75 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#include + +#include "QirRuntimeApi_I.hpp" +#include "QubitManager.hpp" +#include "BasicRuntimeDriverFactory.h" + +namespace Microsoft +{ +namespace Quantum +{ + // TODO: is it OK to load/unload the dll for each simulator instance? + class CBasicRuntimeDriver : public IRuntimeDriver + { + std::unique_ptr qubitManager; + + public: + CBasicRuntimeDriver() + { + qubitManager = std::make_unique(); + } + + ~CBasicRuntimeDriver() override + { + } + + std::string QubitToString(QubitIdType q) override + { + return std::to_string(q); + } + + QubitIdType AllocateQubit() override + { + return qubitManager->Allocate(); + } + + void ReleaseQubit(QubitIdType q) override + { + qubitManager->Release(q); + } + + void ReleaseResult(Result /* result */) override + { + } + + bool AreEqualResults(Result r1, Result r2) override + { + return r1 == r2; + } + + ResultValue GetResultValue(Result r) override + { + return (r == UseZero()) ? Result_Zero : Result_One; + } + + Result UseZero() override + { + return reinterpret_cast(0); + } + + Result UseOne() override + { + return reinterpret_cast(1); + } + }; + + extern "C" void* CreateBasicRuntimeDriver() + { + return (IRuntimeDriver*)new CBasicRuntimeDriver(); + } + +} // namespace Quantum +} // namespace Microsoft diff --git a/src/Qir/Runtime/lib/QIR/CMakeLists.txt b/src/Qir/Runtime/lib/QIR/CMakeLists.txt index 8fcb15d7c04..f100670f063 100644 --- a/src/Qir/Runtime/lib/QIR/CMakeLists.txt +++ b/src/Qir/Runtime/lib/QIR/CMakeLists.txt @@ -19,6 +19,7 @@ set(rt_sup_source_files strings.cpp utils.cpp QubitManager.cpp + BasicRuntimeDriver.cpp ) # Produce object lib we'll use to create a shared lib (so/dll) later on diff --git a/src/Qir/Runtime/public/BasicRuntimeDriverFactory.h b/src/Qir/Runtime/public/BasicRuntimeDriverFactory.h new file mode 100644 index 00000000000..ca33e2b609b --- /dev/null +++ b/src/Qir/Runtime/public/BasicRuntimeDriverFactory.h @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +#ifndef BASICRUNTIMEDRIVERFACTORY_H +#define BASICRUNTIMEDRIVERFACTORY_H + +#include +#include "CoreDefines.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + QIR_SHARED_API void* CreateBasicRuntimeDriver(); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // #ifndef BASICRUNTIMEDRIVERFACTORY_H From f552c3ae4b82897e3f91833e081349990395c1e6 Mon Sep 17 00:00:00 2001 From: "Stefan J. Wernli" Date: Wed, 20 Oct 2021 16:50:19 -0700 Subject: [PATCH 2/6] Remove leftover comment --- src/Qir/Runtime/lib/QIR/BasicRuntimeDriver.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Qir/Runtime/lib/QIR/BasicRuntimeDriver.cpp b/src/Qir/Runtime/lib/QIR/BasicRuntimeDriver.cpp index a59bc3f1e26..21518a87c45 100644 --- a/src/Qir/Runtime/lib/QIR/BasicRuntimeDriver.cpp +++ b/src/Qir/Runtime/lib/QIR/BasicRuntimeDriver.cpp @@ -11,7 +11,6 @@ namespace Microsoft { namespace Quantum { - // TODO: is it OK to load/unload the dll for each simulator instance? class CBasicRuntimeDriver : public IRuntimeDriver { std::unique_ptr qubitManager; From 98026b7de40d0c62d77aadd2add7711320dafb53 Mon Sep 17 00:00:00 2001 From: "Stefan J. Wernli" Date: Wed, 20 Oct 2021 17:20:33 -0700 Subject: [PATCH 3/6] fix copyright comment --- src/Qir/Runtime/lib/QIR/BasicRuntimeDriver.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Qir/Runtime/lib/QIR/BasicRuntimeDriver.cpp b/src/Qir/Runtime/lib/QIR/BasicRuntimeDriver.cpp index 21518a87c45..6076e8cf85b 100644 --- a/src/Qir/Runtime/lib/QIR/BasicRuntimeDriver.cpp +++ b/src/Qir/Runtime/lib/QIR/BasicRuntimeDriver.cpp @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. #include From 6e289b5b508285dfd9117f420e0cff57a7694a46 Mon Sep 17 00:00:00 2001 From: "Stefan J. Wernli" Date: Wed, 20 Oct 2021 21:57:02 -0700 Subject: [PATCH 4/6] Include memory header --- src/Qir/Runtime/lib/QIR/BasicRuntimeDriver.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Qir/Runtime/lib/QIR/BasicRuntimeDriver.cpp b/src/Qir/Runtime/lib/QIR/BasicRuntimeDriver.cpp index 6076e8cf85b..f84399ae30c 100644 --- a/src/Qir/Runtime/lib/QIR/BasicRuntimeDriver.cpp +++ b/src/Qir/Runtime/lib/QIR/BasicRuntimeDriver.cpp @@ -2,6 +2,7 @@ // Licensed under the MIT License. #include +#include #include "QirRuntimeApi_I.hpp" #include "QubitManager.hpp" From f1b3dae5d167bdf77dab29566e23df46b14b9100 Mon Sep 17 00:00:00 2001 From: Ian Davis Date: Fri, 22 Oct 2021 08:03:51 -0700 Subject: [PATCH 5/6] Adding static lib generation --- src/Qir/Runtime/lib/QIR/CMakeLists.txt | 19 +++++++++++++++++ .../lib/QSharpFoundation/CMakeLists.txt | 21 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/src/Qir/Runtime/lib/QIR/CMakeLists.txt b/src/Qir/Runtime/lib/QIR/CMakeLists.txt index f100670f063..bfe0bd0ddb4 100644 --- a/src/Qir/Runtime/lib/QIR/CMakeLists.txt +++ b/src/Qir/Runtime/lib/QIR/CMakeLists.txt @@ -39,7 +39,9 @@ target_compile_definitions(qir-rt-support-obj PRIVATE EXPORT_QIR_API) #=============================================================================== # Produce the Microsoft.Quantum.Qir.Runtime dynamic library # + add_library(Microsoft.Quantum.Qir.Runtime SHARED) +add_library(Microsoft.Quantum.Qir.Runtime.Static STATIC) target_link_libraries(Microsoft.Quantum.Qir.Runtime ${CMAKE_DL_LIBS} @@ -47,13 +49,30 @@ target_link_libraries(Microsoft.Quantum.Qir.Runtime ${SPECTRE_LIBS} ) +target_link_libraries(Microsoft.Quantum.Qir.Runtime.Static + ${CMAKE_DL_LIBS} + qir-rt-support-obj + ${SPECTRE_LIBS} +) + target_include_directories(Microsoft.Quantum.Qir.Runtime PUBLIC ${public_includes}) target_compile_definitions(Microsoft.Quantum.Qir.Runtime PRIVATE EXPORT_QIR_API) +target_include_directories(Microsoft.Quantum.Qir.Runtime.Static PUBLIC ${public_includes}) +target_compile_definitions(Microsoft.Quantum.Qir.Runtime.Static PRIVATE EXPORT_QIR_API) + set_property(TARGET Microsoft.Quantum.Qir.Runtime PROPERTY POSITION_INDEPENDENT_CODE ON) +set_property(TARGET Microsoft.Quantum.Qir.Runtime.Static PROPERTY POSITION_INDEPENDENT_CODE ON) + install(TARGETS Microsoft.Quantum.Qir.Runtime RUNTIME DESTINATION "${CMAKE_BINARY_DIR}/bin" LIBRARY DESTINATION "${CMAKE_BINARY_DIR}/bin" ARCHIVE DESTINATION "${CMAKE_BINARY_DIR}/bin" ) + +install(TARGETS Microsoft.Quantum.Qir.Runtime.Static + RUNTIME DESTINATION "${CMAKE_BINARY_DIR}/bin" + LIBRARY DESTINATION "${CMAKE_BINARY_DIR}/bin" + ARCHIVE DESTINATION "${CMAKE_BINARY_DIR}/bin" +) diff --git a/src/Qir/Runtime/lib/QSharpFoundation/CMakeLists.txt b/src/Qir/Runtime/lib/QSharpFoundation/CMakeLists.txt index 177ec7f4985..afc3641a462 100644 --- a/src/Qir/Runtime/lib/QSharpFoundation/CMakeLists.txt +++ b/src/Qir/Runtime/lib/QSharpFoundation/CMakeLists.txt @@ -25,6 +25,8 @@ target_compile_definitions(qsharp-foundation-qis-support-obj PUBLIC EXPORT_QIR_A # add_library(Microsoft.Quantum.Qir.QSharp.Foundation SHARED) +add_library(Microsoft.Quantum.Qir.QSharp.Foundation.Static STATIC) + target_link_libraries(Microsoft.Quantum.Qir.QSharp.Foundation ${CMAKE_DL_LIBS} qsharp-foundation-qis-support-obj @@ -34,17 +36,36 @@ target_link_libraries(Microsoft.Quantum.Qir.QSharp.Foundation ) add_dependencies(Microsoft.Quantum.Qir.QSharp.Foundation Microsoft.Quantum.Qir.Runtime) +target_link_libraries(Microsoft.Quantum.Qir.QSharp.Foundation.Static + ${CMAKE_DL_LIBS} + qsharp-foundation-qis-support-obj + "-L${CMAKE_BINARY_DIR}/lib/QIR" + -lMicrosoft.Quantum.Qir.Runtime.Static + ${SPECTRE_LIBS} +) +add_dependencies(Microsoft.Quantum.Qir.QSharp.Foundation.Static Microsoft.Quantum.Qir.Runtime.Static) + target_include_directories(Microsoft.Quantum.Qir.QSharp.Foundation PUBLIC ${public_includes} ${common_includes} ) + target_compile_definitions(Microsoft.Quantum.Qir.QSharp.Foundation PRIVATE EXPORT_QIR_API) +target_compile_definitions(Microsoft.Quantum.Qir.QSharp.Foundation.Static PRIVATE EXPORT_QIR_API) + set_property(TARGET Microsoft.Quantum.Qir.QSharp.Foundation PROPERTY POSITION_INDEPENDENT_CODE ON) +set_property(TARGET Microsoft.Quantum.Qir.QSharp.Foundation.Static PROPERTY POSITION_INDEPENDENT_CODE ON) + install(TARGETS Microsoft.Quantum.Qir.QSharp.Foundation RUNTIME DESTINATION "${CMAKE_BINARY_DIR}/bin" LIBRARY DESTINATION "${CMAKE_BINARY_DIR}/bin" ARCHIVE DESTINATION "${CMAKE_BINARY_DIR}/bin" ) +install(TARGETS Microsoft.Quantum.Qir.QSharp.Foundation.Static + RUNTIME DESTINATION "${CMAKE_BINARY_DIR}/bin" + LIBRARY DESTINATION "${CMAKE_BINARY_DIR}/bin" + ARCHIVE DESTINATION "${CMAKE_BINARY_DIR}/bin" +) From 69312ac81358396e4d59b88881461f35a58a84e4 Mon Sep 17 00:00:00 2001 From: Ian Davis Date: Fri, 5 Nov 2021 07:14:28 -0700 Subject: [PATCH 6/6] Removing static lib changes --- src/Qir/Runtime/lib/QIR/CMakeLists.txt | 19 ---------------- .../lib/QSharpFoundation/CMakeLists.txt | 22 ------------------- 2 files changed, 41 deletions(-) diff --git a/src/Qir/Runtime/lib/QIR/CMakeLists.txt b/src/Qir/Runtime/lib/QIR/CMakeLists.txt index bfe0bd0ddb4..f100670f063 100644 --- a/src/Qir/Runtime/lib/QIR/CMakeLists.txt +++ b/src/Qir/Runtime/lib/QIR/CMakeLists.txt @@ -39,9 +39,7 @@ target_compile_definitions(qir-rt-support-obj PRIVATE EXPORT_QIR_API) #=============================================================================== # Produce the Microsoft.Quantum.Qir.Runtime dynamic library # - add_library(Microsoft.Quantum.Qir.Runtime SHARED) -add_library(Microsoft.Quantum.Qir.Runtime.Static STATIC) target_link_libraries(Microsoft.Quantum.Qir.Runtime ${CMAKE_DL_LIBS} @@ -49,30 +47,13 @@ target_link_libraries(Microsoft.Quantum.Qir.Runtime ${SPECTRE_LIBS} ) -target_link_libraries(Microsoft.Quantum.Qir.Runtime.Static - ${CMAKE_DL_LIBS} - qir-rt-support-obj - ${SPECTRE_LIBS} -) - target_include_directories(Microsoft.Quantum.Qir.Runtime PUBLIC ${public_includes}) target_compile_definitions(Microsoft.Quantum.Qir.Runtime PRIVATE EXPORT_QIR_API) -target_include_directories(Microsoft.Quantum.Qir.Runtime.Static PUBLIC ${public_includes}) -target_compile_definitions(Microsoft.Quantum.Qir.Runtime.Static PRIVATE EXPORT_QIR_API) - set_property(TARGET Microsoft.Quantum.Qir.Runtime PROPERTY POSITION_INDEPENDENT_CODE ON) -set_property(TARGET Microsoft.Quantum.Qir.Runtime.Static PROPERTY POSITION_INDEPENDENT_CODE ON) - install(TARGETS Microsoft.Quantum.Qir.Runtime RUNTIME DESTINATION "${CMAKE_BINARY_DIR}/bin" LIBRARY DESTINATION "${CMAKE_BINARY_DIR}/bin" ARCHIVE DESTINATION "${CMAKE_BINARY_DIR}/bin" ) - -install(TARGETS Microsoft.Quantum.Qir.Runtime.Static - RUNTIME DESTINATION "${CMAKE_BINARY_DIR}/bin" - LIBRARY DESTINATION "${CMAKE_BINARY_DIR}/bin" - ARCHIVE DESTINATION "${CMAKE_BINARY_DIR}/bin" -) diff --git a/src/Qir/Runtime/lib/QSharpFoundation/CMakeLists.txt b/src/Qir/Runtime/lib/QSharpFoundation/CMakeLists.txt index afc3641a462..f8ca4ebe1c0 100644 --- a/src/Qir/Runtime/lib/QSharpFoundation/CMakeLists.txt +++ b/src/Qir/Runtime/lib/QSharpFoundation/CMakeLists.txt @@ -25,8 +25,6 @@ target_compile_definitions(qsharp-foundation-qis-support-obj PUBLIC EXPORT_QIR_A # add_library(Microsoft.Quantum.Qir.QSharp.Foundation SHARED) -add_library(Microsoft.Quantum.Qir.QSharp.Foundation.Static STATIC) - target_link_libraries(Microsoft.Quantum.Qir.QSharp.Foundation ${CMAKE_DL_LIBS} qsharp-foundation-qis-support-obj @@ -36,36 +34,16 @@ target_link_libraries(Microsoft.Quantum.Qir.QSharp.Foundation ) add_dependencies(Microsoft.Quantum.Qir.QSharp.Foundation Microsoft.Quantum.Qir.Runtime) -target_link_libraries(Microsoft.Quantum.Qir.QSharp.Foundation.Static - ${CMAKE_DL_LIBS} - qsharp-foundation-qis-support-obj - "-L${CMAKE_BINARY_DIR}/lib/QIR" - -lMicrosoft.Quantum.Qir.Runtime.Static - ${SPECTRE_LIBS} -) -add_dependencies(Microsoft.Quantum.Qir.QSharp.Foundation.Static Microsoft.Quantum.Qir.Runtime.Static) - target_include_directories(Microsoft.Quantum.Qir.QSharp.Foundation PUBLIC ${public_includes} ${common_includes} ) - target_compile_definitions(Microsoft.Quantum.Qir.QSharp.Foundation PRIVATE EXPORT_QIR_API) -target_compile_definitions(Microsoft.Quantum.Qir.QSharp.Foundation.Static PRIVATE EXPORT_QIR_API) - set_property(TARGET Microsoft.Quantum.Qir.QSharp.Foundation PROPERTY POSITION_INDEPENDENT_CODE ON) -set_property(TARGET Microsoft.Quantum.Qir.QSharp.Foundation.Static PROPERTY POSITION_INDEPENDENT_CODE ON) - install(TARGETS Microsoft.Quantum.Qir.QSharp.Foundation RUNTIME DESTINATION "${CMAKE_BINARY_DIR}/bin" LIBRARY DESTINATION "${CMAKE_BINARY_DIR}/bin" ARCHIVE DESTINATION "${CMAKE_BINARY_DIR}/bin" ) - -install(TARGETS Microsoft.Quantum.Qir.QSharp.Foundation.Static - RUNTIME DESTINATION "${CMAKE_BINARY_DIR}/bin" - LIBRARY DESTINATION "${CMAKE_BINARY_DIR}/bin" - ARCHIVE DESTINATION "${CMAKE_BINARY_DIR}/bin" -)