From 2ee53835a219ef29baceeb1d8334a436dde27dc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Oberhuber?= <oberhuber.tomas@gmail.com> Date: Mon, 9 Dec 2019 21:10:05 +0100 Subject: [PATCH] Added segments based SlicedEllpack sparse matrix unit test. --- src/TNL/Containers/Segments/SlicedEllpack.hpp | 8 +- src/UnitTests/Matrices/CMakeLists.txt | 7 ++ .../SparseMatrixTest_SlicedEllpack.cpp | 2 +- .../SparseMatrixTest_SlicedEllpack.cu | 2 +- .../Matrices/SparseMatrixTest_SlicedEllpack.h | 73 +++++++++++-------- 5 files changed, 56 insertions(+), 36 deletions(-) diff --git a/src/TNL/Containers/Segments/SlicedEllpack.hpp b/src/TNL/Containers/Segments/SlicedEllpack.hpp index e23ee5f15b..c8e74ec591 100644 --- a/src/TNL/Containers/Segments/SlicedEllpack.hpp +++ b/src/TNL/Containers/Segments/SlicedEllpack.hpp @@ -326,8 +326,8 @@ save( File& file ) const file.save( &size ); file.save( &alignedSize ); file.save( &segmentsCount ); - this->sliceOffsets.save( file ); - this->sliceSegmentSizes.save( file ); + file << this->sliceOffsets; + file << this->sliceSegmentSizes; } template< typename Device, @@ -341,8 +341,8 @@ load( File& file ) file.load( &size ); file.load( &alignedSize ); file.load( &segmentsCount ); - this->sliceOffsets.load( file ); - this->sliceSegmentSizes.load( file ); + file >> this->sliceOffsets; + file >> this->sliceSegmentSizes; } } // namespace Segments diff --git a/src/UnitTests/Matrices/CMakeLists.txt b/src/UnitTests/Matrices/CMakeLists.txt index ef1f043710..9b168bd563 100644 --- a/src/UnitTests/Matrices/CMakeLists.txt +++ b/src/UnitTests/Matrices/CMakeLists.txt @@ -34,6 +34,9 @@ IF( BUILD_CUDA ) CUDA_ADD_EXECUTABLE( SparseMatrixTest_Ellpack_segments SparseMatrixTest_Ellpack_segments.cu OPTIONS ${CXX_TESTS_FLAGS} ) TARGET_LINK_LIBRARIES( SparseMatrixTest_Ellpack_segments ${GTEST_BOTH_LIBRARIES} ) + CUDA_ADD_EXECUTABLE( SparseMatrixTest_SlicedEllpack_segments SparseMatrixTest_SlicedEllpack_segments.cu OPTIONS ${CXX_TESTS_FLAGS} ) + TARGET_LINK_LIBRARIES( SparseMatrixTest_SlicedEllpack_segments ${GTEST_BOTH_LIBRARIES} ) + ELSE( BUILD_CUDA ) ADD_EXECUTABLE( SparseMatrixCopyTest SparseMatrixCopyTest.cpp ) TARGET_COMPILE_OPTIONS( SparseMatrixCopyTest PRIVATE ${CXX_TESTS_FLAGS} ) @@ -81,6 +84,9 @@ ELSE( BUILD_CUDA ) TARGET_COMPILE_OPTIONS( SparseMatrixTest_Ellpack_segments PRIVATE ${CXX_TESTS_FLAGS} ) TARGET_LINK_LIBRARIES( SparseMatrixTest_Ellpack_segments ${GTEST_BOTH_LIBRARIES} ) + ADD_EXECUTABLE( SparseMatrixTest_SlicedEllpack_segments SparseMatrixTest_SlicedEllpack_segments.cpp ) + TARGET_COMPILE_OPTIONS( SparseMatrixTest_SlicedEllpack_segments PRIVATE ${CXX_TESTS_FLAGS} ) + TARGET_LINK_LIBRARIES( SparseMatrixTest_SlicedEllpack_segments ${GTEST_BOTH_LIBRARIES} ) ENDIF( BUILD_CUDA ) @@ -101,6 +107,7 @@ ADD_TEST( SparseMatrixTest_SlicedEllpack ${EXECUTABLE_OUTPUT_PATH}/SparseMatrixT # Segments tests ADD_TEST( SparseMatrixTest_CSR_segments ${EXECUTABLE_OUTPUT_PATH}/SparseMatrixTest_CSR_segments${CMAKE_EXECUTABLE_SUFFIX} ) ADD_TEST( SparseMatrixTest_Ellpack_segments ${EXECUTABLE_OUTPUT_PATH}/SparseMatrixTest_Ellpack_segments${CMAKE_EXECUTABLE_SUFFIX} ) +ADD_TEST( SparseMatrixTest_SlicedEllpack_segments ${EXECUTABLE_OUTPUT_PATH}/SparseMatrixTest_SlicedEllpack_segments${CMAKE_EXECUTABLE_SUFFIX} ) if( ${BUILD_MPI} ) if( BUILD_CUDA ) diff --git a/src/UnitTests/Matrices/SparseMatrixTest_SlicedEllpack.cpp b/src/UnitTests/Matrices/SparseMatrixTest_SlicedEllpack.cpp index 40e2e94b81..a88301100d 100644 --- a/src/UnitTests/Matrices/SparseMatrixTest_SlicedEllpack.cpp +++ b/src/UnitTests/Matrices/SparseMatrixTest_SlicedEllpack.cpp @@ -1 +1 @@ -#include "SparseMatrixTest_SlicedEllpack.h" +#include "SparseMatrixTest_SlicedEllpack_segments.h" diff --git a/src/UnitTests/Matrices/SparseMatrixTest_SlicedEllpack.cu b/src/UnitTests/Matrices/SparseMatrixTest_SlicedEllpack.cu index 40e2e94b81..a88301100d 100644 --- a/src/UnitTests/Matrices/SparseMatrixTest_SlicedEllpack.cu +++ b/src/UnitTests/Matrices/SparseMatrixTest_SlicedEllpack.cu @@ -1 +1 @@ -#include "SparseMatrixTest_SlicedEllpack.h" +#include "SparseMatrixTest_SlicedEllpack_segments.h" diff --git a/src/UnitTests/Matrices/SparseMatrixTest_SlicedEllpack.h b/src/UnitTests/Matrices/SparseMatrixTest_SlicedEllpack.h index 0798f59dc4..00184754c6 100644 --- a/src/UnitTests/Matrices/SparseMatrixTest_SlicedEllpack.h +++ b/src/UnitTests/Matrices/SparseMatrixTest_SlicedEllpack.h @@ -1,14 +1,16 @@ /*************************************************************************** - SparseMatrixTest_SlicedEllpack.h - description + SparseMatrixTest_SlicedEllpack_segments.h - description ------------------- - begin : Nov 2, 2018 - copyright : (C) 2018 by Tomas Oberhuber et al. + begin : Dec 9, 2019 + copyright : (C) 2019 by Tomas Oberhuber et al. email : tomas.oberhuber@fjfi.cvut.cz ***************************************************************************/ /* See Copyright Notice in tnl/Copyright */ -#include <TNL/Matrices/SlicedEllpack.h> +#include <TNL/Containers/Segments/SlicedEllpack.h> +#include <TNL/Matrices/SparseMatrix.h> + #include "SparseMatrixTest.hpp" #include <iostream> @@ -24,38 +26,49 @@ protected: using SlicedEllpackMatrixType = Matrix; }; +//// +// Row-major format is used for the host system +template< typename Device, typename Index > +using RowMajorSlicedEllpack = TNL::Containers::Segments::SlicedEllpack< Device, Index, true, 32 >; + + +//// +// Column-major format is used for GPUs +template< typename Device, typename Index > +using ColumnMajorSlicedEllpack = TNL::Containers::Segments::SlicedEllpack< Device, Index, false, 32 >; + // types for which MatrixTest is instantiated using SlicedEllpackMatrixTypes = ::testing::Types < - TNL::Matrices::SlicedEllpack< int, TNL::Devices::Host, short >, - TNL::Matrices::SlicedEllpack< long, TNL::Devices::Host, short >, - TNL::Matrices::SlicedEllpack< float, TNL::Devices::Host, short >, - TNL::Matrices::SlicedEllpack< double, TNL::Devices::Host, short >, - TNL::Matrices::SlicedEllpack< int, TNL::Devices::Host, int >, - TNL::Matrices::SlicedEllpack< long, TNL::Devices::Host, int >, - TNL::Matrices::SlicedEllpack< float, TNL::Devices::Host, int >, - TNL::Matrices::SlicedEllpack< double, TNL::Devices::Host, int >, - TNL::Matrices::SlicedEllpack< int, TNL::Devices::Host, long >, - TNL::Matrices::SlicedEllpack< long, TNL::Devices::Host, long >, - TNL::Matrices::SlicedEllpack< float, TNL::Devices::Host, long >, - TNL::Matrices::SlicedEllpack< double, TNL::Devices::Host, long > + TNL::Matrices::SparseMatrix< int, RowMajorSlicedEllpack, TNL::Devices::Host, short >, + TNL::Matrices::SparseMatrix< long, RowMajorSlicedEllpack, TNL::Devices::Host, short >, + TNL::Matrices::SparseMatrix< float, RowMajorSlicedEllpack, TNL::Devices::Host, short >, + TNL::Matrices::SparseMatrix< double, RowMajorSlicedEllpack, TNL::Devices::Host, short >, + TNL::Matrices::SparseMatrix< int, RowMajorSlicedEllpack, TNL::Devices::Host, int >, + TNL::Matrices::SparseMatrix< long, RowMajorSlicedEllpack, TNL::Devices::Host, int >, + TNL::Matrices::SparseMatrix< float, RowMajorSlicedEllpack, TNL::Devices::Host, int >, + TNL::Matrices::SparseMatrix< double, RowMajorSlicedEllpack, TNL::Devices::Host, int >, + TNL::Matrices::SparseMatrix< int, RowMajorSlicedEllpack, TNL::Devices::Host, long >, + TNL::Matrices::SparseMatrix< long, RowMajorSlicedEllpack, TNL::Devices::Host, long >, + TNL::Matrices::SparseMatrix< float, RowMajorSlicedEllpack, TNL::Devices::Host, long >, + TNL::Matrices::SparseMatrix< double, RowMajorSlicedEllpack, TNL::Devices::Host, long > #ifdef HAVE_CUDA - ,TNL::Matrices::SlicedEllpack< int, TNL::Devices::Cuda, short >, - TNL::Matrices::SlicedEllpack< long, TNL::Devices::Cuda, short >, - TNL::Matrices::SlicedEllpack< float, TNL::Devices::Cuda, short >, - TNL::Matrices::SlicedEllpack< double, TNL::Devices::Cuda, short >, - TNL::Matrices::SlicedEllpack< int, TNL::Devices::Cuda, int >, - TNL::Matrices::SlicedEllpack< long, TNL::Devices::Cuda, int >, - TNL::Matrices::SlicedEllpack< float, TNL::Devices::Cuda, int >, - TNL::Matrices::SlicedEllpack< double, TNL::Devices::Cuda, int >, - TNL::Matrices::SlicedEllpack< int, TNL::Devices::Cuda, long >, - TNL::Matrices::SlicedEllpack< long, TNL::Devices::Cuda, long >, - TNL::Matrices::SlicedEllpack< float, TNL::Devices::Cuda, long >, - TNL::Matrices::SlicedEllpack< double, TNL::Devices::Cuda, long > + ,TNL::Matrices::SparseMatrix< int, ColumnMajorSlicedEllpack, TNL::Devices::Cuda, short >, + TNL::Matrices::SparseMatrix< long, ColumnMajorSlicedEllpack, TNL::Devices::Cuda, short >, + TNL::Matrices::SparseMatrix< float, ColumnMajorSlicedEllpack, TNL::Devices::Cuda, short >, + TNL::Matrices::SparseMatrix< double, ColumnMajorSlicedEllpack, TNL::Devices::Cuda, short >, + TNL::Matrices::SparseMatrix< int, ColumnMajorSlicedEllpack, TNL::Devices::Cuda, int >, + TNL::Matrices::SparseMatrix< long, ColumnMajorSlicedEllpack, TNL::Devices::Cuda, int >, + TNL::Matrices::SparseMatrix< float, ColumnMajorSlicedEllpack, TNL::Devices::Cuda, int >, + TNL::Matrices::SparseMatrix< double, ColumnMajorSlicedEllpack, TNL::Devices::Cuda, int >, + TNL::Matrices::SparseMatrix< int, ColumnMajorSlicedEllpack, TNL::Devices::Cuda, long >, + TNL::Matrices::SparseMatrix< long, ColumnMajorSlicedEllpack, TNL::Devices::Cuda, long >, + TNL::Matrices::SparseMatrix< float, ColumnMajorSlicedEllpack, TNL::Devices::Cuda, long >, + TNL::Matrices::SparseMatrix< double, ColumnMajorSlicedEllpack, TNL::Devices::Cuda, long > #endif >; -TYPED_TEST_SUITE( SlicedEllpackMatrixTest, SlicedEllpackMatrixTypes ); +TYPED_TEST_SUITE( SlicedEllpackMatrixTest, SlicedEllpackMatrixTypes); TYPED_TEST( SlicedEllpackMatrixTest, setDimensionsTest ) { @@ -124,7 +137,7 @@ TYPED_TEST( SlicedEllpackMatrixTest, saveAndLoadTest ) { using SlicedEllpackMatrixType = typename TestFixture::SlicedEllpackMatrixType; - test_SaveAndLoad< SlicedEllpackMatrixType >( "test_SparseMatrixTest_SlicedEllpack" ); + test_SaveAndLoad< SlicedEllpackMatrixType >( "test_SparseMatrixTest_SlicedEllpack_segments" ); } TYPED_TEST( SlicedEllpackMatrixTest, printTest ) -- GitLab