From e27e46a101b8d9746fb19ddd0c4b30ca2c7098e9 Mon Sep 17 00:00:00 2001 From: Ali Asadi <10773383+maliasadi@users.noreply.github.com> Date: Thu, 10 Oct 2024 15:47:15 -0400 Subject: [PATCH 1/8] Update lightning_kokkos_catalyst CUDA target to work with Catalyst --- .../lightning_kokkos/catalyst/CMakeLists.txt | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/pennylane_lightning/core/src/simulators/lightning_kokkos/catalyst/CMakeLists.txt b/pennylane_lightning/core/src/simulators/lightning_kokkos/catalyst/CMakeLists.txt index cdf0570904..240bd12cb3 100644 --- a/pennylane_lightning/core/src/simulators/lightning_kokkos/catalyst/CMakeLists.txt +++ b/pennylane_lightning/core/src/simulators/lightning_kokkos/catalyst/CMakeLists.txt @@ -73,19 +73,23 @@ else() endif() +if(Kokkos_ENABLE_CUDA) + message(STATUS "Kokkos_ENABLE_CUDA is ON") + + target_compile_definitions(lightning_kokkos_catalyst PRIVATE + Kokkos_ENABLE_OPENMP=OFF + Kokkos_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE=OFF + KOKKOS_CUDA_OPTIONS="disable_malloc_async enable_lambda enable_constexpr" + ) +endif() + target_include_directories(lightning_kokkos_catalyst INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}) target_link_libraries(lightning_kokkos_catalyst PUBLIC lightning_compile_options - lightning_external_libs - lightning_base - lightning_gates - lightning_utils - lightning_kokkos lightning_kokkos_algorithms - lightning_kokkos_gates lightning_kokkos_measurements - lightning_kokkos_utils ) + if (BUILD_TESTS) enable_testing() add_subdirectory("tests") From 3cac2f27a69d52d0b4b6fef9e0fc981112876b31 Mon Sep 17 00:00:00 2001 From: ringo-but-quantum Date: Thu, 10 Oct 2024 19:48:11 +0000 Subject: [PATCH 2/8] Auto update version from '0.39.0-dev40' to '0.39.0-dev43' --- pennylane_lightning/core/_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane_lightning/core/_version.py b/pennylane_lightning/core/_version.py index c6e0b5050a..cff4ff5e0b 100644 --- a/pennylane_lightning/core/_version.py +++ b/pennylane_lightning/core/_version.py @@ -16,4 +16,4 @@ Version number (major.minor.patch[-label]) """ -__version__ = "0.39.0-dev40" +__version__ = "0.39.0-dev43" From b474cb563f46ced7ab5496314b3cf9791c4694f9 Mon Sep 17 00:00:00 2001 From: ringo-but-quantum Date: Thu, 10 Oct 2024 21:43:46 +0000 Subject: [PATCH 3/8] Auto update version from '0.39.0-dev42' to '0.39.0-dev43' --- pennylane_lightning/core/_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pennylane_lightning/core/_version.py b/pennylane_lightning/core/_version.py index 59d75bd653..cff4ff5e0b 100644 --- a/pennylane_lightning/core/_version.py +++ b/pennylane_lightning/core/_version.py @@ -16,4 +16,4 @@ Version number (major.minor.patch[-label]) """ -__version__ = "0.39.0-dev42" +__version__ = "0.39.0-dev43" From 3ae89d4ef3d3790d88ed638019fd077f345764fb Mon Sep 17 00:00:00 2001 From: Ali Asadi <10773383+maliasadi@users.noreply.github.com> Date: Thu, 31 Oct 2024 09:59:36 -0400 Subject: [PATCH 4/8] Update support; Tested on A100 and GH200 --- .../lightning_kokkos/catalyst/CMakeLists.txt | 15 +++++++++++---- .../catalyst/LightningKokkosSimulator.hpp | 9 ++++----- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/pennylane_lightning/core/src/simulators/lightning_kokkos/catalyst/CMakeLists.txt b/pennylane_lightning/core/src/simulators/lightning_kokkos/catalyst/CMakeLists.txt index 240bd12cb3..ba64dd68a2 100644 --- a/pennylane_lightning/core/src/simulators/lightning_kokkos/catalyst/CMakeLists.txt +++ b/pennylane_lightning/core/src/simulators/lightning_kokkos/catalyst/CMakeLists.txt @@ -50,8 +50,8 @@ else() endforeach() # Fetching include hpp headers - set(INCLUDE_HEADERS DataView.hpp - Exception.hpp + set(INCLUDE_HEADERS Exception.hpp + DataView.hpp QuantumDevice.hpp RuntimeCAPI.h Types.h @@ -76,9 +76,16 @@ endif() if(Kokkos_ENABLE_CUDA) message(STATUS "Kokkos_ENABLE_CUDA is ON") + # KOKKOS_CUDA_OPTIONS: + # - disable_malloc_async: Disable asynchronous memory allocation to ensure + # that memory operations complete before proceeding. + # - enable_lambda: Allow the use of lambda expressions in parallel + # execution policies, used in LK kernel functors, and this flag is + # required when calling those functors from an external library. + # - enable_constexpr: Enable compile-time evaluations for constants. + # There are some undefined behaviour when executing end-to-end Catalyst + # programs related to the value of `constexpr`s in the definition of gate kernels. target_compile_definitions(lightning_kokkos_catalyst PRIVATE - Kokkos_ENABLE_OPENMP=OFF - Kokkos_ENABLE_CUDA_RELOCATABLE_DEVICE_CODE=OFF KOKKOS_CUDA_OPTIONS="disable_malloc_async enable_lambda enable_constexpr" ) endif() diff --git a/pennylane_lightning/core/src/simulators/lightning_kokkos/catalyst/LightningKokkosSimulator.hpp b/pennylane_lightning/core/src/simulators/lightning_kokkos/catalyst/LightningKokkosSimulator.hpp index d28959f7c3..33d7943a46 100644 --- a/pennylane_lightning/core/src/simulators/lightning_kokkos/catalyst/LightningKokkosSimulator.hpp +++ b/pennylane_lightning/core/src/simulators/lightning_kokkos/catalyst/LightningKokkosSimulator.hpp @@ -18,8 +18,6 @@ #pragma once -#define __device_lightning_kokkos - #include #include #include @@ -62,7 +60,8 @@ class LightningKokkosSimulator final : public Catalyst::Runtime::QuantumDevice { Catalyst::Runtime::CacheManager> cache_manager{}; bool tape_recording{false}; - std::size_t device_shots; + // set default to avoid C++ tests segfaults in analytic mode + std::size_t device_shots{0}; std::mt19937 *gen{nullptr}; @@ -99,13 +98,13 @@ class LightningKokkosSimulator final : public Catalyst::Runtime::QuantumDevice { auto GenerateSamples(size_t shots) -> std::vector; public: - explicit LightningKokkosSimulator(const std::string &kwargs = "{}") { + explicit LightningKokkosSimulator(const std::string &kwargs = "{}") noexcept { auto &&args = Catalyst::Runtime::parse_kwargs(kwargs); device_shots = args.contains("shots") ? static_cast(std::stoll(args["shots"])) : 0; } - ~LightningKokkosSimulator() = default; + ~LightningKokkosSimulator() noexcept = default; LightningKokkosSimulator(const LightningKokkosSimulator &) = delete; LightningKokkosSimulator & From 5d0d75fb0b8f2d4451ad9d410c56d6a5cce56573 Mon Sep 17 00:00:00 2001 From: Ali Asadi <10773383+maliasadi@users.noreply.github.com> Date: Thu, 31 Oct 2024 10:03:01 -0400 Subject: [PATCH 5/8] Update changelog --- .github/CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index b863e65705..c4a55a9396 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -46,6 +46,9 @@ ### Improvements +* Update `lightning_kokkos_catalyst` CUDA target to work with Catalyst. + [(#942)](https://github.com/PennyLaneAI/pennylane-lightning/pull/942) + * Fix PTM stable-latest. [(#961)](https://github.com/PennyLaneAI/pennylane-lightning/pull/961) @@ -69,7 +72,7 @@ * Add zero-state initialization to both `StateVectorCudaManaged` and `StateVectorCudaMPI` constructors to remove the `reset_state` in the python layer ctor and refactor `setBasisState(state, wires)` in the C++ layer. [(#933)](https://github.com/PennyLaneAI/pennylane-lightning/pull/933) - + * The `generate_samples` methods of lightning.{qubit/kokkos} can now take in a seed number to make the generated samples deterministic. This can be useful when, among other things, fixing flaky tests in CI. [(#927)](https://github.com/PennyLaneAI/pennylane-lightning/pull/927) From bbb6a7cdb95724b64eb8dfcb3120c4a2cc4e9bc7 Mon Sep 17 00:00:00 2001 From: Ali Asadi <10773383+maliasadi@users.noreply.github.com> Date: Thu, 31 Oct 2024 10:24:00 -0400 Subject: [PATCH 6/8] Update format --- .../lightning_kokkos/catalyst/LightningKokkosSimulator.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pennylane_lightning/core/src/simulators/lightning_kokkos/catalyst/LightningKokkosSimulator.hpp b/pennylane_lightning/core/src/simulators/lightning_kokkos/catalyst/LightningKokkosSimulator.hpp index 33d7943a46..01110cb937 100644 --- a/pennylane_lightning/core/src/simulators/lightning_kokkos/catalyst/LightningKokkosSimulator.hpp +++ b/pennylane_lightning/core/src/simulators/lightning_kokkos/catalyst/LightningKokkosSimulator.hpp @@ -98,7 +98,8 @@ class LightningKokkosSimulator final : public Catalyst::Runtime::QuantumDevice { auto GenerateSamples(size_t shots) -> std::vector; public: - explicit LightningKokkosSimulator(const std::string &kwargs = "{}") noexcept { + explicit LightningKokkosSimulator( + const std::string &kwargs = "{}") noexcept { auto &&args = Catalyst::Runtime::parse_kwargs(kwargs); device_shots = args.contains("shots") ? static_cast(std::stoll(args["shots"])) From ce2bc6fa7050bf9e636403ababd5125d103cda4e Mon Sep 17 00:00:00 2001 From: Ali Asadi <10773383+maliasadi@users.noreply.github.com> Date: Thu, 31 Oct 2024 15:25:03 -0400 Subject: [PATCH 7/8] Add NVCC_VERSION checks for custom compile definitions --- .../lightning_kokkos/catalyst/CMakeLists.txt | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/pennylane_lightning/core/src/simulators/lightning_kokkos/catalyst/CMakeLists.txt b/pennylane_lightning/core/src/simulators/lightning_kokkos/catalyst/CMakeLists.txt index ba64dd68a2..6d0c8e742d 100644 --- a/pennylane_lightning/core/src/simulators/lightning_kokkos/catalyst/CMakeLists.txt +++ b/pennylane_lightning/core/src/simulators/lightning_kokkos/catalyst/CMakeLists.txt @@ -82,12 +82,22 @@ if(Kokkos_ENABLE_CUDA) # - enable_lambda: Allow the use of lambda expressions in parallel # execution policies, used in LK kernel functors, and this flag is # required when calling those functors from an external library. + # It's supported starting from NVCC v7.0. # - enable_constexpr: Enable compile-time evaluations for constants. # There are some undefined behaviour when executing end-to-end Catalyst # programs related to the value of `constexpr`s in the definition of gate kernels. - target_compile_definitions(lightning_kokkos_catalyst PRIVATE - KOKKOS_CUDA_OPTIONS="disable_malloc_async enable_lambda enable_constexpr" - ) + # This flag should be enforced for NVCC v7.5+. + if(NVCC_VERSION VERSION_LESS "7.0") + message(WARNING "Building lightning_kokkos_catalyst without lambda and constexpr support.") + target_compile_definitions(lightning_kokkos_catalyst PRIVATE KOKKOS_CUDA_OPTIONS="disable_malloc_async") + elseif(NVCC_VERSION VERSION_LESS "7.5") + message(WARNING "Building lightning_kokkos_catalyst without constexpr support.") + target_compile_definitions(lightning_kokkos_catalyst PRIVATE KOKKOS_CUDA_OPTIONS="disable_malloc_async enable_lambda") + else() + target_compile_definitions(lightning_kokkos_catalyst PRIVATE + KOKKOS_CUDA_OPTIONS="disable_malloc_async enable_lambda enable_constexpr" + ) + endif() endif() target_include_directories(lightning_kokkos_catalyst INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}) From d8e76273af731915f0b1d1495a069a6b5b73f064 Mon Sep 17 00:00:00 2001 From: Ali Asadi <10773383+maliasadi@users.noreply.github.com> Date: Wed, 6 Nov 2024 23:06:57 -0500 Subject: [PATCH 8/8] trigger ci --- pyproject.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 18acfdf275..d2e348a5bc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,12 +3,12 @@ requires = ["cmake~=3.27.0", "ninja; platform_system!='Windows'", "setuptools>=4 build-backend = "setuptools.build_meta" [project] -name = "PennyLane_Lightning_Kokkos" +name = "PennyLane_Lightning" description = "PennyLane-Lightning plugin" readme = "README.rst" requires-python = ">=3.10" classifiers = [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Science/Research", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Topic :: Scientific/Engineering :: Physics",] -dependencies = ["pennylane>=0.37", "pennylane_lightning==0.40.0-dev3"] +dependencies = ["pennylane>=0.37"] dynamic = [ "version",] [[project.maintainers]] name = "Xanadu Quantum Technologies Inc." @@ -26,4 +26,4 @@ tensor = [ "pennylane-lightning-tensor",] Homepage = "https://github.com/PennyLaneAI/pennylane-lightning" [project.entry-points."pennylane.plugins"] -"lightning.kokkos" = "pennylane_lightning.lightning_kokkos:LightningKokkos" +"lightning.qubit" = "pennylane_lightning.lightning_qubit:LightningQubit"