From 81577900680f39c7effb398e2279e787b4df4fe6 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 8 Nov 2019 15:40:53 +0100 Subject: [PATCH] #5022 Performance Summary : Use openmp when loading metadata for cases --- .../Application/RiaPreferences.cpp | 21 ++++++- ApplicationCode/Application/RiaPreferences.h | 2 + .../Summary/RimSummaryCaseMainCollection.cpp | 55 ++++++++++++++++++- .../Summary/RimSummaryCaseMainCollection.h | 2 + 4 files changed, 76 insertions(+), 4 deletions(-) diff --git a/ApplicationCode/Application/RiaPreferences.cpp b/ApplicationCode/Application/RiaPreferences.cpp index 8782189da4..c20e447ffa 100644 --- a/ApplicationCode/Application/RiaPreferences.cpp +++ b/ApplicationCode/Application/RiaPreferences.cpp @@ -328,6 +328,15 @@ RiaPreferences::RiaPreferences( void ) "", "" ); m_showSummaryTimeAsLongString.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::HIDDEN ); + + CAF_PDM_InitField( &m_useMultipleThreadsWhenLoadingSummaryData, + "useMultipleThreadsWhenLoadingSummaryData", + false, + "Use multiple threads when loading summary data", + "", + "", + "" ); + m_useMultipleThreadsWhenLoadingSummaryData.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::HIDDEN ); } //-------------------------------------------------------------------------------------------------- @@ -365,7 +374,8 @@ void RiaPreferences::defineEditorAttribute( const caf::PdmFieldHandle* field, field == &m_showTestToolbar || field == &m_includeFractureDebugInfoFile || field == &showLasCurveWithoutTvdWarning || field == &holoLensDisableCertificateVerification || field == &m_showProjectChangedDialog || field == &m_searchPlotTemplateFoldersRecursively || - field == &showLegendBackground || field == &m_showSummaryTimeAsLongString || field == &m_showViewIdInProjectTree ) + field == &showLegendBackground || field == &m_showSummaryTimeAsLongString || + field == &m_showViewIdInProjectTree || field == &m_useMultipleThreadsWhenLoadingSummaryData ) { caf::PdmUiCheckBoxEditorAttribute* myAttr = dynamic_cast( attribute ); if ( myAttr ) @@ -452,6 +462,7 @@ void RiaPreferences::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering.add( &m_dateFormat ); uiOrdering.add( &m_timeFormat ); uiOrdering.add( &m_showSummaryTimeAsLongString ); + uiOrdering.add( &m_useMultipleThreadsWhenLoadingSummaryData ); caf::PdmUiGroup* group = uiOrdering.addNewGroup( "Plot Templates" ); group->add( &m_plotTemplateFolders ); @@ -812,6 +823,14 @@ bool RiaPreferences::showSummaryTimeAsLongString() const return m_showSummaryTimeAsLongString; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RiaPreferences::useMultipleThreadsWhenReadingSummaryData() const +{ + return m_useMultipleThreadsWhenLoadingSummaryData; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/Application/RiaPreferences.h b/ApplicationCode/Application/RiaPreferences.h index 0ce7def5d6..8ca7ac0ef2 100644 --- a/ApplicationCode/Application/RiaPreferences.h +++ b/ApplicationCode/Application/RiaPreferences.h @@ -93,6 +93,7 @@ public: QString defaultPlotTemplateAbsolutePath() const; void setDefaultPlotTemplatePath( const QString& templatePath ); bool showSummaryTimeAsLongString() const; + bool useMultipleThreadsWhenReadingSummaryData() const; std::map defaultFontSizes() const; @@ -181,6 +182,7 @@ private: caf::PdmField m_dateFormat; caf::PdmField m_timeFormat; caf::PdmField m_showSummaryTimeAsLongString; + caf::PdmField m_useMultipleThreadsWhenLoadingSummaryData; caf::PdmField m_plotTemplateFolders; caf::PdmField m_searchPlotTemplateFoldersRecursively; diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.cpp index c3cb040068..3a3514fc1c 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.cpp @@ -346,11 +346,39 @@ void RimSummaryCaseMainCollection::loadAllSummaryCaseData() //-------------------------------------------------------------------------------------------------- void RimSummaryCaseMainCollection::loadSummaryCaseData( std::vector summaryCases ) { - caf::ProgressInfo progInfo( summaryCases.size(), "Loading Summary Cases" ); + std::vector fileSummaryCases; + std::vector otherSummaryCases; - for ( int cIdx = 0; cIdx < static_cast( summaryCases.size() ); ++cIdx ) + if ( RiaApplication::instance()->preferences()->useMultipleThreadsWhenReadingSummaryData() ) { - RimSummaryCase* sumCase = summaryCases[cIdx]; + for ( auto c : summaryCases ) + { + auto fileCase = dynamic_cast( c ); + if ( fileCase ) + { + fileSummaryCases.push_back( fileCase ); + } + else + { + otherSummaryCases.push_back( c ); + } + } + } + else + { + otherSummaryCases = summaryCases; + } + + if ( !fileSummaryCases.empty() ) + { + loadFileSummaryCaseData( fileSummaryCases ); + } + + caf::ProgressInfo progInfo( otherSummaryCases.size(), "Loading Summary Cases" ); + + for ( int cIdx = 0; cIdx < static_cast( otherSummaryCases.size() ); ++cIdx ) + { + RimSummaryCase* sumCase = otherSummaryCases[cIdx]; if ( sumCase ) { sumCase->createSummaryReaderInterface(); @@ -364,6 +392,27 @@ void RimSummaryCaseMainCollection::loadSummaryCaseData( std::vector fileSummaryCases ) +{ + // Use openMP when reading file summary case meta data. Avoid using the virtual interface of base class + // RimSummaryCase, as it is difficult to make sure all variants of the leaf classes are thread safe. + +#pragma omp parallel for + for ( int cIdx = 0; cIdx < static_cast( fileSummaryCases.size() ); ++cIdx ) + { + RimFileSummaryCase* fileSummaryCase = fileSummaryCases[cIdx]; + if ( fileSummaryCase ) + { + fileSummaryCase->createSummaryReaderInterface(); + fileSummaryCase->createRftReaderInterface(); + addCaseRealizationParametersIfFound( *fileSummaryCase, fileSummaryCase->summaryHeaderFilename() ); + } + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.h index b42be92094..0b8b2efc22 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.h @@ -25,6 +25,7 @@ class RimGridSummaryCase; class RimSummaryCase; +class RimFileSummaryCase; class RimEclipseResultCase; class RimSummaryCaseCollection; class RifSummaryCaseFileResultInfo; @@ -73,6 +74,7 @@ public: private: static void loadSummaryCaseData( std::vector summaryCases ); + static void loadFileSummaryCaseData( std::vector fileSummaryCases ); static RimSummaryCaseCollection* defaultAllocator(); private: