From 72335f320e1976876d57c381abf731db19cb548e Mon Sep 17 00:00:00 2001 From: Tom Lin Date: Fri, 29 Jul 2022 00:17:36 +0100 Subject: [PATCH] Revert to normal vector without allocators Prohibit vector type in indices --- src/dpl_shim.h | 10 ---------- src/std-data/STDDataStream.cpp | 12 ++++++------ src/std-data/STDDataStream.h | 2 +- src/std-indices/STDIndicesStream.cpp | 22 ++++++++++++++++------ src/std-indices/STDIndicesStream.h | 2 +- src/std-ranges/STDRangesStream.cpp | 12 ++++++------ src/std-ranges/STDRangesStream.hpp | 2 +- 7 files changed, 31 insertions(+), 31 deletions(-) diff --git a/src/dpl_shim.h b/src/dpl_shim.h index e47ae99..226693b 100644 --- a/src/dpl_shim.h +++ b/src/dpl_shim.h @@ -23,11 +23,6 @@ const static auto exe_policy = oneapi::dpl::execution::device_policy<>{ oneapi::dpl::execution::make_device_policy(cl::sycl::default_selector{}) }; -template using Allocator = sycl::usm_allocator; - -template -constexpr Allocator alloc_vec() { return {exe_policy.queue()}; }; - template T *alloc_raw(size_t size) { return sycl::malloc_shared(size, exe_policy.queue()); } @@ -61,11 +56,6 @@ static constexpr auto exe_policy = std::execution::par_unseq; #ifdef USE_STD_PTR_ALLOC_DEALLOC -template using Allocator = std::allocator; - -template -constexpr Allocator alloc_vec() { return {}; }; - template T *alloc_raw(size_t size) { return (T *) aligned_alloc(ALIGNMENT, sizeof(T) * size); } diff --git a/src/std-data/STDDataStream.cpp b/src/std-data/STDDataStream.cpp index 7c71163..3d7ef18 100644 --- a/src/std-data/STDDataStream.cpp +++ b/src/std-data/STDDataStream.cpp @@ -18,7 +18,7 @@ template STDDataStream::STDDataStream(const int ARRAY_SIZE, int device) noexcept : array_size{ARRAY_SIZE}, #ifdef USE_VECTOR - a(ARRAY_SIZE, alloc_vec()), b(ARRAY_SIZE, alloc_vec()), c(ARRAY_SIZE, alloc_vec()) + a(ARRAY_SIZE), b(ARRAY_SIZE), c(ARRAY_SIZE) #else a(alloc_raw(ARRAY_SIZE)), b(alloc_raw(ARRAY_SIZE)), c(alloc_raw(ARRAY_SIZE)) #endif @@ -69,28 +69,28 @@ void STDDataStream::copy() { // c[i] = a[i] std::copy(exe_policy, BEGIN(a), END(a), BEGIN(c)); - } +} template void STDDataStream::mul() { // b[i] = scalar * c[i]; std::transform(exe_policy, BEGIN(c), END(c), BEGIN(b), [scalar = startScalar](T ci){ return scalar*ci; }); - } +} template void STDDataStream::add() { // c[i] = a[i] + b[i]; std::transform(exe_policy, BEGIN(a), END(a), BEGIN(b), BEGIN(c), std::plus()); - } +} template void STDDataStream::triad() { // a[i] = b[i] + scalar * c[i]; std::transform(exe_policy, BEGIN(b), END(b), BEGIN(c), BEGIN(a), [scalar = startScalar](T bi, T ci){ return bi+scalar*ci; }); - } +} template void STDDataStream::nstream() @@ -101,7 +101,7 @@ void STDDataStream::nstream() // 2: a[i] += scalar * c[i]; std::transform(exe_policy, BEGIN(a), END(a), BEGIN(b), BEGIN(a), [](T ai, T bi){ return ai + bi; }); std::transform(exe_policy, BEGIN(a), END(a), BEGIN(c), BEGIN(a), [scalar = startScalar](T ai, T ci){ return ai + scalar*ci; }); - } +} template diff --git a/src/std-data/STDDataStream.h b/src/std-data/STDDataStream.h index e50c95d..911a621 100644 --- a/src/std-data/STDDataStream.h +++ b/src/std-data/STDDataStream.h @@ -23,7 +23,7 @@ class STDDataStream : public Stream // Device side pointers #ifdef USE_VECTOR - std::vector> a, b, c; + std::vector a, b, c; #else T *a, *b, *c; #endif diff --git a/src/std-indices/STDIndicesStream.cpp b/src/std-indices/STDIndicesStream.cpp index f9397fa..6ea3362 100644 --- a/src/std-indices/STDIndicesStream.cpp +++ b/src/std-indices/STDIndicesStream.cpp @@ -22,11 +22,21 @@ #define END(x) ((x) + array_size) #endif +#ifdef USE_VECTOR +#if (defined(__NVCOMPILER) || defined(__NVCOMPILER_LLVM__)) +#error "std::vector *is* supported in NVHPC if we capture `this`, however, oneDPL (via SYCL2020) only works correctly with explicit *value* captures." +#endif + +#if defined(USE_ONEDPL) +#error "std::vector is unspported: oneDPL (via SYCL2020) only works correctly with explicit *value* captures" +#endif +#endif + template STDIndicesStream::STDIndicesStream(const int ARRAY_SIZE, int device) noexcept : array_size{ARRAY_SIZE}, range(0, array_size), #ifdef USE_VECTOR - a(ARRAY_SIZE, alloc_vec()), b(ARRAY_SIZE, alloc_vec()), c(ARRAY_SIZE, alloc_vec()) + a(ARRAY_SIZE), b(ARRAY_SIZE), c(ARRAY_SIZE) #else a(alloc_raw(ARRAY_SIZE)), b(alloc_raw(ARRAY_SIZE)), c(alloc_raw(ARRAY_SIZE)) #endif @@ -77,7 +87,7 @@ void STDIndicesStream::copy() { // c[i] = a[i] std::copy(exe_policy, BEGIN(a), END(a), BEGIN(c)); - } +} template void STDIndicesStream::mul() @@ -86,7 +96,7 @@ void STDIndicesStream::mul() std::transform(exe_policy, range.begin(), range.end(), BEGIN(b), [c = this->c, scalar = startScalar](int i) { return scalar * c[i]; }); - } +} template void STDIndicesStream::add() @@ -95,7 +105,7 @@ void STDIndicesStream::add() std::transform(exe_policy, range.begin(), range.end(), BEGIN(c), [a = this->a, b = this->b](int i) { return a[i] + b[i]; }); - } +} template void STDIndicesStream::triad() @@ -104,7 +114,7 @@ void STDIndicesStream::triad() std::transform(exe_policy, range.begin(), range.end(), BEGIN(a), [b = this->b, c = this->c, scalar = startScalar](int i) { return b[i] + scalar * c[i]; }); - } +} template void STDIndicesStream::nstream() @@ -116,7 +126,7 @@ void STDIndicesStream::nstream() std::transform(exe_policy, range.begin(), range.end(), BEGIN(a), [a = this->a, b = this->b, c = this->c, scalar = startScalar](int i) { return a[i] + b[i] + scalar * c[i]; }); - } +} template diff --git a/src/std-indices/STDIndicesStream.h b/src/std-indices/STDIndicesStream.h index a955374..0916ef2 100644 --- a/src/std-indices/STDIndicesStream.h +++ b/src/std-indices/STDIndicesStream.h @@ -78,7 +78,7 @@ class STDIndicesStream : public Stream // Device side pointers #ifdef USE_VECTOR - std::vector> a, b, c; + std::vector a, b, c; #else T *a, *b, *c; #endif diff --git a/src/std-ranges/STDRangesStream.cpp b/src/std-ranges/STDRangesStream.cpp index 9063ff2..a8a1349 100644 --- a/src/std-ranges/STDRangesStream.cpp +++ b/src/std-ranges/STDRangesStream.cpp @@ -26,7 +26,7 @@ template STDRangesStream::STDRangesStream(const int ARRAY_SIZE, int device) noexcept : array_size{ARRAY_SIZE}, #ifdef USE_VECTOR - a(ARRAY_SIZE, alloc_vec()), b(ARRAY_SIZE, alloc_vec()), c(ARRAY_SIZE, alloc_vec()) + a(ARRAY_SIZE), b(ARRAY_SIZE), c(ARRAY_SIZE) #else a(alloc_raw(ARRAY_SIZE)), b(alloc_raw(ARRAY_SIZE)), c(alloc_raw(ARRAY_SIZE)) #endif @@ -89,7 +89,7 @@ void STDRangesStream::copy() c[i] = a[i]; } ); - } +} template void STDRangesStream::mul() @@ -103,7 +103,7 @@ void STDRangesStream::mul() b[i] = scalar * c[i]; } ); - } +} template void STDRangesStream::add() @@ -115,7 +115,7 @@ void STDRangesStream::add() c[i] = a[i] + b[i]; } ); - } +} template void STDRangesStream::triad() @@ -129,7 +129,7 @@ void STDRangesStream::triad() a[i] = b[i] + scalar * c[i]; } ); - } +} template void STDRangesStream::nstream() @@ -143,7 +143,7 @@ void STDRangesStream::nstream() a[i] += b[i] + scalar * c[i]; } ); - } +} template T STDRangesStream::dot() diff --git a/src/std-ranges/STDRangesStream.hpp b/src/std-ranges/STDRangesStream.hpp index 21902c6..9d36d46 100644 --- a/src/std-ranges/STDRangesStream.hpp +++ b/src/std-ranges/STDRangesStream.hpp @@ -22,7 +22,7 @@ class STDRangesStream : public Stream // Device side pointers #ifdef USE_VECTOR - std::vector> a, b, c; + std::vector a, b, c; #else T *a, *b, *c; #endif