Merge pull request #5032 from OPM/summary-cache-improvements

Summary cache improvements
This commit is contained in:
Magne Sjaastad 2019-11-12 19:03:30 +01:00 committed by GitHub
commit ef2d7eca0c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 28 additions and 61 deletions

View File

@ -84,5 +84,4 @@ void RicSummaryCurveCreatorDialog::slotDialogFinished()
{ {
plotwindow->cleanUpTemporaryWidgets(); plotwindow->cleanUpTemporaryWidgets();
} }
RifReaderEclipseSummary::purgeCache();
} }

View File

@ -570,14 +570,6 @@ void RifReaderEclipseSummary::markForCachePurge( const RifEclipseSummaryAddress&
m_valuesCache->markAddressForPurge( address ); m_valuesCache->markAddressForPurge( address );
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RifReaderEclipseSummary::purgeCache()
{
ValuesCache::purge();
}
#if 0 #if 0
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
@ -597,26 +589,17 @@ void RifReaderEclipseSummary::populateVectorFromStringList(stringlist_type* stri
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
const std::vector<double> RifReaderEclipseSummary::ValuesCache::EMPTY_VECTOR; const std::vector<double> RifReaderEclipseSummary::ValuesCache::EMPTY_VECTOR;
std::set<RifReaderEclipseSummary::ValuesCache*> RifReaderEclipseSummary::ValuesCache::m_instances;
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RifReaderEclipseSummary::ValuesCache::ValuesCache() RifReaderEclipseSummary::ValuesCache::ValuesCache() {}
{
// Register instance
m_instances.insert( this );
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RifReaderEclipseSummary::ValuesCache::~ValuesCache() RifReaderEclipseSummary::ValuesCache::~ValuesCache() {}
{
// Deregister instance
m_instances.erase( this );
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
@ -648,15 +631,6 @@ void RifReaderEclipseSummary::ValuesCache::markAddressForPurge( const RifEclipse
m_purgeList.insert( address ); m_purgeList.insert( address );
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RifReaderEclipseSummary::ValuesCache::purge()
{
for ( auto instance : m_instances )
instance->purgeData();
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -84,8 +84,7 @@ public:
return m_warnings; return m_warnings;
} }
void markForCachePurge( const RifEclipseSummaryAddress& address ) override; void markForCachePurge( const RifEclipseSummaryAddress& address ) override;
static void purgeCache();
private: private:
int timeStepCount() const; int timeStepCount() const;
@ -122,15 +121,12 @@ private:
void insertValues( const RifEclipseSummaryAddress& address, const std::vector<double>& values ); void insertValues( const RifEclipseSummaryAddress& address, const std::vector<double>& values );
const std::vector<double>& getValues( const RifEclipseSummaryAddress& address ) const; const std::vector<double>& getValues( const RifEclipseSummaryAddress& address ) const;
void markAddressForPurge( const RifEclipseSummaryAddress& address ); void markAddressForPurge( const RifEclipseSummaryAddress& address );
static void purge();
private: private:
void purgeData(); void purgeData();
std::map<const RifEclipseSummaryAddress, std::vector<double>> m_cachedValues; std::map<const RifEclipseSummaryAddress, std::vector<double>> m_cachedValues;
std::set<RifEclipseSummaryAddress> m_purgeList; std::set<RifEclipseSummaryAddress> m_purgeList;
static std::set<ValuesCache*> m_instances;
}; };
std::unique_ptr<ValuesCache> m_valuesCache; std::unique_ptr<ValuesCache> m_valuesCache;

View File

@ -44,6 +44,8 @@ RimFileSummaryCase::RimFileSummaryCase()
CAF_PDM_InitField( &m_includeRestartFiles, "IncludeRestartFiles", false, "Include Restart Files", "", "", "" ); CAF_PDM_InitField( &m_includeRestartFiles, "IncludeRestartFiles", false, "Include Restart Files", "", "", "" );
m_includeRestartFiles.uiCapability()->setUiHidden( true ); m_includeRestartFiles.uiCapability()->setUiHidden( true );
m_summaryFileReader = new RifReaderEclipseSummary;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -83,8 +85,12 @@ void RimFileSummaryCase::updateFilePathsFromProjectPath( const QString& newProje
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimFileSummaryCase::createSummaryReaderInterface() void RimFileSummaryCase::createSummaryReaderInterface()
{ {
m_summaryFileReader = RimFileSummaryCase::findRelatedFilesAndCreateReader( this->summaryHeaderFilename(), if ( !m_summaryFileReader->open( this->summaryHeaderFilename(), m_includeRestartFiles ) )
m_includeRestartFiles ); {
RiaLogging::warning( QString( "Failed to open summary file %1" ).arg( this->summaryHeaderFilename() ) );
m_summaryFileReader = nullptr;
}
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -99,25 +105,6 @@ void RimFileSummaryCase::createRftReaderInterface()
} }
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifReaderEclipseSummary* RimFileSummaryCase::findRelatedFilesAndCreateReader( const QString& headerFileName,
bool includeRestartFiles )
{
RifReaderEclipseSummary* summaryFileReader = new RifReaderEclipseSummary;
if ( !summaryFileReader->open( headerFileName, includeRestartFiles ) )
{
RiaLogging::warning( QString( "Failed to open summary file %1" ).arg( headerFileName ) );
delete summaryFileReader;
summaryFileReader = nullptr;
}
return summaryFileReader;
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -50,9 +50,7 @@ public:
void setIncludeRestartFiles( bool includeRestartFiles ); void setIncludeRestartFiles( bool includeRestartFiles );
static RifReaderEclipseSummary* findRelatedFilesAndCreateReader( const QString& headerFileName, static RifReaderEclipseRft* findRftDataAndCreateReader( const QString& headerFileName );
bool includeRestartFiles );
static RifReaderEclipseRft* findRftDataAndCreateReader( const QString& headerFileName );
private: private:
cvf::ref<RifReaderEclipseSummary> m_summaryFileReader; cvf::ref<RifReaderEclipseSummary> m_summaryFileReader;

View File

@ -52,6 +52,8 @@ RimGridSummaryCase::RimGridSummaryCase()
CAF_PDM_InitField( &m_includeRestartFiles, "IncludeRestartFiles", false, "Include Restart Files", "", "", "" ); CAF_PDM_InitField( &m_includeRestartFiles, "IncludeRestartFiles", false, "Include Restart Files", "", "", "" );
m_includeRestartFiles.uiCapability()->setUiHidden( true ); m_includeRestartFiles.uiCapability()->setUiHidden( true );
m_summaryFileReader = new RifReaderEclipseSummary;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -173,8 +175,10 @@ void RimGridSummaryCase::updateFilePathsFromProjectPath( const QString& newProje
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimGridSummaryCase::createSummaryReaderInterface() void RimGridSummaryCase::createSummaryReaderInterface()
{ {
m_summaryFileReader = RimFileSummaryCase::findRelatedFilesAndCreateReader( this->summaryHeaderFilename(), if ( !m_summaryFileReader->open( this->summaryHeaderFilename(), m_includeRestartFiles ) )
m_includeRestartFiles ); {
m_summaryFileReader = nullptr;
}
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -399,6 +399,7 @@ void RimSummaryCaseMainCollection::loadFileSummaryCaseData( std::vector<RimFileS
{ {
// Use openMP when reading file summary case meta data. Avoid using the virtual interface of base class // 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. // RimSummaryCase, as it is difficult to make sure all variants of the leaf classes are thread safe.
// Only open the summary file reader in parallel loop to reduce risk of multithreading issues
#pragma omp parallel for #pragma omp parallel for
for ( int cIdx = 0; cIdx < static_cast<int>( fileSummaryCases.size() ); ++cIdx ) for ( int cIdx = 0; cIdx < static_cast<int>( fileSummaryCases.size() ); ++cIdx )
@ -407,6 +408,14 @@ void RimSummaryCaseMainCollection::loadFileSummaryCaseData( std::vector<RimFileS
if ( fileSummaryCase ) if ( fileSummaryCase )
{ {
fileSummaryCase->createSummaryReaderInterface(); fileSummaryCase->createSummaryReaderInterface();
}
}
for ( int cIdx = 0; cIdx < static_cast<int>( fileSummaryCases.size() ); ++cIdx )
{
RimFileSummaryCase* fileSummaryCase = fileSummaryCases[cIdx];
if ( fileSummaryCase )
{
fileSummaryCase->createRftReaderInterface(); fileSummaryCase->createRftReaderInterface();
addCaseRealizationParametersIfFound( *fileSummaryCase, fileSummaryCase->summaryHeaderFilename() ); addCaseRealizationParametersIfFound( *fileSummaryCase, fileSummaryCase->summaryHeaderFilename() );
} }