Commit f5108926 authored by Tomáš Oberhuber's avatar Tomáš Oberhuber
Browse files

Writting documentation on multidiagonal matrix.

parent 205a15db
Loading
Loading
Loading
Loading
+65 −54
Original line number Diff line number Diff line
@@ -14,10 +14,15 @@ IF( BUILD_CUDA )
                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_Constructor_init_list_2.out
                       OUTPUT MultidiagonalMatrixExample_Constructor_init_list_2.out )

#   CUDA_ADD_EXECUTABLE( MultidiagonalMatrixExample_setElements_cuda MultidiagonalMatrixExample_setElements.cu )
#   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_setElements_cuda > 
#                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_setElements.out
#                       OUTPUT MultidiagonalMatrixExample_setElements.out )
   CUDA_ADD_EXECUTABLE( MultidiagonalMatrixExample_getSerializationType_cuda MultidiagonalMatrixExample_getSerializationType.cu )
   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_getSerializationType_cuda > 
                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_getSerializationType.out
                       OUTPUT MultidiagonalMatrixExample_getSerializationType.out )

   CUDA_ADD_EXECUTABLE( MultidiagonalMatrixExample_setElements_cuda MultidiagonalMatrixExample_setElements.cu )
   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_setElements_cuda > 
                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_setElements.out
                       OUTPUT MultidiagonalMatrixExample_setElements.out )

#   CUDA_ADD_EXECUTABLE( MultidiagonalMatrixExample_getCompressedRowLengths_cuda MultidiagonalMatrixExample_getCompressedRowLengths.cu )
#   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_getCompressedRowLengths_cuda >
@@ -29,30 +34,30 @@ IF( BUILD_CUDA )
#                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_getElementsCount.out
#                       OUTPUT MultidiagonalMatrixExample_getElementsCount.out )

#   CUDA_ADD_EXECUTABLE( MultidiagonalMatrixExample_getConstRow_cuda MultidiagonalMatrixExample_getConstRow.cu )
#   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_getConstRow_cuda >
#                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_getConstRow.out
#                       OUTPUT MultidiagonalMatrixExample_getConstRow.out )
   CUDA_ADD_EXECUTABLE( MultidiagonalMatrixExample_getConstRow_cuda MultidiagonalMatrixExample_getConstRow.cu )
   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_getConstRow_cuda >
                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_getConstRow.out
                       OUTPUT MultidiagonalMatrixExample_getConstRow.out )

#   CUDA_ADD_EXECUTABLE( MultidiagonalMatrixExample_getRow_cuda MultidiagonalMatrixExample_getRow.cu )
#   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_getRow_cuda >
#                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_getRow.out
#                       OUTPUT MultidiagonalMatrixExample_getRow.out )
   CUDA_ADD_EXECUTABLE( MultidiagonalMatrixExample_getRow_cuda MultidiagonalMatrixExample_getRow.cu )
   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_getRow_cuda >
                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_getRow.out
                       OUTPUT MultidiagonalMatrixExample_getRow.out )

#   CUDA_ADD_EXECUTABLE( MultidiagonalMatrixExample_setElement_cuda MultidiagonalMatrixExample_setElement.cu )
#   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_setElement_cuda >
#                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_setElement.out
#                       OUTPUT MultidiagonalMatrixExample_setElement.out )
   CUDA_ADD_EXECUTABLE( MultidiagonalMatrixExample_setElement_cuda MultidiagonalMatrixExample_setElement.cu )
   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_setElement_cuda >
                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_setElement.out
                       OUTPUT MultidiagonalMatrixExample_setElement.out )

#   CUDA_ADD_EXECUTABLE( MultidiagonalMatrixExample_addElement_cuda MultidiagonalMatrixExample_addElement.cu )
#   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_addElement_cuda >
#                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_addElement.out
#                       OUTPUT MultidiagonalMatrixExample_addElement.out )
   CUDA_ADD_EXECUTABLE( MultidiagonalMatrixExample_addElement_cuda MultidiagonalMatrixExample_addElement.cu )
   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_addElement_cuda >
                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_addElement.out
                       OUTPUT MultidiagonalMatrixExample_addElement.out )

#   CUDA_ADD_EXECUTABLE( MultidiagonalMatrixExample_getElement_cuda MultidiagonalMatrixExample_getElement.cu )
#   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_getElement_cuda >
#                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_getElement.out
#                       OUTPUT MultidiagonalMatrixExample_getElement.out )
   CUDA_ADD_EXECUTABLE( MultidiagonalMatrixExample_getElement_cuda MultidiagonalMatrixExample_getElement.cu )
   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_getElement_cuda >
                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_getElement.out
                       OUTPUT MultidiagonalMatrixExample_getElement.out )

