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

Testing the ChunkedEllpack fromat.

parent 7a00a89f
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@ bool tnlChunkedEllpackMatrix< Real, Device, Index >::setDimensions( const IndexT
    * Allocate slice info array. Note that there cannot be
    * more slices than rows.
    */
   if( ! this->slices.setSize( rows ) ||
   if( ! this->slices.setSize( this->rows ) ||
       ! this->chunksToRowsMapping.setSize( this-> rows ) ||
       ! this->slicesToRowsMapping.setSize( this->rows ) ||
       ! this->rowPointers.setSize( this->rows + 1 ) )
@@ -331,12 +331,13 @@ bool tnlChunkedEllpackMatrix< Real, Device, Index >::addElementFast( const Index
                                                                     const RealType& value,
                                                                     const RealType& thisElementMultiplicator )
{
   tnlAssert( row >= 0 && row < this->rows &&
   // TODO: return this back when CUDA kernels support cerr
   /*tnlAssert( row >= 0 && row < this->rows &&
              column >= 0 && column <= this->rows,
              cerr << " row = " << row
                   << " column = " << column
                   << " this->rows = " << this->rows
                   << " this->columns = " << this-> columns );
                   << " this->columns = " << this-> columns );*/

   const IndexType& sliceIndex = slicesToRowsMapping[ row ];
   tnlAssert( sliceIndex < this->rows, );
@@ -344,10 +345,11 @@ bool tnlChunkedEllpackMatrix< Real, Device, Index >::addElementFast( const Index
   IndexType elementPtr = rowPointers[ row ];
   const IndexType rowEnd = rowPointers[ row + 1 ];

   tnlAssert( elementPtr >= 0,
   // TODO: return this back when CUDA kernels support cerr
   /*tnlAssert( elementPtr >= 0,
            cerr << "elementPtr = " << elementPtr );
   tnlAssert( rowEnd <= this->columnIndexes.getSize(),
            cerr << "rowEnd = " << rowEnd << " this->columnIndexes.getSize() = " << this->columnIndexes.getSize() );
            cerr << "rowEnd = " << rowEnd << " this->columnIndexes.getSize() = " << this->columnIndexes.getSize() );*/

   while( elementPtr < rowEnd && this->columnIndexes[ elementPtr ] < column ) elementPtr++;
   if( elementPtr == rowEnd )
@@ -476,8 +478,9 @@ Real tnlChunkedEllpackMatrix< Real, Device, Index >::getElementFast( const Index
   const IndexType& chunkSize = slices.getElement( sliceIndex ).chunkSize;
   IndexType elementPtr = rowPointers[ row ];
   const IndexType rowEnd = rowPointers[ row + 1 ];
   tnlAssert( rowEnd <= this->columnIndexes.getSize(),
            cerr << "rowEnd = " << rowEnd << " this->columnIndexes.getSize() = " << this->columnIndexes.getSize() );
   // TODO: return this back when CUDA kernels support cerr
   /*tnlAssert( rowEnd <= this->columnIndexes.getSize(),
            cerr << "rowEnd = " << rowEnd << " this->columnIndexes.getSize() = " << this->columnIndexes.getSize() );*/
   while( elementPtr < rowEnd && this->columnIndexes[ elementPtr ] < column )
      elementPtr++;
   if( elementPtr < rowEnd && this->columnIndexes[ elementPtr ] == column )
+13 −12
Original line number Diff line number Diff line
@@ -21,23 +21,24 @@
#include <cstdlib>

#include "tnlSparseMatrixTester.h"
#include "tnlChunkedEllpackMatrixTestSetup.h"
#include "../tnlUnitTestStarter.h"

int main( int argc, char* argv[] )
{
#ifdef HAVE_CPPUNIT
   if( ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< float, tnlHost, int, 4, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< double, tnlHost, int, 4, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< float, tnlHost, long int, 4, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< double, tnlHost, long int, 4, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< float, tnlHost, int, 16, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< double, tnlHost, int, 16, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< float, tnlHost, long int, 16, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< double, tnlHost, long int, 16, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< float, tnlHost, int, 2, 16 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< double, tnlHost, int, 2, 16 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< float, tnlHost, long int, 2, 16 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< double, tnlHost, long int, 2, 16 > > >()
   if( ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< float, tnlHost, int >, tnlChunkedEllpackMatrixTestSetup< 4, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< double, tnlHost, int >, tnlChunkedEllpackMatrixTestSetup< 4, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< float, tnlHost, long int >, tnlChunkedEllpackMatrixTestSetup< 4, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< double, tnlHost, long int >, tnlChunkedEllpackMatrixTestSetup< 4, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< float, tnlHost, int >, tnlChunkedEllpackMatrixTestSetup< 16, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< double, tnlHost, int >, tnlChunkedEllpackMatrixTestSetup< 16, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< float, tnlHost, long int >, tnlChunkedEllpackMatrixTestSetup< 16, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< double, tnlHost, long int >, tnlChunkedEllpackMatrixTestSetup< 16, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< float, tnlHost, int >, tnlChunkedEllpackMatrixTestSetup< 2, 16 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< double, tnlHost, int >, tnlChunkedEllpackMatrixTestSetup< 2, 16 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< float, tnlHost, long int >, tnlChunkedEllpackMatrixTestSetup< 2, 16 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< double, tnlHost, long int >, tnlChunkedEllpackMatrixTestSetup< 2, 16 > > >()
       )
     return EXIT_FAILURE;
   return EXIT_SUCCESS;
+13 −12
Original line number Diff line number Diff line
@@ -21,23 +21,24 @@
#include <cstdlib>

#include "tnlSparseMatrixTester.h"
#include "tnlChunkedEllpackMatrixTestSetup.h"
#include "../tnlUnitTestStarter.h"

int main( int argc, char* argv[] )
{
#ifdef HAVE_CPPUNIT
   if( ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< float, tnlCuda, int, 4, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< double, tnlCuda, int, 4, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< float, tnlCuda, long int, 4, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< double, tnlCuda, long int, 4, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< float, tnlCuda, int, 16, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< double, tnlCuda, int, 16, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< float, tnlCuda, long int, 16, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< double, tnlCuda, long int, 16, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< float, tnlCuda, int, 2, 16 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< double, tnlCuda, int, 2, 16 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< float, tnlCuda, long int, 2, 16 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< double, tnlCuda, long int, 2, 16 > > >() 
   if( ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< float, tnlCuda, int >, tnlChunkedEllpackMatrixTestSetup< 4, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< double, tnlCuda, int >, tnlChunkedEllpackMatrixTestSetup< 4, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< float, tnlCuda, long int >, tnlChunkedEllpackMatrixTestSetup< 4, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< double, tnlCuda, long int >, tnlChunkedEllpackMatrixTestSetup< 4, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< float, tnlCuda, int >, tnlChunkedEllpackMatrixTestSetup< 16, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< double, tnlCuda, int >, tnlChunkedEllpackMatrixTestSetup< 16, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< float, tnlCuda, long int >, tnlChunkedEllpackMatrixTestSetup< 16, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< double, tnlCuda, long int >, tnlChunkedEllpackMatrixTestSetup< 16, 2 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< float, tnlCuda, int >, tnlChunkedEllpackMatrixTestSetup< 2, 16 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< double, tnlCuda, int >, tnlChunkedEllpackMatrixTestSetup< 2, 16 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< float, tnlCuda, long int >, tnlChunkedEllpackMatrixTestSetup< 2, 16 > > >() ||
       ! tnlUnitTestStarter :: run< tnlSparseMatrixTester< tnlChunkedEllpackMatrix< double, tnlCuda, long int >, tnlChunkedEllpackMatrixTestSetup< 2, 16 > > >() 
       )
     return EXIT_FAILURE;
   return EXIT_SUCCESS;
+50 −0
Original line number Diff line number Diff line
/***************************************************************************
                          tnlChunkedEllpackMatrixTestSetup.h  -  description
                             -------------------
    begin                : May 9, 2014
    copyright            : (C) 2014 by Tomas Oberhuber
    email                : tomas.oberhuber@fjfi.cvut.cz
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#ifndef TNLCHUNKEDELLPACKMATRIXTESTSETUP_H_
#define TNLCHUNKEDELLPACKMATRIXTESTSETUP_H_

template< int SliceSize, int ChunkSize >
class tnlChunkedEllpackMatrixTestSetup
{
   public:

   enum { sliceSize = SliceSize };

   enum { chunkSize = ChunkSize };
};

template< typename Real,
          typename Device,
          typename Index,
          typename TestSetup >
class tnlSparseMatrixTesterMatrixSetter< tnlChunkedEllpackMatrix< Real, Device, Index >, TestSetup >
{
   public:

   typedef tnlChunkedEllpackMatrix< Real, Device, Index > Matrix;
   
   static bool setup( Matrix& matrix )
   {
      matrix.setNumberOfChunksInSlice( TestSetup::sliceSize );
      matrix.setDesiredChunkSize( TestSetup::chunkSize );
      return true;
   }
};


#endif /* TNLCHUNKEDELLPACKMATRIXTESTSETUP_H_ */
+30 −6
Original line number Diff line number Diff line
@@ -69,21 +69,23 @@ __global__ void tnlSparseMatrixTester__setRowFast_LowerTriangularMatrixTestCudaK

#endif

template< typename Matrix >
class tnlSparseMatrixTesterMatrixSetter;
class tnlSparseMatrixTestDefaultSetup
{};

template<>
template< typename Matrix,
          typename TestSetup >
class tnlSparseMatrixTesterMatrixSetter
{
   public:

   bool setup( Matrix& matrix )
   static bool setup( Matrix& matrix )
   {
      return true;
   }
};

template< typename Matrix >
template< typename Matrix,
          typename MatrixSetup = tnlSparseMatrixTestDefaultSetup >
class tnlSparseMatrixTester : public CppUnit :: TestCase
{
   public:
@@ -93,7 +95,8 @@ class tnlSparseMatrixTester : public CppUnit :: TestCase
   typedef typename Matrix::IndexType IndexType;
   typedef tnlVector< RealType, DeviceType, IndexType > VectorType;
   typedef tnlVector< IndexType, DeviceType, IndexType > IndexVector;
   typedef tnlSparseMatrixTester< MatrixType > TesterType;
   typedef tnlSparseMatrixTester< MatrixType, MatrixSetup > TesterType;
   typedef tnlSparseMatrixTesterMatrixSetter< MatrixType, MatrixSetup > MatrixSetter;
   typedef typename CppUnit::TestCaller< TesterType > TestCallerType;

   tnlSparseMatrixTester(){};
@@ -136,6 +139,7 @@ class tnlSparseMatrixTester : public CppUnit :: TestCase
   void setDimensionsTest()
   {
      MatrixType m;
      MatrixSetter::setup( m );
      m.setDimensions( 10, 10 );
      CPPUNIT_ASSERT( m.getRows() == 10 );
      CPPUNIT_ASSERT( m.getColumns() == 10 );
@@ -144,6 +148,8 @@ class tnlSparseMatrixTester : public CppUnit :: TestCase
   void setLikeTest()
   {
      MatrixType m1, m2;
      MatrixSetter::setup( m1 );
      MatrixSetter::setup( m2 );
      m1.setDimensions( 10, 10 );
      IndexVector rowLengths;
      rowLengths.setSize( m1.getRows() );
@@ -159,12 +165,15 @@ class tnlSparseMatrixTester : public CppUnit :: TestCase
   void setElementTest()
   {
      MatrixType m;
      MatrixSetter::setup( m );
      m.setDimensions( 10, 10 );
      IndexVector rowLengths;
      rowLengths.setSize( m.getRows() );
      rowLengths.setValue( 7 );
      m.setRowLengths( rowLengths );

      cout << m << endl;

      for( int i = 0; i < 7; i++ )
         CPPUNIT_ASSERT( m.setElement( 0, i, i ) );
      CPPUNIT_ASSERT( m.setElement( 0, 8, 8 ) == false );
@@ -177,6 +186,7 @@ class tnlSparseMatrixTester : public CppUnit :: TestCase
   void setElementFastTest()
   {
      MatrixType m;
      MatrixSetter::setup( m );
      m.setDimensions( 10, 10 );
      IndexVector rowLengths;
      rowLengths.setSize( m.getRows() );
@@ -215,6 +225,7 @@ class tnlSparseMatrixTester : public CppUnit :: TestCase
   void setElement_DiagonalMatrixTest()
   {
      MatrixType m;
      MatrixSetter::setup( m );
      m.setDimensions( 10, 10 );
      IndexVector rowLengths;
      rowLengths.setSize( m.getRows() );
@@ -239,6 +250,7 @@ class tnlSparseMatrixTester : public CppUnit :: TestCase
   void setElementFast_DiagonalMatrixTest()
   {
      MatrixType m;
      MatrixSetter::setup( m );
      m.setDimensions( 10, 10 );
      IndexVector rowLengths;
      rowLengths.setSize( m.getRows() );
@@ -284,6 +296,7 @@ class tnlSparseMatrixTester : public CppUnit :: TestCase
   void setElement_DenseMatrixTest()
   {
      MatrixType m;
      MatrixSetter::setup( m );
      m.setDimensions( 10, 10 );
      IndexVector rowLengths;
      rowLengths.setSize( m.getRows() );
@@ -318,6 +331,7 @@ class tnlSparseMatrixTester : public CppUnit :: TestCase
   void setElementFast_DenseMatrixTest()
   {
      MatrixType m;
      MatrixSetter::setup( m );
      m.setDimensions( 10, 10 );
      IndexVector rowLengths;
      rowLengths.setSize( m.getRows() );
@@ -395,6 +409,7 @@ class tnlSparseMatrixTester : public CppUnit :: TestCase
   void setElement_LowerTriangularMatrixTest()
   {
      MatrixType m;
      MatrixSetter::setup( m );
      m.setDimensions( 10, 10 );
      IndexVector rowLengths;
      rowLengths.setSize( m.getRows() );
@@ -431,6 +446,7 @@ class tnlSparseMatrixTester : public CppUnit :: TestCase
   void setElementFast_LowerTriangularMatrixTest()
   {
      MatrixType m;
      MatrixSetter::setup( m );
      m.setDimensions( 10, 10 );
      IndexVector rowLengths;
      rowLengths.setSize( m.getRows() );
@@ -510,6 +526,7 @@ class tnlSparseMatrixTester : public CppUnit :: TestCase
   void addElementTest()
   {
      MatrixType m;
      MatrixSetter::setup( m );
      m.setDimensions( 10, 10 );
      IndexVector rowLengths;
      rowLengths.setSize( m.getRows() );
@@ -539,6 +556,7 @@ class tnlSparseMatrixTester : public CppUnit :: TestCase
   void setRow_DiagonalMatrixTest()
   {
      MatrixType m;
      MatrixSetter::setup( m );
      m.setDimensions( 10, 10 );
      IndexVector rowLengths;
      rowLengths.setSize( m.getRows() );
@@ -569,6 +587,7 @@ class tnlSparseMatrixTester : public CppUnit :: TestCase
   void setRowFast_DiagonalMatrixTest()
   {
      MatrixType m;
      MatrixSetter::setup( m );
      m.setDimensions( 10, 10 );
      IndexVector rowLengths;
      rowLengths.setSize( m.getRows() );
@@ -622,6 +641,7 @@ class tnlSparseMatrixTester : public CppUnit :: TestCase
   void setRow_DenseMatrixTest()
   {
      MatrixType m;
      MatrixSetter::setup( m );
      m.setDimensions( 10, 10 );
      IndexVector rowLengths;
      rowLengths.setSize( m.getRows() );
@@ -668,6 +688,7 @@ class tnlSparseMatrixTester : public CppUnit :: TestCase
   void setRowFast_DenseMatrixTest()
   {
      MatrixType m;
      MatrixSetter::setup( m );
      m.setDimensions( 10, 10 );
      IndexVector rowLengths;
      rowLengths.setSize( m.getRows() );
@@ -760,6 +781,7 @@ class tnlSparseMatrixTester : public CppUnit :: TestCase
   void setRow_LowerTriangularMatrixTest()
   {
      MatrixType m;
      MatrixSetter::setup( m );
      m.setDimensions( 10, 10 );
      IndexVector rowLengths;
      rowLengths.setSize( m.getRows() );
@@ -809,6 +831,7 @@ class tnlSparseMatrixTester : public CppUnit :: TestCase
   void setRowFast_LowerTriangularMatrixTest()
   {
      MatrixType m;
      MatrixSetter::setup( m );
      m.setDimensions( 10, 10 );
      IndexVector rowLengths;
      rowLengths.setSize( m.getRows() );
@@ -907,6 +930,7 @@ class tnlSparseMatrixTester : public CppUnit :: TestCase
      v.setSize( size );
      w.setSize( size );
      MatrixType m;
      MatrixSetter::setup( m );
      m.setDimensions( size, size );
      IndexVector rowLengths;
      rowLengths.setSize( m.getRows() );