Loading src/TNL/Matrices/DenseMatrixView.hpp +4 −0 Original line number Diff line number Diff line Loading @@ -40,8 +40,12 @@ DenseMatrixView( const IndexType rows, const ValuesViewType& values ) : MatrixView< Real, Device, Index >( rows, columns, values ) { #ifdef __CUDA_ARCH__ TNL_ASSERT_EQ( values.getSize(), this->getAllocatedElementsCount(), "Number of matrix elements does not agree with matrix dimensions." ); #else if( values.getSize() != this->getAllocatedElementsCount() ) throw( std::logic_error( "Number of matrix elements does not agree with matrix dimensions." ) ); #endif SegmentsType a( rows, columns ); segments = a.getView(); Loading src/TNL/Matrices/SparseMatrixView.hpp +4 −4 Original line number Diff line number Diff line Loading @@ -121,7 +121,7 @@ getCompressedRowLengths( Vector& rowLengths ) const details::set_size_if_resizable( rowLengths, this->getRows() ); rowLengths = 0; auto rowLengths_view = rowLengths.getView(); auto fetch = [] __cuda_callable__ ( IndexType row, IndexType column, IndexType globalIdx, const RealType& value ) -> IndexType { auto fetch = [] __cuda_callable__ ( IndexType row, IndexType column, const RealType& value ) -> IndexType { return ( value != 0.0 ); }; auto keep = [=] __cuda_callable__ ( const IndexType rowIdx, const IndexType value ) mutable { Loading Loading @@ -448,14 +448,14 @@ rowsReduction( IndexType begin, IndexType end, Fetch& fetch, const Reduce& reduc const auto columns_view = this->columnIndexes.getConstView(); const auto values_view = this->values.getConstView(); const IndexType paddingIndex_ = this->getPaddingIndex(); auto fetch_ = [=] __cuda_callable__ ( IndexType rowIdx, IndexType localIdx, IndexType globalIdx, bool& compute ) mutable -> decltype( fetch( IndexType(), IndexType(), IndexType(), RealType() ) ) { auto fetch_ = [=] __cuda_callable__ ( IndexType rowIdx, IndexType localIdx, IndexType globalIdx, bool& compute ) mutable -> decltype( fetch( IndexType(), IndexType(), RealType() ) ) { IndexType columnIdx = columns_view[ globalIdx ]; if( columnIdx != paddingIndex_ ) { if( isBinary() ) return fetch( rowIdx, columnIdx, globalIdx, 1 ); return fetch( rowIdx, columnIdx, 1 ); else return fetch( rowIdx, columnIdx, globalIdx, values_view[ globalIdx ] ); return fetch( rowIdx, columnIdx, values_view[ globalIdx ] ); } return zero; }; Loading src/UnitTests/Matrices/BinarySparseMatrixTest.hpp +2 −2 Original line number Diff line number Diff line Loading @@ -948,7 +948,7 @@ void test_RowsReduction() // Compute number of non-zero elements in rows. typename Matrix::RowsCapacitiesType rowLengths( rows ); auto rowLengths_view = rowLengths.getView(); auto fetch = [] __cuda_callable__ ( IndexType row, IndexType column, IndexType globalIdx, const RealType& value ) -> IndexType { auto fetch = [] __cuda_callable__ ( IndexType row, IndexType column, const RealType& value ) -> IndexType { return ( value != 0.0 ); }; auto keep = [=] __cuda_callable__ ( const IndexType rowIdx, const IndexType value ) mutable { Loading @@ -963,7 +963,7 @@ void test_RowsReduction() // Compute max norm TNL::Containers::Vector< RealType, DeviceType, IndexType > rowSums( rows ); auto rowSums_view = rowSums.getView(); auto max_fetch = [] __cuda_callable__ ( IndexType row, IndexType column, IndexType globalIdx, const RealType& value ) -> IndexType { auto max_fetch = [] __cuda_callable__ ( IndexType row, IndexType column, const RealType& value ) -> IndexType { return abs( value ); }; auto max_keep = [=] __cuda_callable__ ( const IndexType rowIdx, const IndexType value ) mutable { Loading src/UnitTests/Matrices/SparseMatrixTest.hpp +2 −2 Original line number Diff line number Diff line Loading @@ -1374,7 +1374,7 @@ void test_RowsReduction() // Compute number of non-zero elements in rows. typename Matrix::RowsCapacitiesType rowLengths( rows ); auto rowLengths_view = rowLengths.getView(); auto fetch = [] __cuda_callable__ ( IndexType row, IndexType column, IndexType globalIdx, const RealType& value ) -> IndexType { auto fetch = [] __cuda_callable__ ( IndexType row, IndexType column, const RealType& value ) -> IndexType { return ( value != 0.0 ); }; auto keep = [=] __cuda_callable__ ( const IndexType rowIdx, const IndexType value ) mutable { Loading @@ -1389,7 +1389,7 @@ void test_RowsReduction() // Compute max norm TNL::Containers::Vector< RealType, DeviceType, IndexType > rowSums( rows ); auto rowSums_view = rowSums.getView(); auto max_fetch = [] __cuda_callable__ ( IndexType row, IndexType column, IndexType globalIdx, const RealType& value ) -> IndexType { auto max_fetch = [] __cuda_callable__ ( IndexType row, IndexType column, const RealType& value ) -> IndexType { return abs( value ); }; auto max_keep = [=] __cuda_callable__ ( const IndexType rowIdx, const IndexType value ) mutable { Loading src/UnitTests/Matrices/SymmetricSparseMatrixTest.hpp +1 −1 Original line number Diff line number Diff line Loading @@ -898,7 +898,7 @@ void test_RowsReduction() typename Matrix::RowsCapacitiesType rowLengths_true( { 1, 1, 4, 4, 4, 4, 1, 1 } ); auto rowLengths_view = rowLengths.getView(); rowLengths_view = 0; auto fetch = [=] __cuda_callable__ ( IndexType row, IndexType column, IndexType globalIdx, const RealType& value ) mutable -> IndexType { auto fetch = [=] __cuda_callable__ ( IndexType row, IndexType column, const RealType& value ) mutable -> IndexType { if( value != 0.0 && row != column) TNL::Algorithms::AtomicOperations< DeviceType >::add( rowLengths_view[ column ], ( IndexType ) 1 ); return ( value != 0.0 ); Loading Loading
src/TNL/Matrices/DenseMatrixView.hpp +4 −0 Original line number Diff line number Diff line Loading @@ -40,8 +40,12 @@ DenseMatrixView( const IndexType rows, const ValuesViewType& values ) : MatrixView< Real, Device, Index >( rows, columns, values ) { #ifdef __CUDA_ARCH__ TNL_ASSERT_EQ( values.getSize(), this->getAllocatedElementsCount(), "Number of matrix elements does not agree with matrix dimensions." ); #else if( values.getSize() != this->getAllocatedElementsCount() ) throw( std::logic_error( "Number of matrix elements does not agree with matrix dimensions." ) ); #endif SegmentsType a( rows, columns ); segments = a.getView(); Loading
src/TNL/Matrices/SparseMatrixView.hpp +4 −4 Original line number Diff line number Diff line Loading @@ -121,7 +121,7 @@ getCompressedRowLengths( Vector& rowLengths ) const details::set_size_if_resizable( rowLengths, this->getRows() ); rowLengths = 0; auto rowLengths_view = rowLengths.getView(); auto fetch = [] __cuda_callable__ ( IndexType row, IndexType column, IndexType globalIdx, const RealType& value ) -> IndexType { auto fetch = [] __cuda_callable__ ( IndexType row, IndexType column, const RealType& value ) -> IndexType { return ( value != 0.0 ); }; auto keep = [=] __cuda_callable__ ( const IndexType rowIdx, const IndexType value ) mutable { Loading Loading @@ -448,14 +448,14 @@ rowsReduction( IndexType begin, IndexType end, Fetch& fetch, const Reduce& reduc const auto columns_view = this->columnIndexes.getConstView(); const auto values_view = this->values.getConstView(); const IndexType paddingIndex_ = this->getPaddingIndex(); auto fetch_ = [=] __cuda_callable__ ( IndexType rowIdx, IndexType localIdx, IndexType globalIdx, bool& compute ) mutable -> decltype( fetch( IndexType(), IndexType(), IndexType(), RealType() ) ) { auto fetch_ = [=] __cuda_callable__ ( IndexType rowIdx, IndexType localIdx, IndexType globalIdx, bool& compute ) mutable -> decltype( fetch( IndexType(), IndexType(), RealType() ) ) { IndexType columnIdx = columns_view[ globalIdx ]; if( columnIdx != paddingIndex_ ) { if( isBinary() ) return fetch( rowIdx, columnIdx, globalIdx, 1 ); return fetch( rowIdx, columnIdx, 1 ); else return fetch( rowIdx, columnIdx, globalIdx, values_view[ globalIdx ] ); return fetch( rowIdx, columnIdx, values_view[ globalIdx ] ); } return zero; }; Loading
src/UnitTests/Matrices/BinarySparseMatrixTest.hpp +2 −2 Original line number Diff line number Diff line Loading @@ -948,7 +948,7 @@ void test_RowsReduction() // Compute number of non-zero elements in rows. typename Matrix::RowsCapacitiesType rowLengths( rows ); auto rowLengths_view = rowLengths.getView(); auto fetch = [] __cuda_callable__ ( IndexType row, IndexType column, IndexType globalIdx, const RealType& value ) -> IndexType { auto fetch = [] __cuda_callable__ ( IndexType row, IndexType column, const RealType& value ) -> IndexType { return ( value != 0.0 ); }; auto keep = [=] __cuda_callable__ ( const IndexType rowIdx, const IndexType value ) mutable { Loading @@ -963,7 +963,7 @@ void test_RowsReduction() // Compute max norm TNL::Containers::Vector< RealType, DeviceType, IndexType > rowSums( rows ); auto rowSums_view = rowSums.getView(); auto max_fetch = [] __cuda_callable__ ( IndexType row, IndexType column, IndexType globalIdx, const RealType& value ) -> IndexType { auto max_fetch = [] __cuda_callable__ ( IndexType row, IndexType column, const RealType& value ) -> IndexType { return abs( value ); }; auto max_keep = [=] __cuda_callable__ ( const IndexType rowIdx, const IndexType value ) mutable { Loading
src/UnitTests/Matrices/SparseMatrixTest.hpp +2 −2 Original line number Diff line number Diff line Loading @@ -1374,7 +1374,7 @@ void test_RowsReduction() // Compute number of non-zero elements in rows. typename Matrix::RowsCapacitiesType rowLengths( rows ); auto rowLengths_view = rowLengths.getView(); auto fetch = [] __cuda_callable__ ( IndexType row, IndexType column, IndexType globalIdx, const RealType& value ) -> IndexType { auto fetch = [] __cuda_callable__ ( IndexType row, IndexType column, const RealType& value ) -> IndexType { return ( value != 0.0 ); }; auto keep = [=] __cuda_callable__ ( const IndexType rowIdx, const IndexType value ) mutable { Loading @@ -1389,7 +1389,7 @@ void test_RowsReduction() // Compute max norm TNL::Containers::Vector< RealType, DeviceType, IndexType > rowSums( rows ); auto rowSums_view = rowSums.getView(); auto max_fetch = [] __cuda_callable__ ( IndexType row, IndexType column, IndexType globalIdx, const RealType& value ) -> IndexType { auto max_fetch = [] __cuda_callable__ ( IndexType row, IndexType column, const RealType& value ) -> IndexType { return abs( value ); }; auto max_keep = [=] __cuda_callable__ ( const IndexType rowIdx, const IndexType value ) mutable { Loading
src/UnitTests/Matrices/SymmetricSparseMatrixTest.hpp +1 −1 Original line number Diff line number Diff line Loading @@ -898,7 +898,7 @@ void test_RowsReduction() typename Matrix::RowsCapacitiesType rowLengths_true( { 1, 1, 4, 4, 4, 4, 1, 1 } ); auto rowLengths_view = rowLengths.getView(); rowLengths_view = 0; auto fetch = [=] __cuda_callable__ ( IndexType row, IndexType column, IndexType globalIdx, const RealType& value ) mutable -> IndexType { auto fetch = [=] __cuda_callable__ ( IndexType row, IndexType column, const RealType& value ) mutable -> IndexType { if( value != 0.0 && row != column) TNL::Algorithms::AtomicOperations< DeviceType >::add( rowLengths_view[ column ], ( IndexType ) 1 ); return ( value != 0.0 ); Loading