Commit 2b69cfe1 authored by Tomáš Oberhuber's avatar Tomáš Oberhuber Committed by Jakub Klinkovský
Browse files

Modifying SpMV JSON benchmark log - can be parsed by Pandas now.

parent ebc76a2c
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -78,8 +78,9 @@ public:
   using Logger::writeHeader;

   Benchmark( int loops = 10,
              bool verbose = true )
   : Logger(verbose), loops(loops)
              bool verbose = true,
              String outputMode = "" )
   : Logger(verbose, outputMode), loops(loops)
   {}

   static void configSetup( Config::ConfigDescription& config )
+44 −21
Original line number Diff line number Diff line
@@ -88,8 +88,9 @@ public:
   using HeaderElements = std::vector< String >;
   using RowElements = JsonLoggingRowElements;

   JsonLogging( int verbose = true )
   : verbose(verbose)
   JsonLogging( int verbose = true,
                String outputMode = "" )
   : verbose(verbose), outputMode( outputMode )
   {}

   void
@@ -100,18 +101,19 @@ public:

   void addCommonLogs( const CommonLogs& logs )
   {
      if( this->lineStarted )
         log << "," << std::endl;
      log << "   \"benchmarks\" : [" << std::endl;
      int idx( 0 );
      //if( this->lineStarted )
      //   log << "," << std::endl;
      //log << "   \"benchmarks\" : [" << std::endl;
      this->commonLogs = logs;
      //int idx( 0 );
      for( auto lg : logs )
      {
         if( verbose )
            std::cout << lg.first << " = " << lg.second << std::endl;
         if( idx++ > 0 )
            log << "," << std::endl;
         log << "      \"" << lg.first << "\" : \"" << lg.second;
         this->lineStarted = true;
         //if( idx++ > 0 )
         //   log << "," << std::endl;
         //log << "      \"" << lg.first << "\" : \"" << lg.second << "\"";
         //this->lineStarted = true;
      }
   };

@@ -137,14 +139,21 @@ public:
      TNL_ASSERT_EQ( rowEls.size(), this->logsMetadata.size(), "" );
      if( this->lineStarted )
         log << "," << std::endl;
      if( ! this->resultsStarted )

      log << "         {" << std::endl;

      // write common logs
      int idx( 0 );
      for( auto lg : this->commonLogs )
      {
         log << "      \"results\" : [ " << std::endl;
         this->resultsStarted = true;
         //if( verbose )
         //   std::cout << lg.first << " = " << lg.second << std::endl;
         if( idx++ > 0 )
            log << "," << std::endl;
         log << "      \"" << lg.first << "\" : \"" << lg.second << "\"";
      }
      log << "         {" << std::endl;

      auto md = this->logsMetadata.begin();
      int idx( 0 );
      for( auto el : rowEls )
      {
         if( verbose )
@@ -162,6 +171,9 @@ public:
   void
   writeTitle( const String & title )
   {
      if( outputMode == "append" )
         return;

      if( verbose )
         std::cout << std::endl << "== " << title << " ==" << std::endl << std::endl;
      log << "   \"title\" : \"" << title << "\"";
@@ -171,6 +183,9 @@ public:
   void
   writeMetadata( const MetadataMap & metadata )
   {
      if( outputMode == "append" )
         return;

      if( verbose )
         std::cout << "properties:" << std::endl;

@@ -181,8 +196,11 @@ public:
         if( idx++ > 0 )
            log << "," << std::endl;
         log << "   \"" << it.first << "\" : \"" << it.second << "\"";
         this->lineStarted = true;
         //this->lineStarted = true;
      }
      log << "," << std::endl << "      \"results\" : [ " << std::endl;
      this->lineStarted = false;

      if( verbose )
         std::cout << std::endl;
   }
@@ -204,8 +222,9 @@ public:
   writeErrorMessage( const char* msg,
                      int colspan = 1 )
   {
      log << "\"error\" : \"" << msg << "\"" << std::endl;
      // initial indent string
      header_indent = "!";
      /*header_indent = "!";
      log << std::endl;
      for( auto & it : metadataColumns ) {
         log << header_indent << " " << it.first << std::endl;
@@ -237,15 +256,17 @@ public:
         log << it.second << std::endl;
      }
      log << msg << std::endl;
      */
   }

   void
   closeTable()
   {
      log << std::endl;
      header_indent = body_indent = "";
      header_changed = true;
      horizontalGroups.clear();
      //log << std::endl << "   ]" << std::endl;
      log << "," << std::endl;
      //header_indent = body_indent = "";
      //header_changed = true;
      //horizontalGroups.clear();
   }

   bool save( std::ostream & logFile )
@@ -284,6 +305,8 @@ protected:

   // new JSON implementation
   LogsMetadata logsMetadata;
   CommonLogs commonLogs;
   String outputMode;

   bool lineStarted = false;
   bool resultsStarted = false;
+5 −2
Original line number Diff line number Diff line
@@ -86,8 +86,9 @@ public:
   using HeaderElements = std::vector< String >;
   using RowElements = LoggingRowElements;

   Logging( int verbose = true )
   : verbose(verbose)
   Logging( int verbose = true,
            String outputMode = "" )
   : verbose(verbose), outputMode( outputMode )
   {}

   void
@@ -294,6 +295,8 @@ protected:
   MetadataColumns metadataColumns;
   bool header_changed = true;
   std::vector< std::pair< String, int > > horizontalGroups;

   String outputMode;
};

} // namespace Benchmarks
+6 −2
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ using namespace TNL::Matrices;

#include <exception>
#include <ctime> // Used for file naming, so logs don't get overwritten.
#include <experimental/filesystem> // check file existence

using namespace TNL;
using namespace TNL::Benchmarks;
@@ -116,20 +117,23 @@ main( int argc, char* argv[] )

   const String & inputFileName = parameters.getParameter< String >( "input-file" );
   const String & logFileName = parameters.getParameter< String >( "log-file" );
   const String & outputMode = parameters.getParameter< String >( "output-mode" );
   String outputMode = parameters.getParameter< String >( "output-mode" );
   const String & precision = parameters.getParameter< String >( "precision" );
   const int loops = parameters.getParameter< int >( "loops" );
   const int verbose = parameters.getParameter< int >( "verbose" );
   const int verboseMR = parameters.getParameter< int >( "verbose-MReader" );

   // open log file
   bool exist = std::experimental::filesystem::exists(logFileName.getString());
   if( ! exist )
      outputMode = "";
   auto mode = std::ios::out;
   if( outputMode == "append" )
       mode |= std::ios::app;
   std::ofstream logFile( logFileName.getString(), mode );

   // init benchmark and common metadata
   SpMV::BenchmarkType benchmark( loops, verbose );
   SpMV::BenchmarkType benchmark( loops, verbose, outputMode );

   // prepare global metadata
   SpMV::BenchmarkType::MetadataMap metadata = getHardwareMetadata< Logging >();