#   CUDA_ADD_EXECUTABLE( MultidiagonalMatrixExample_rowsReduction_cuda MultidiagonalMatrixExample_rowsReduction.cu )
#   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_rowsReduction_cuda >
@@ -150,10 +155,15 @@ ELSE()
                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_Constructor_init_list_2.out
                       OUTPUT MultidiagonalMatrixExample_Constructor_init_list_2.out )

#   ADD_EXECUTABLE( MultidiagonalMatrixExample_setElements MultidiagonalMatrixExample_setElements.cpp )
#   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_setElements > 
#                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_setElements.out
#                       OUTPUT MultidiagonalMatrixExample_setElements.out )
   ADD_EXECUTABLE( MultidiagonalMatrixExample_getSerializationType MultidiagonalMatrixExample_getSerializationType.cpp )
   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_getSerializationType > 
                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_getSerializationType.out
                       OUTPUT MultidiagonalMatrixExample_getSerializationType.out )

   ADD_EXECUTABLE( MultidiagonalMatrixExample_setElements MultidiagonalMatrixExample_setElements.cpp )
   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_setElements > 
                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_setElements.out
                       OUTPUT MultidiagonalMatrixExample_setElements.out )

#   ADD_EXECUTABLE( MultidiagonalMatrixExample_getCompressedRowLengths MultidiagonalMatrixExample_getCompressedRowLengths.cpp )
#   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_getCompressedRowLengths >
@@ -165,30 +175,30 @@ ELSE()
#                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_getElementsCount.out
#                       OUTPUT MultidiagonalMatrixExample_getElementsCount.out )

#   ADD_EXECUTABLE( MultidiagonalMatrixExample_getConstRow MultidiagonalMatrixExample_getConstRow.cpp )
#   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_getConstRow >
#                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_getConstRow.out
#                       OUTPUT MultidiagonalMatrixExample_getConstRow.out )
   ADD_EXECUTABLE( MultidiagonalMatrixExample_getConstRow MultidiagonalMatrixExample_getConstRow.cpp )
   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_getConstRow >
                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_getConstRow.out
                       OUTPUT MultidiagonalMatrixExample_getConstRow.out )

#   ADD_EXECUTABLE( MultidiagonalMatrixExample_getRow MultidiagonalMatrixExample_getRow.cpp )
#   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_getRow >
#                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_getRow.out
#                       OUTPUT MultidiagonalMatrixExample_getRow.out )
   ADD_EXECUTABLE( MultidiagonalMatrixExample_getRow MultidiagonalMatrixExample_getRow.cpp )
   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_getRow >
                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_getRow.out
                       OUTPUT MultidiagonalMatrixExample_getRow.out )

#   ADD_EXECUTABLE( MultidiagonalMatrixExample_setElement MultidiagonalMatrixExample_setElement.cpp )
#   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_setElement >
#                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_setElement.out
#                       OUTPUT MultidiagonalMatrixExample_setElement.out )
   ADD_EXECUTABLE( MultidiagonalMatrixExample_setElement MultidiagonalMatrixExample_setElement.cpp )
   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_setElement >
                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_setElement.out
                       OUTPUT MultidiagonalMatrixExample_setElement.out )

#   ADD_EXECUTABLE( MultidiagonalMatrixExample_addElement MultidiagonalMatrixExample_addElement.cpp )
#   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_addElement >
#                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_addElement.out
#                       OUTPUT MultidiagonalMatrixExample_addElement.out )
   ADD_EXECUTABLE( MultidiagonalMatrixExample_addElement MultidiagonalMatrixExample_addElement.cpp )
   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_addElement >
                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_addElement.out
                       OUTPUT MultidiagonalMatrixExample_addElement.out )

#   ADD_EXECUTABLE( MultidiagonalMatrixExample_getElement MultidiagonalMatrixExample_getElement.cpp )
#   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_getElement >
#                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_getElement.out
#                       OUTPUT MultidiagonalMatrixExample_getElement.out )
   ADD_EXECUTABLE( MultidiagonalMatrixExample_getElement MultidiagonalMatrixExample_getElement.cpp )
   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_getElement >
                        ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/MultidiagonalMatrixExample_getElement.out
                       OUTPUT MultidiagonalMatrixExample_getElement.out )

