From 44bd5dbb5cdb6ebfd727c35f1cc289c8b03755f8 Mon Sep 17 00:00:00 2001 From: Simeon Ehrig Date: Tue, 8 Feb 2022 13:04:11 +0000 Subject: [PATCH] Rename MemAccessStrategy.cpp to BaseStrategy.cpp - clean up of the test - prepare for addition iterator tests - add cmake helper function for tests - add memory allocation function for tests --- CMakeLists.txt | 1 + cmake/testUtils.cmake | 60 +++++++++++ test/include/vikunja/test/AlpakaSetup.hpp | 58 +++++++++- test/unit/access/CMakeLists.txt | 18 +--- test/unit/access/src/BaseStrategy.cpp | 61 +++++++++++ test/unit/access/src/MemAccessStrategy.cpp | 120 --------------------- 6 files changed, 181 insertions(+), 137 deletions(-) create mode 100644 cmake/testUtils.cmake create mode 100644 test/unit/access/src/BaseStrategy.cpp delete mode 100644 test/unit/access/src/MemAccessStrategy.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 5aedee0..5cbdf9e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -134,6 +134,7 @@ if(${CMAKE_PROJECT_NAME} STREQUAL ${PROJECT_NAME}) ######################################### if(BUILD_TESTING) + include("${PROJECT_SOURCE_DIR}/cmake/testUtils.cmake") include(CTest) enable_testing() add_subdirectory("test/") diff --git a/cmake/testUtils.cmake b/cmake/testUtils.cmake new file mode 100644 index 0000000..de46d46 --- /dev/null +++ b/cmake/testUtils.cmake @@ -0,0 +1,60 @@ +# Copyright 2022 Simeon Ehrig +# +# This file is part of vikunja. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +# Create an executable file for the test, link it to the required test targets and add it to ctest. +# +# vikunja_add_default_test(TARGET +# SOURCE +# [INCLUDE ] +# ) +# +# * TARGET: name of the executable, will be prefixed with `test_` +# * SOURCE: path of the source file(s) +# * INCLUDE: optional path(s) to include folder(s) +macro(vikunja_add_default_test) + set(_MACRO_PREFIX "vikTest") + set(_SINGLE_ARG TARGET) + set(_MULTI_ARG SOURCE INCLUDE) + + cmake_parse_arguments( + "${_MACRO_PREFIX}" + "" # option + "${_SINGLE_ARG}" + "${_MULTI_ARG}" + "${ARGN}" + ) + + if(NOT DEFINED ${_MACRO_PREFIX}_TARGET) + message(FATAL_ERROR "vikunja_add_default_test: no target name defined") + endif() + + if(NOT DEFINED ${_MACRO_PREFIX}_SOURCE) + message(FATAL_ERROR "vikunja_add_default_test: no source files defined") + endif() + + set(_TARGET_NAME "test_${${_MACRO_PREFIX}_TARGET}") + + alpaka_add_executable( + ${_TARGET_NAME} + ${${_MACRO_PREFIX}_SOURCE} + ) + + if(DEFINED ${_MACRO_PREFIX}_INCLUDE) + message(VERBOSE "vikunja_add_default_test: add ${${_MACRO_PREFIX}_INCLUDE} include paths to ${_TARGET_NAME}") + target_include_directories(${_TARGET_NAME} PRIVATE ${${_MACRO_PREFIX}_INCLUDE}) + endif() + + target_link_libraries(${_TARGET_NAME} + PRIVATE + vikunja::internalvikunja + vikunja::testSetup + ) + + add_test(NAME ${_TARGET_NAME} COMMAND ${_TARGET_NAME} ${_VIKUNJA_TEST_OPTIONS}) + +endmacro() diff --git a/test/include/vikunja/test/AlpakaSetup.hpp b/test/include/vikunja/test/AlpakaSetup.hpp index 1387761..d97f645 100644 --- a/test/include/vikunja/test/AlpakaSetup.hpp +++ b/test/include/vikunja/test/AlpakaSetup.hpp @@ -1,4 +1,4 @@ -/* Copyright 2021 Hauke Mewes, Simeon Ehrig +/* Copyright 2022 Hauke Mewes, Simeon Ehrig * * This file is part of vikunja. * @@ -50,6 +50,62 @@ namespace vikunja , queueAcc{devAcc} { } + + /** + * @brief Allocate 1D memory on host. + * + * @tparam TData Type of the memory. + * @param size Size of the memory. + * @return auto Alpaka memory buffer on the host. + */ + template + auto allocHost(Idx size) + { + using Vec = alpaka::Vec, Idx>; + return alpaka::allocBuf(devHost, Vec::all(size)); + } + + /** + * @brief Allocate ND memory on host. + * + * @tparam TData Type of the memory. + * @tparam TExtentDim alpaka::Vec + * @param size Vector with the sizes for each memory dimension. + * @return auto Alpaka memory buffer on the host. + */ + template + auto allocHost(alpaka::Vec size) + { + return alpaka::allocBuf(devHost, size); + } + + /** + * @brief Allocate 1D memory on device. + * + * @tparam TData Type of the memory. + * @param size Size of the memory. + * @return auto Alpaka memory buffer on the device. + */ + template + auto allocDev(Idx size) + { + using Vec = alpaka::Vec, Idx>; + return alpaka::allocBuf(devAcc, Vec::all(size)); + } + + /** + * @brief Allocate ND memory on device. + * + * @tparam TData Type of the memory. + * @tparam TExtentDim alpaka::Vec + * @param size Vector with the sizes for each memory dimension. + * @return auto Alpaka memory buffer on the device. + */ + template + auto allocDev(alpaka::Vec size) + { + return alpaka::allocBuf(devAcc, size); + } }; } // namespace test } // namespace vikunja diff --git a/test/unit/access/CMakeLists.txt b/test/unit/access/CMakeLists.txt index 129eb93..7c421b8 100644 --- a/test/unit/access/CMakeLists.txt +++ b/test/unit/access/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright 2021 Hauke Mewes, Simeon Ehrig +# Copyright 2022 Hauke Mewes, Simeon Ehrig # # This file is part of vikunja. # @@ -8,18 +8,4 @@ cmake_minimum_required(VERSION 3.18) -set(_TARGET_NAME "test_memAccessStrategy") - - -alpaka_add_executable( - ${_TARGET_NAME} - src/MemAccessStrategy.cpp - ) - -target_link_libraries(${_TARGET_NAME} - PRIVATE - vikunja::internalvikunja - vikunja::testSetup - ) - -add_test(NAME ${_TARGET_NAME} COMMAND ${_TARGET_NAME} ${_VIKUNJA_TEST_OPTIONS}) +vikunja_add_default_test(TARGET "memAccessBaseStrategy" SOURCE "src/BaseStrategy.cpp") diff --git a/test/unit/access/src/BaseStrategy.cpp b/test/unit/access/src/BaseStrategy.cpp new file mode 100644 index 0000000..96da0e7 --- /dev/null +++ b/test/unit/access/src/BaseStrategy.cpp @@ -0,0 +1,61 @@ +/* Copyright 2022 Hauke Mewes, Simeon Ehrig + * + * This file is part of vikunja. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include +#include + +#include + +#include + +#include + +using namespace vikunja::MemAccess; + +TEST_CASE("BaseStrategy", "[MemAccessStrategy]") +{ + using Idx = std::size_t; + constexpr auto size = static_cast(64); + + + BaseStrategy zeroFirst(0, size); + BaseStrategy zeroSecond(0, size); + BaseStrategy one(1, size); + + SECTION("test comparison operators") + { + REQUIRE(zeroFirst == zeroSecond); + REQUIRE(zeroSecond == zeroFirst); + REQUIRE(zeroFirst != one); + REQUIRE(one != zeroFirst); + REQUIRE(zeroFirst < one); + REQUIRE(one > zeroFirst); + REQUIRE_FALSE(zeroFirst < zeroSecond); + REQUIRE_FALSE(zeroFirst > zeroSecond); + REQUIRE(zeroFirst <= zeroSecond); + REQUIRE(zeroSecond <= zeroFirst); + REQUIRE(zeroFirst <= one); + } + SECTION("test access operators") + { + REQUIRE(*zeroFirst == 0); + REQUIRE(*one == 1); + *zeroFirst = 2; + REQUIRE(*zeroFirst == 2); + REQUIRE(*zeroSecond == 0); + REQUIRE_FALSE(*zeroFirst == *zeroSecond); + } + SECTION("test copy operator") + { + BaseStrategy copyOfZeroFirst(zeroFirst); + REQUIRE(copyOfZeroFirst == zeroFirst); + *copyOfZeroFirst = 3; + REQUIRE(copyOfZeroFirst != zeroFirst); + } +} diff --git a/test/unit/access/src/MemAccessStrategy.cpp b/test/unit/access/src/MemAccessStrategy.cpp deleted file mode 100644 index 5634dfa..0000000 --- a/test/unit/access/src/MemAccessStrategy.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/* Copyright 2022 Hauke Mewes, Simeon Ehrig - * - * This file is part of vikunja. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -#include -#include - -#include - -#include - -#include - -using Type = uint64_t; -using IType = Type*; -using Idx = std::size_t; -using namespace vikunja::MemAccess; - -std::vector generateIndexVector(Idx size) -{ - std::vector data(size); - for(Idx i = 0; i < size; ++i) - { - data[i] = i; - } - return data; -} - -TEST_CASE("BaseStrategy", "[MemAccessStrategy]") -{ - constexpr Idx size = 64; - std::vector testData{generateIndexVector(size)}; - - BaseStrategy zeroFirst(0, size); - BaseStrategy zeroSecond(0, size); - BaseStrategy one(1, size); - BaseStrategy copyOfZeroFirst(zeroFirst); - - - REQUIRE(zeroFirst == zeroSecond); - REQUIRE(zeroSecond == zeroFirst); - REQUIRE(zeroFirst != one); - REQUIRE(one != zeroFirst); - REQUIRE(zeroFirst < one); - REQUIRE(one > zeroFirst); - REQUIRE_FALSE(zeroFirst < zeroSecond); - REQUIRE_FALSE(zeroFirst > zeroSecond); - REQUIRE(zeroFirst <= zeroSecond); - REQUIRE(zeroSecond <= zeroFirst); - REQUIRE(zeroFirst <= one); - REQUIRE(*zeroFirst == 0); - REQUIRE(*one == 1); - REQUIRE(copyOfZeroFirst == zeroFirst); - - *zeroFirst = 2; - REQUIRE(*zeroFirst == 2); - REQUIRE(*zeroSecond == 0); -}; - -template -struct TestPolicyBasedBlockIteratorKernel -{ -}; - -template<> -struct TestPolicyBasedBlockIteratorKernel -{ - template - ALPAKA_FN_ACC void operator()(TAcc const& acc, Type* data, TIdx const& n) const - { - } -}; - -template -struct TestPolicyBasedBlockIterator -{ - template - void operator()() - { - using Idx = alpaka::Idx; - using Dim = alpaka::Dim; - - constexpr Idx n = 65; - constexpr Idx blocksPerGrid = 2; - constexpr Idx threadsPerBlock = 1; - constexpr Idx elementsPerThread = n / 2 + 1; - - using DevAcc = alpaka::Dev; - using PltfAcc = alpaka::Pltf; - using QueueAcc = alpaka::QueueCpuBlocking; - // alpaka::test::queue::DefaultQueue>; - using PltfHost = alpaka::PltfCpu; - using DevHost = alpaka::Dev; - using QueueHost = alpaka::QueueCpuBlocking; - using WorkDiv = alpaka::WorkDivMembers; - // Get the host device. - DevHost devHost(alpaka::getDevByIdx(0u)); - // Get a queue on the host device. - QueueHost queueHost(devHost); - // Select a device to execute on. - DevAcc devAcc(alpaka::getDevByIdx(0u)); - // Get a queue on the accelerator device. - QueueAcc queueAcc(devAcc); - WorkDiv workdiv{blocksPerGrid, threadsPerBlock, elementsPerThread}; - } -}; - -TEST_CASE("PolicyBasedBlockStrategy", "[MemAccessStrategy]") -{ - // constexpr Idx size = 64; - - SECTION("LinearMemAccessPolicy") - { - } -}