From e3c5036ef18d2d40b5da26bf38f99feac279bae9 Mon Sep 17 00:00:00 2001 From: Simone Balducci <93096843+sbaldu@users.noreply.github.com> Date: Wed, 8 Jan 2025 15:35:17 +0100 Subject: [PATCH] Update alpakaconfig (#70) * Use alpaka ENABLED flag instead of PRESENT * Rename alpaka acc namespace to avoid conflict with cmssw * Update platform aliases * Move definition of accelerator namespace * Update namespace names in benchmarking scripts * Update cuda alpakacore * Update hip alpakacore * Update package version --- .../alpaka/AlpakaCore/CachedBufAlloc.h | 4 +- .../alpaka/AlpakaCore/CachingAllocator.h | 7 ++- CLUEstering/alpaka/AlpakaCore/alpakaConfig.h | 56 +++++++------------ CLUEstering/alpaka/AlpakaCore/alpakaDevices.h | 23 ++++++-- .../AlpakaCore/getDeviceCachingAllocator.h | 2 +- CLUEstering/alpaka/CLUE/CLUEAlgoAlpaka.h | 4 +- CLUEstering/alpaka/CLUE/CLUEAlpakaKernels.h | 4 +- CLUEstering/alpaka/CLUE/Run.h | 4 +- .../DataFormats/alpaka/AlpakaVecArray.h | 2 + .../alpaka/DataFormats/alpaka/PointsAlpaka.h | 4 +- .../alpaka/DataFormats/alpaka/TilesAlpaka.h | 4 +- benchmark/dataset_size/main.cc | 6 +- benchmark/profiling/main.cc | 10 ++-- setup.py | 2 +- 14 files changed, 69 insertions(+), 63 deletions(-) diff --git a/CLUEstering/alpaka/AlpakaCore/CachedBufAlloc.h b/CLUEstering/alpaka/AlpakaCore/CachedBufAlloc.h index 60d8fb36..579cd79d 100644 --- a/CLUEstering/alpaka/AlpakaCore/CachedBufAlloc.h +++ b/CLUEstering/alpaka/AlpakaCore/CachedBufAlloc.h @@ -91,7 +91,7 @@ namespace clue { auto deleter = [alloc = &allocator](TElem* ptr) { alloc->free(ptr); }; return alpaka::BufCudaRt( - dev, reinterpret_cast(memPtr), std::move(deleter), pitchBytes, extent); + dev, reinterpret_cast(memPtr), std::move(deleter), extent, pitchBytes); } }; @@ -153,7 +153,7 @@ namespace clue { auto deleter = [alloc = &allocator](TElem* ptr) { alloc->free(ptr); }; return alpaka::BufHipRt( - dev, reinterpret_cast(memPtr), std::move(deleter), pitchBytes, extent); + dev, reinterpret_cast(memPtr), std::move(deleter), extent, pitchBytes); } }; diff --git a/CLUEstering/alpaka/AlpakaCore/CachingAllocator.h b/CLUEstering/alpaka/AlpakaCore/CachingAllocator.h index ae95c0e6..b31663d6 100644 --- a/CLUEstering/alpaka/AlpakaCore/CachingAllocator.h +++ b/CLUEstering/alpaka/AlpakaCore/CachingAllocator.h @@ -334,9 +334,10 @@ namespace clue { return alpaka::allocBuf(device_, bytes); } else if constexpr (std::is_same_v) { // allocate pinned host memory accessible by the queue's platform - return alpaka::allocMappedBuf>, - std::byte, - size_t>(device_, bytes); + using Platform = alpaka::Platform>; + return alpaka:: + allocMappedBuf>, std::byte, size_t>( + device_, ::clue::platform(), bytes); } else { // unsupported combination static_assert(std::is_same_v> or diff --git a/CLUEstering/alpaka/AlpakaCore/alpakaConfig.h b/CLUEstering/alpaka/AlpakaCore/alpakaConfig.h index deeb6507..b6c63345 100644 --- a/CLUEstering/alpaka/AlpakaCore/alpakaConfig.h +++ b/CLUEstering/alpaka/AlpakaCore/alpakaConfig.h @@ -2,6 +2,7 @@ #pragma once #include "alpakaFwd.h" +#include namespace alpaka_common { @@ -30,15 +31,15 @@ namespace alpaka_common { // host types using DevHost = alpaka::DevCpu; - using PltfHost = alpaka::PltfCpu; + using PlatformHost = alpaka::PlatformCpu; } // namespace alpaka_common -#ifdef ALPAKA_ACC_GPU_CUDA_PRESENT +#ifdef ALPAKA_ACC_GPU_CUDA_ENABLED namespace alpaka_cuda_async { using namespace alpaka_common; - using Platform = alpaka::PltfCudaRt; + using Platform = alpaka::PlatformCudaRt; using Device = alpaka::DevCudaRt; using Queue = alpaka::QueueCudaRtNonBlocking; using Event = alpaka::EventCudaRt; @@ -49,19 +50,16 @@ namespace alpaka_cuda_async { using Acc2D = Acc; using Acc3D = Acc; +#define ALPAKA_ACCELERATOR_NAMESPACE_CLUE alpaka_cuda_async } // namespace alpaka_cuda_async -#endif // ALPAKA_ACC_GPU_CUDA_PRESENT - -#ifdef ALPAKA_ACC_GPU_CUDA_ASYNC_BACKEND -#define ALPAKA_ACCELERATOR_NAMESPACE alpaka_cuda_async #endif // ALPAKA_ACC_GPU_CUDA_ASYNC_BACKEND -#ifdef ALPAKA_ACC_GPU_HIP_PRESENT +#ifdef ALPAKA_ACC_GPU_HIP_ENABLED namespace alpaka_rocm_async { using namespace alpaka_common; - using Platform = alpaka::PltfHipRt; + using Platform = alpaka::PlatformHipRt; using Device = alpaka::DevHipRt; using Queue = alpaka::QueueHipRtNonBlocking; using Event = alpaka::EventHipRt; @@ -72,19 +70,16 @@ namespace alpaka_rocm_async { using Acc2D = Acc; using Acc3D = Acc; +#define ALPAKA_ACCELERATOR_NAMESPACE_CLUE alpaka_rocm_async } // namespace alpaka_rocm_async -#endif // ALPAKA_ACC_GPU_HIP_PRESENT - -#ifdef ALPAKA_ACC_GPU_HIP_ASYNC_BACKEND -#define ALPAKA_ACCELERATOR_NAMESPACE alpaka_rocm_async -#endif // ALPAKA_ACC_GPU_HIP_ASYNC_BACKEND +#endif // ALPAKA_ACC_GPU_HIP_ENABLED -#ifdef ALPAKA_ACC_CPU_B_SEQ_T_SEQ_PRESENT +#ifdef ALPAKA_ACC_CPU_B_SEQ_T_SEQ_ENABLED namespace alpaka_serial_sync { using namespace alpaka_common; - using Platform = alpaka::PltfCpu; + using Platform = alpaka::PlatformCpu; using Device = alpaka::DevCpu; using Queue = alpaka::QueueCpuBlocking; using Event = alpaka::EventCpu; @@ -95,19 +90,16 @@ namespace alpaka_serial_sync { using Acc2D = Acc; using Acc3D = Acc; +#define ALPAKA_ACCELERATOR_NAMESPACE_CLUE alpaka_serial_sync } // namespace alpaka_serial_sync -#endif // ALPAKA_ACC_CPU_B_SEQ_T_SEQ_PRESENT - -#ifdef ALPAKA_ACC_CPU_B_SEQ_T_SEQ_SYNC_BACKEND -#define ALPAKA_ACCELERATOR_NAMESPACE alpaka_serial_sync -#endif // ALPAKA_ACC_CPU_B_SEQ_T_SEQ_SYNC_BACKEND +#endif // ALPAKA_ACC_CPU_B_SEQ_T_SEQ_ENABLED -#ifdef ALPAKA_ACC_CPU_B_TBB_T_SEQ_PRESENT +#ifdef ALPAKA_ACC_CPU_B_TBB_T_SEQ_ENABLED namespace alpaka_tbb_async { using namespace alpaka_common; - using Platform = alpaka::PltfCpu; + using Platform = alpaka::PlatformCpu; using Device = alpaka::DevCpu; using Queue = alpaka::QueueCpuNonBlocking; using Event = alpaka::EventCpu; @@ -118,19 +110,16 @@ namespace alpaka_tbb_async { using Acc2D = Acc; using Acc3D = Acc; +#define ALPAKA_ACCELERATOR_NAMESPACE_CLUE alpaka_tbb_async } // namespace alpaka_tbb_async -#endif // ALPAKA_ACC_CPU_B_TBB_T_SEQ_PRESENT +#endif // ALPAKA_ACC_CPU_B_TBB_T_SEQ_ENABLED -#ifdef ALPAKA_ACC_CPU_B_TBB_T_SEQ_ASYNC_BACKEND -#define ALPAKA_ACCELERATOR_NAMESPACE alpaka_tbb_async -#endif // ALPAKA_ACC_CPU_B_TBB_T_SEQ_ASYNC_BACKEND - -#ifdef ALPAKA_ACC_CPU_B_OMP2_T_SEQ_PRESENT +#ifdef ALPAKA_ACC_CPU_B_OMP2_T_SEQ_ENABLED namespace alpaka_omp2_async { using namespace alpaka_common; - using Platform = alpaka::PltfCpu; + using Platform = alpaka::PlatformCpu; using Device = alpaka::DevCpu; using Queue = alpaka::QueueCpuBlocking; using Event = alpaka::EventCpu; @@ -141,10 +130,7 @@ namespace alpaka_omp2_async { using Acc2D = Acc; using Acc3D = Acc; +#define ALPAKA_ACCELERATOR_NAMESPACE_CLUE alpaka_omp2_async } // namespace alpaka_omp2_async -#endif // ALPAKA_ACC_CPU_B_OMP2_T_SEQ_PRESENT - -#ifdef ALPAKA_ACC_CPU_B_OMP2_T_SEQ_ASYNC_BACKEND -#define ALPAKA_ACCELERATOR_NAMESPACE alpaka_omp2_async -#endif // ALPAKA_ACC_CPU_B_OMP2_T_SEQ_ASYNC_BACKEND +#endif // ALPAKA_ACC_CPU_B_OMP2_T_SEQ_ENABLED diff --git a/CLUEstering/alpaka/AlpakaCore/alpakaDevices.h b/CLUEstering/alpaka/AlpakaCore/alpakaDevices.h index 9f44de44..af59afa3 100644 --- a/CLUEstering/alpaka/AlpakaCore/alpakaDevices.h +++ b/CLUEstering/alpaka/AlpakaCore/alpakaDevices.h @@ -10,14 +10,29 @@ #include "getDeviceIndex.h" namespace clue { + // returns the alpaka accelerator platform + template >> + inline TPlatform const& platform() { + // initialise the platform the first time that this function is called + static const auto platform = TPlatform{}; + return platform; + } + + // return the alpaka accelerator devices for the given platform + template >> + inline std::vector> const& devices() { + // enumerate all devices the first time that this function is called + static const auto devices = alpaka::getDevs(platform()); + return devices; + } // alpaka host device inline const alpaka_common::DevHost host = alpaka::getDevByIdx(alpaka::PlatformCpu{}, 0u); // alpaka accelerator devices - template - inline std::vector> devices; + /* template */ + /* inline std::vector> devices; */ template std::vector> enumerate() { @@ -27,10 +42,10 @@ namespace clue { using Platform = TPlatform; std::vector devices; - uint32_t n = alpaka::getDevCount(); + uint32_t n = alpaka::getDevCount(Platform{}); devices.reserve(n); for (uint32_t i = 0; i < n; ++i) { - devices.push_back(alpaka::getDevByIdx(i)); + devices.push_back(alpaka::getDevByIdx(Platform{}, i)); assert(getDeviceIndex(devices.back()) == static_cast(i)); } return devices; diff --git a/CLUEstering/alpaka/AlpakaCore/getDeviceCachingAllocator.h b/CLUEstering/alpaka/AlpakaCore/getDeviceCachingAllocator.h index 36a1c68f..e2ac8059 100644 --- a/CLUEstering/alpaka/AlpakaCore/getDeviceCachingAllocator.h +++ b/CLUEstering/alpaka/AlpakaCore/getDeviceCachingAllocator.h @@ -57,7 +57,7 @@ namespace clue { size_t const index = getDeviceIndex(device); - std::vector devs = alpaka::getDevs>(); + std::vector devs = alpaka::getDevs(alpaka::Platform{}); assert(index < clue::enumerate>().size()); diff --git a/CLUEstering/alpaka/CLUE/CLUEAlgoAlpaka.h b/CLUEstering/alpaka/CLUE/CLUEAlgoAlpaka.h index ef5d2a2d..baa27a05 100644 --- a/CLUEstering/alpaka/CLUE/CLUEAlgoAlpaka.h +++ b/CLUEstering/alpaka/CLUE/CLUEAlgoAlpaka.h @@ -22,7 +22,7 @@ using clue::VecArray; -namespace ALPAKA_ACCELERATOR_NAMESPACE { +namespace ALPAKA_ACCELERATOR_NAMESPACE_CLUE { template class CLUEAlgoAlpaka { @@ -247,4 +247,4 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { return {h_points.m_clusterIndex, h_points.m_isSeed}; } -} // namespace ALPAKA_ACCELERATOR_NAMESPACE +} // namespace ALPAKA_ACCELERATOR_NAMESPACE_CLUE diff --git a/CLUEstering/alpaka/CLUE/CLUEAlpakaKernels.h b/CLUEstering/alpaka/CLUE/CLUEAlpakaKernels.h index 417b1a13..5f721909 100644 --- a/CLUEstering/alpaka/CLUE/CLUEAlpakaKernels.h +++ b/CLUEstering/alpaka/CLUE/CLUEAlpakaKernels.h @@ -13,7 +13,7 @@ using clue::VecArray; -namespace ALPAKA_ACCELERATOR_NAMESPACE { +namespace ALPAKA_ACCELERATOR_NAMESPACE_CLUE { constexpr int32_t max_followers{100}; constexpr int32_t reserve{1000000}; @@ -349,4 +349,4 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { }); } }; -} // namespace ALPAKA_ACCELERATOR_NAMESPACE +} // namespace ALPAKA_ACCELERATOR_NAMESPACE_CLUE diff --git a/CLUEstering/alpaka/CLUE/Run.h b/CLUEstering/alpaka/CLUE/Run.h index cf41039c..d64ed45a 100644 --- a/CLUEstering/alpaka/CLUE/Run.h +++ b/CLUEstering/alpaka/CLUE/Run.h @@ -5,7 +5,7 @@ #include "CLUEAlgoAlpaka.h" -namespace ALPAKA_ACCELERATOR_NAMESPACE { +namespace ALPAKA_ACCELERATOR_NAMESPACE_CLUE { template std::vector> run(float dc, @@ -26,4 +26,4 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { return algo.make_clusters(h_points, d_points, kernel, queue_, block_size); } -}; // namespace ALPAKA_ACCELERATOR_NAMESPACE +}; // namespace ALPAKA_ACCELERATOR_NAMESPACE_CLUE diff --git a/CLUEstering/alpaka/DataFormats/alpaka/AlpakaVecArray.h b/CLUEstering/alpaka/DataFormats/alpaka/AlpakaVecArray.h index 64eba890..eab3adc8 100644 --- a/CLUEstering/alpaka/DataFormats/alpaka/AlpakaVecArray.h +++ b/CLUEstering/alpaka/DataFormats/alpaka/AlpakaVecArray.h @@ -5,6 +5,8 @@ // Author: Felice Pantaleo, CERN // +#include + namespace clue { template diff --git a/CLUEstering/alpaka/DataFormats/alpaka/PointsAlpaka.h b/CLUEstering/alpaka/DataFormats/alpaka/PointsAlpaka.h index 1299775d..d5197191 100644 --- a/CLUEstering/alpaka/DataFormats/alpaka/PointsAlpaka.h +++ b/CLUEstering/alpaka/DataFormats/alpaka/PointsAlpaka.h @@ -11,7 +11,7 @@ using clue::VecArray; -namespace ALPAKA_ACCELERATOR_NAMESPACE { +namespace ALPAKA_ACCELERATOR_NAMESPACE_CLUE { template class PointsAlpaka { @@ -71,4 +71,4 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { private: clue::device_buffer view_dev; }; -} // namespace ALPAKA_ACCELERATOR_NAMESPACE +} // namespace ALPAKA_ACCELERATOR_NAMESPACE_CLUE diff --git a/CLUEstering/alpaka/DataFormats/alpaka/TilesAlpaka.h b/CLUEstering/alpaka/DataFormats/alpaka/TilesAlpaka.h index 9311918d..7fca8d5c 100644 --- a/CLUEstering/alpaka/DataFormats/alpaka/TilesAlpaka.h +++ b/CLUEstering/alpaka/DataFormats/alpaka/TilesAlpaka.h @@ -17,7 +17,7 @@ using clue::VecArray; constexpr uint32_t max_tile_depth{1 << 10}; constexpr uint32_t max_n_tiles{1 << 15}; -namespace ALPAKA_ACCELERATOR_NAMESPACE { +namespace ALPAKA_ACCELERATOR_NAMESPACE_CLUE { template class CoordinateExtremes { @@ -136,4 +136,4 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { float tile_size[Ndim]; VecArray, max_n_tiles> m_tiles; }; -} // namespace ALPAKA_ACCELERATOR_NAMESPACE +} // namespace ALPAKA_ACCELERATOR_NAMESPACE_CLUE diff --git a/benchmark/dataset_size/main.cc b/benchmark/dataset_size/main.cc index 14f05953..632d46b3 100644 --- a/benchmark/dataset_size/main.cc +++ b/benchmark/dataset_size/main.cc @@ -83,7 +83,7 @@ void to_csv(const TimeMeasures& measures, const std::string& filename) { file.close(); } -namespace ALPAKA_ACCELERATOR_NAMESPACE { +namespace ALPAKA_ACCELERATOR_NAMESPACE_CLUE { void run(const std::string& input_file) { const auto dev_acc = alpaka::getDevByIdx(alpaka::Platform{}, 0u); Queue queue_(dev_acc); @@ -99,9 +99,9 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { auto result = algo.make_clusters(h_points, d_points, FlatKernel{.5f}, queue_, block_size); } -}; // namespace ALPAKA_ACCELERATOR_NAMESPACE +}; // namespace ALPAKA_ACCELERATOR_NAMESPACE_CLUE -namespace cluetest = ALPAKA_ACCELERATOR_NAMESPACE; +namespace cluetest = ALPAKA_ACCELERATOR_NAMESPACE_CLUE; int main(int argc, char* argv[]) { auto min = std::stoi(argv[1]); diff --git a/benchmark/profiling/main.cc b/benchmark/profiling/main.cc index 982782dc..07313be3 100644 --- a/benchmark/profiling/main.cc +++ b/benchmark/profiling/main.cc @@ -11,7 +11,7 @@ #include "read_csv.hpp" -namespace ALPAKA_ACCELERATOR_NAMESPACE { +namespace ALPAKA_ACCELERATOR_NAMESPACE_CLUE { void run(const std::string& input_file) { const auto dev_acc = alpaka::getDevByIdx(alpaka::Platform{}, 0u); Queue queue_(dev_acc); @@ -24,11 +24,13 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { CLUEAlgoAlpaka<2> algo(dc, rhoc, outlier, pPBin, queue_); const std::size_t block_size{256}; - auto result = algo.make_clusters(h_points, d_points, FlatKernel{.5f}, queue_, block_size); + auto result = + algo.make_clusters(h_points, d_points, FlatKernel{.5f}, queue_, block_size); } -}; // namespace ALPAKA_ACCELERATOR_NAMESPACE +}; // namespace ALPAKA_ACCELERATOR_NAMESPACE_CLUE int main(int argc, char* argv[]) { auto input_file{std::string(argv[1])}; - ALPAKA_ACCELERATOR_NAMESPACE::run(input_file); + using ALPAKA_ACCELERATOR_NAMESPACE_CLUE; + run(input_file); } diff --git a/setup.py b/setup.py index 8be0db32..993aab01 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ from setuptools import setup import subprocess -__version__ = "2.3.0" +__version__ = "2.3.1" this_directory = Path(__file__).parent long_description = (this_directory/'README.md').read_text()