#   ADD_EXECUTABLE( MultidiagonalMatrixExample_rowsReduction MultidiagonalMatrixExample_rowsReduction.cpp )
#   ADD_CUSTOM_COMMAND( COMMAND MultidiagonalMatrixExample_rowsReduction >
@@ -276,14 +286,15 @@ ADD_CUSTOM_TARGET( RunMatricesExamples ALL DEPENDS
   MultidiagonalMatrixExample_Constructor.out
   MultidiagonalMatrixExample_Constructor_init_list_1.out
   MultidiagonalMatrixExample_Constructor_init_list_2.out
#   MultidiagonalMatrixExample_setElements.out
   MultidiagonalMatrixExample_getSerializationType.out
   MultidiagonalMatrixExample_setElements.out
#   MultidiagonalMatrixExample_getCompressedRowLengths.out
#   MultidiagonalMatrixExample_getElementsCount.out
#   MultidiagonalMatrixExample_getConstRow.out
#   MultidiagonalMatrixExample_getRow.out
#   MultidiagonalMatrixExample_setElement.out
#   MultidiagonalMatrixExample_addElement.out
#   MultidiagonalMatrixExample_getElement.out
   MultidiagonalMatrixExample_getConstRow.out
   MultidiagonalMatrixExample_getRow.out
   MultidiagonalMatrixExample_setElement.out
   MultidiagonalMatrixExample_addElement.out
   MultidiagonalMatrixExample_getElement.out
#   MultidiagonalMatrixExample_rowsReduction.out
#   MultidiagonalMatrixExample_allRowsReduction.out
#   MultidiagonalMatrixExample_forRows.out
+39 −0
Original line number Diff line number Diff line
#include <iostream>
#include <TNL/Matrices/MultidiagonalMatrix.h>
#include <TNL/Devices/Host.h>

template< typename Device >
void addElements()
{
   const int matrixSize( 5 );
   TNL::Matrices::MultidiagonalMatrix< double, Device > matrix(
      matrixSize,     // number of rows
      matrixSize,     // number of columns
      { -1, 0, 1 } ); // diagonals offsets
   for( int i = 0; i < matrixSize; i++ )
      matrix.setElement( i, i, i );

   std::cout << "Initial matrix is: " << std::endl << matrix << std::endl;

   for( int i = 0; i < matrixSize; i++ )
   {
      if( i > 0 )
         matrix.addElement( i, i - 1, 1.0, 5.0 );
      matrix.addElement( i, i, 1.0, 5.0 );
      if( i < matrixSize - 1 )
         matrix.addElement( i, i + 1, 1.0, 5.0 );
   }

   std::cout << "Matrix after addition is: " << std::endl << matrix << std::endl;
}

int main( int argc, char* argv[] )
{
   std::cout << "Add elements on host:" << std::endl;
   addElements< TNL::Devices::Host >();

#ifdef HAVE_CUDA
   std::cout << "Add elements on CUDA device:" << std::endl;
   addElements< TNL::Devices::Cuda >();
#endif
}
+1 −0
Original line number Diff line number Diff line
MultidiagonalMatrixExample_addElement.cpp
 No newline at end of file
+58 −0
Original line number Diff line number Diff line
#include <iostream>
#include <functional>
#include <TNL/Algorithms/ParallelFor.h>
#include <TNL/Matrices/MultidiagonalMatrix.h>
#include <TNL/Devices/Host.h>
#include <TNL/Devices/Cuda.h>
#include <TNL/Pointers/SharedPointer.h>

template< typename Device >
void getRowExample()
{
   const int matrixSize = 5;
   auto diagonalsOffsets = { -2, -1, 0 };
   using MatrixType = TNL::Matrices::MultidiagonalMatrix< double, Device >;
   TNL::Pointers::SharedPointer< MatrixType > matrix (
      matrixSize,  // number of matrix rows
      matrixSize,  // number of matrix columns
      diagonalsOffsets );
   matrix->setElements(
      {  { 0.0, 0.0, 1.0 },
         { 0.0, 2.0, 1.0 },
         { 3.0, 2.0, 1.0 },
         { 3.0, 2.0, 1.0 },
         { 3.0, 2.0, 1.0 } } );

   /***
    * Fetch lambda function returns diagonal element in each row.
    */
   auto fetch = [=] __cuda_callable__ ( int rowIdx ) mutable -> double {
      auto row = matrix->getRow( rowIdx );
      return row.getValue( 2 ); // get value from subdiagonal with index 2, i.e. the main diagonal
   };

   /***
    * For the case when Device is CUDA device we need to synchronize smart
    * pointers. To avoid this you may use MultidiagonalMatrixView. See
    * MultidiagonalMatrixView::getConstRow example for details.
    */
   TNL::Pointers::synchronizeSmartPointersOnDevice< Device >();

   /***
    * Compute the matrix trace.
    */
   int trace = TNL::Algorithms::Reduction< Device >::reduce( matrix->getRows(), std::plus<>{}, fetch, 0 );
   std::cout << "Matrix reads as: " << std::endl << *matrix << std::endl;
   std::cout << "Matrix trace is: " << trace << "." << std::endl;
}

int main( int argc, char* argv[] )
{
   std::cout << "Getting matrix rows on host: " << std::endl;
   getRowExample< TNL::Devices::Host >();

#ifdef HAVE_CUDA
   std::cout << "Getting matrix rows on CUDA device: " << std::endl;
   getRowExample< TNL::Devices::Cuda >();
#endif
}
+1 −0
Original line number Diff line number Diff line
MultidiagonalMatrixExample_getConstRow.cpp
 No newline at end of file
Loading