Loading src/Benchmarks/BLAS/dense-mv.h +1 −1 Original line number Diff line number Diff line Loading @@ -76,7 +76,7 @@ benchmarkDenseMVSynthetic( Benchmark<> & benchmark, auto spmvHost = [&]() { hostMatrix.vectorProduct( inHostVector, outHostVector ); }; benchmark.setOperation( datasetSize ); benchmark.setDatasetSize( datasetSize ); benchmark.time< Devices::Host >( reset, "CPU", spmvHost ); #ifdef HAVE_CUDA Loading src/Benchmarks/BLAS/spmv.h +1 −1 Original line number Diff line number Diff line Loading @@ -156,7 +156,7 @@ benchmarkSpMV( Benchmark<> & benchmark, auto spmvHost = [&]() { hostMatrix.vectorProduct( hostVector, hostVector2 ); }; benchmark.setOperation( datasetSize ); benchmark.setDatasetSize( datasetSize ); benchmark.time< Devices::Host >( reset, "CPU", spmvHost ); #ifdef HAVE_CUDA auto spmvCuda = [&]() { Loading src/Benchmarks/Benchmark.hpp +12 −34 Original line number Diff line number Diff line Loading @@ -100,9 +100,7 @@ void Benchmark< Logger >:: setMetadataColumns( const MetadataColumns & metadata ) { if( Logger::metadataColumns != metadata ) Logger::header_changed = true; Logger::metadataColumns = metadata; Logger::setMetadataColumns( metadata ); } template< typename Logger > Loading @@ -110,48 +108,29 @@ void Benchmark< Logger >:: setMetadataElement( const typename MetadataColumns::value_type & element ) { bool found = false; for( auto & it : Logger::metadataColumns ) if( it.first == element.first ) { if( it.second != element.second ) { it.second = element.second; Logger::header_changed = true; } found = true; break; } if( ! found ) { Logger::metadataColumns.push_back( element ); Logger::header_changed = true; } Logger::setMetadataElement( element ); } template< typename Logger > void Benchmark< Logger >:: setOperation( const String & operation, const double datasetSize, setDatasetSize( const double datasetSize, const double baseTime ) { monitor.setStage( operation.getString() ); if( Logger::metadataColumns.size() > 0 && String(Logger::metadataColumns[ 0 ].first) == "operation" ) { Logger::metadataColumns[ 0 ].second = operation; } else { Logger::metadataColumns.insert( Logger::metadataColumns.begin(), {"operation", operation} ); } setOperation( datasetSize, baseTime ); Logger::header_changed = true; this->datasetSize = datasetSize; this->baseTime = baseTime; } template< typename Logger > void Benchmark< Logger >:: setOperation( const double datasetSize, setOperation( const String & operation, const double datasetSize, const double baseTime ) { this->datasetSize = datasetSize; this->baseTime = baseTime; monitor.setStage( operation.getString() ); Logger::setMetadataElement( {"operation", operation}, 0 ); setDatasetSize( datasetSize, baseTime ); } template< typename Logger > Loading Loading @@ -191,8 +170,7 @@ time( ResetFunction reset, if( this->baseTime == 0.0 ) this->baseTime = result.time; Logger::writeTableHeader( performer, result.getTableHeader() ); Logger::writeTableRow( performer, result.getRowElements() ); Logger::logResult( performer, result.getTableHeader(), result.getRowElements(), result.getColumnWidthHints() ); return this->baseTime; } Loading src/Benchmarks/Benchmarks.h +7 −10 Original line number Diff line number Diff line Loading @@ -74,11 +74,6 @@ class Benchmark using typename Logger::MetadataColumns; using SolverMonitorType = Solvers::IterativeSolverMonitor< double, int >; using typename Logger::CommonLogs; using Logger::addCommonLogs; using Logger::addLogsMetadata; using Logger::writeHeader; Benchmark( int loops = 10, bool verbose = true, String outputMode = "", Loading Loading @@ -109,6 +104,11 @@ class Benchmark // changing MetadataColumns that were set using the previous method. void setMetadataElement( const typename MetadataColumns::value_type & element ); // Sets the dataset size and base time for the calculations of bandwidth // and speedup in the benchmarks result. void setDatasetSize( const double datasetSize = 0.0, // in GB const double baseTime = 0.0 ); // Sets current operation -- operations expand the table vertically // - baseTime should be reset to 0.0 for most operations, but sometimes // it is useful to override it Loading @@ -119,9 +119,6 @@ class Benchmark const double datasetSize = 0.0, // in GB const double baseTime = 0.0 ); void setOperation( const double datasetSize = 0.0, const double baseTime = 0.0 ); // Times a single ComputeFunction. Subsequent calls implicitly split // the current operation into sub-columns identified by "performer", // which are further split into "bandwidth", "time" and "speedup" columns. Loading src/Benchmarks/CustomLogging.h +51 −12 Original line number Diff line number Diff line Loading @@ -14,6 +14,7 @@ #pragma once #include "Logging.h" #include <TNL/Assert.h> namespace TNL { namespace Benchmarks { Loading @@ -36,15 +37,6 @@ public: log << ": title = " << title << std::endl; } virtual void addCommonLogs( const CommonLogs& logs ) override { for( auto log : logs ) { if( verbose ) std::cout << log.first << " = " << log.second << std::endl; } }; virtual void writeMetadata( const MetadataMap & metadata ) override { Loading @@ -60,9 +52,44 @@ public: std::cout << std::endl; } virtual void setMetadataColumns( const MetadataColumns& elements ) override { // check if a header element changed (i.e. a first item of the pairs) if( metadataColumns.size() != elements.size() ) header_changed = true; else for( std::size_t i = 0; i < metadataColumns.size(); i++ ) if( metadataColumns[ i ].first != elements[ i ].first ) { header_changed = true; break; } metadataColumns = elements; } virtual void setMetadataElement( const typename MetadataColumns::value_type & element, int insertPosition = -1 /* negative values insert from the end */ ) override { bool found = false; for( auto & it : metadataColumns ) if( it.first == element.first ) { if( it.second != element.second ) it.second = element.second; found = true; break; } if( ! found ) { if( insertPosition < 0 ) metadataColumns.insert( metadataColumns.end() + insertPosition + 1, element ); else metadataColumns.insert( metadataColumns.begin() + insertPosition, element ); header_changed = true; } } void writeTableHeader( const std::string & spanningElement, const HeaderElements & subElements ) override const HeaderElements & subElements ) { if( verbose && header_changed ) { for( auto & it : metadataColumns ) { Loading Loading @@ -93,9 +120,9 @@ public: } } virtual void void writeTableRow( const std::string & spanningElement, const RowElements & subElements ) override const RowElements & subElements ) { if( verbose ) { for( auto & it : metadataColumns ) { Loading @@ -122,6 +149,18 @@ public: } } virtual void logResult( const std::string& spanningElement, const HeaderElements& headerElements, const RowElements& rowElements, const WidthHints& columnWidthHints ) override { TNL_ASSERT_EQ( headerElements.size(), rowElements.size(), "elements must have equal sizes" ); TNL_ASSERT_EQ( headerElements.size(), columnWidthHints.size(), "elements must have equal sizes" ); writeTableHeader( spanningElement, headerElements ); writeTableRow( spanningElement, rowElements ); } virtual void writeErrorMessage( const std::string& message ) override { Loading Loading
src/Benchmarks/BLAS/dense-mv.h +1 −1 Original line number Diff line number Diff line Loading @@ -76,7 +76,7 @@ benchmarkDenseMVSynthetic( Benchmark<> & benchmark, auto spmvHost = [&]() { hostMatrix.vectorProduct( inHostVector, outHostVector ); }; benchmark.setOperation( datasetSize ); benchmark.setDatasetSize( datasetSize ); benchmark.time< Devices::Host >( reset, "CPU", spmvHost ); #ifdef HAVE_CUDA Loading
src/Benchmarks/BLAS/spmv.h +1 −1 Original line number Diff line number Diff line Loading @@ -156,7 +156,7 @@ benchmarkSpMV( Benchmark<> & benchmark, auto spmvHost = [&]() { hostMatrix.vectorProduct( hostVector, hostVector2 ); }; benchmark.setOperation( datasetSize ); benchmark.setDatasetSize( datasetSize ); benchmark.time< Devices::Host >( reset, "CPU", spmvHost ); #ifdef HAVE_CUDA auto spmvCuda = [&]() { Loading
src/Benchmarks/Benchmark.hpp +12 −34 Original line number Diff line number Diff line Loading @@ -100,9 +100,7 @@ void Benchmark< Logger >:: setMetadataColumns( const MetadataColumns & metadata ) { if( Logger::metadataColumns != metadata ) Logger::header_changed = true; Logger::metadataColumns = metadata; Logger::setMetadataColumns( metadata ); } template< typename Logger > Loading @@ -110,48 +108,29 @@ void Benchmark< Logger >:: setMetadataElement( const typename MetadataColumns::value_type & element ) { bool found = false; for( auto & it : Logger::metadataColumns ) if( it.first == element.first ) { if( it.second != element.second ) { it.second = element.second; Logger::header_changed = true; } found = true; break; } if( ! found ) { Logger::metadataColumns.push_back( element ); Logger::header_changed = true; } Logger::setMetadataElement( element ); } template< typename Logger > void Benchmark< Logger >:: setOperation( const String & operation, const double datasetSize, setDatasetSize( const double datasetSize, const double baseTime ) { monitor.setStage( operation.getString() ); if( Logger::metadataColumns.size() > 0 && String(Logger::metadataColumns[ 0 ].first) == "operation" ) { Logger::metadataColumns[ 0 ].second = operation; } else { Logger::metadataColumns.insert( Logger::metadataColumns.begin(), {"operation", operation} ); } setOperation( datasetSize, baseTime ); Logger::header_changed = true; this->datasetSize = datasetSize; this->baseTime = baseTime; } template< typename Logger > void Benchmark< Logger >:: setOperation( const double datasetSize, setOperation( const String & operation, const double datasetSize, const double baseTime ) { this->datasetSize = datasetSize; this->baseTime = baseTime; monitor.setStage( operation.getString() ); Logger::setMetadataElement( {"operation", operation}, 0 ); setDatasetSize( datasetSize, baseTime ); } template< typename Logger > Loading Loading @@ -191,8 +170,7 @@ time( ResetFunction reset, if( this->baseTime == 0.0 ) this->baseTime = result.time; Logger::writeTableHeader( performer, result.getTableHeader() ); Logger::writeTableRow( performer, result.getRowElements() ); Logger::logResult( performer, result.getTableHeader(), result.getRowElements(), result.getColumnWidthHints() ); return this->baseTime; } Loading
src/Benchmarks/Benchmarks.h +7 −10 Original line number Diff line number Diff line Loading @@ -74,11 +74,6 @@ class Benchmark using typename Logger::MetadataColumns; using SolverMonitorType = Solvers::IterativeSolverMonitor< double, int >; using typename Logger::CommonLogs; using Logger::addCommonLogs; using Logger::addLogsMetadata; using Logger::writeHeader; Benchmark( int loops = 10, bool verbose = true, String outputMode = "", Loading Loading @@ -109,6 +104,11 @@ class Benchmark // changing MetadataColumns that were set using the previous method. void setMetadataElement( const typename MetadataColumns::value_type & element ); // Sets the dataset size and base time for the calculations of bandwidth // and speedup in the benchmarks result. void setDatasetSize( const double datasetSize = 0.0, // in GB const double baseTime = 0.0 ); // Sets current operation -- operations expand the table vertically // - baseTime should be reset to 0.0 for most operations, but sometimes // it is useful to override it Loading @@ -119,9 +119,6 @@ class Benchmark const double datasetSize = 0.0, // in GB const double baseTime = 0.0 ); void setOperation( const double datasetSize = 0.0, const double baseTime = 0.0 ); // Times a single ComputeFunction. Subsequent calls implicitly split // the current operation into sub-columns identified by "performer", // which are further split into "bandwidth", "time" and "speedup" columns. Loading
src/Benchmarks/CustomLogging.h +51 −12 Original line number Diff line number Diff line Loading @@ -14,6 +14,7 @@ #pragma once #include "Logging.h" #include <TNL/Assert.h> namespace TNL { namespace Benchmarks { Loading @@ -36,15 +37,6 @@ public: log << ": title = " << title << std::endl; } virtual void addCommonLogs( const CommonLogs& logs ) override { for( auto log : logs ) { if( verbose ) std::cout << log.first << " = " << log.second << std::endl; } }; virtual void writeMetadata( const MetadataMap & metadata ) override { Loading @@ -60,9 +52,44 @@ public: std::cout << std::endl; } virtual void setMetadataColumns( const MetadataColumns& elements ) override { // check if a header element changed (i.e. a first item of the pairs) if( metadataColumns.size() != elements.size() ) header_changed = true; else for( std::size_t i = 0; i < metadataColumns.size(); i++ ) if( metadataColumns[ i ].first != elements[ i ].first ) { header_changed = true; break; } metadataColumns = elements; } virtual void setMetadataElement( const typename MetadataColumns::value_type & element, int insertPosition = -1 /* negative values insert from the end */ ) override { bool found = false; for( auto & it : metadataColumns ) if( it.first == element.first ) { if( it.second != element.second ) it.second = element.second; found = true; break; } if( ! found ) { if( insertPosition < 0 ) metadataColumns.insert( metadataColumns.end() + insertPosition + 1, element ); else metadataColumns.insert( metadataColumns.begin() + insertPosition, element ); header_changed = true; } } void writeTableHeader( const std::string & spanningElement, const HeaderElements & subElements ) override const HeaderElements & subElements ) { if( verbose && header_changed ) { for( auto & it : metadataColumns ) { Loading Loading @@ -93,9 +120,9 @@ public: } } virtual void void writeTableRow( const std::string & spanningElement, const RowElements & subElements ) override const RowElements & subElements ) { if( verbose ) { for( auto & it : metadataColumns ) { Loading @@ -122,6 +149,18 @@ public: } } virtual void logResult( const std::string& spanningElement, const HeaderElements& headerElements, const RowElements& rowElements, const WidthHints& columnWidthHints ) override { TNL_ASSERT_EQ( headerElements.size(), rowElements.size(), "elements must have equal sizes" ); TNL_ASSERT_EQ( headerElements.size(), columnWidthHints.size(), "elements must have equal sizes" ); writeTableHeader( spanningElement, headerElements ); writeTableRow( spanningElement, rowElements ); } virtual void writeErrorMessage( const std::string& message ) override { Loading