[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [lmi] odd/string_db5 d6d7cb3 3/3: Cache all use of class p
From: |
Greg Chicares |
Subject: |
[lmi-commits] [lmi] odd/string_db5 d6d7cb3 3/3: Cache all use of class product_data |
Date: |
Sun, 6 Dec 2020 20:09:23 -0500 (EST) |
branch: odd/string_db5
commit d6d7cb39c4aaddc879a0cbe2237fbe5c0c00534f
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>
Cache all use of class product_data
The speed improvement is remarkable. Compared to measurements made
before the recent "lingo" work (`git log --patch -G'finra, no solve '`):
100% - 5408 / 7562 = 28.5% // pc-linux-gnu
100% - 15350 / 20707 = 25.9% // i686 mingw
---
Speed_gcc_i686-w64-mingw32 | 12 ++++++------
Speed_gcc_x86_64-pc-linux-gnu | 12 ++++++------
Speed_gcc_x86_64-w64-mingw32 | 12 ++++++------
antediluvian_stubs.cpp | 8 ++++++++
basic_values.hpp | 4 ++--
database.cpp | 4 +++-
ihs_basicval.cpp | 8 ++++++--
product_data.cpp | 6 +++++-
product_data.hpp | 4 ++--
verify_products.cpp | 5 +++--
10 files changed, 47 insertions(+), 28 deletions(-)
diff --git a/Speed_gcc_i686-w64-mingw32 b/Speed_gcc_i686-w64-mingw32
index 135f421..bbbfeb1 100644
--- a/Speed_gcc_i686-w64-mingw32
+++ b/Speed_gcc_i686-w64-mingw32
@@ -1,7 +1,7 @@
Test speed:
- naic, no solve : 5.117e-02 s mean; 50735 us least of 20 runs
- naic, specamt solve : 9.783e-02 s mean; 91068 us least of 11 runs
- naic, ee prem solve : 8.398e-02 s mean; 83652 us least of 12 runs
- finra, no solve : 2.075e-02 s mean; 20536 us least of 49 runs
- finra, specamt solve: 5.791e-02 s mean; 57723 us least of 18 runs
- finra, ee prem solve: 5.379e-02 s mean; 53553 us least of 19 runs
+ naic, no solve : 4.624e-02 s mean; 46017 us least of 22 runs
+ naic, specamt solve : 8.683e-02 s mean; 86637 us least of 12 runs
+ naic, ee prem solve : 8.203e-02 s mean; 78990 us least of 13 runs
+ finra, no solve : 1.589e-02 s mean; 15732 us least of 63 runs
+ finra, specamt solve: 5.316e-02 s mean; 53014 us least of 19 runs
+ finra, ee prem solve: 4.911e-02 s mean; 48901 us least of 21 runs
diff --git a/Speed_gcc_x86_64-pc-linux-gnu b/Speed_gcc_x86_64-pc-linux-gnu
index d28751c..cc58fcc 100644
--- a/Speed_gcc_x86_64-pc-linux-gnu
+++ b/Speed_gcc_x86_64-pc-linux-gnu
@@ -1,7 +1,7 @@
Test speed:
- naic, no solve : 1.934e-02 s mean; 18402 us least of 52 runs
- naic, specamt solve : 3.280e-02 s mean; 32060 us least of 31 runs
- naic, ee prem solve : 3.008e-02 s mean; 29302 us least of 34 runs
- finra, no solve : 7.334e-03 s mean; 7103 us least of 100 runs
- finra, specamt solve: 2.073e-02 s mean; 19476 us least of 49 runs
- finra, ee prem solve: 1.874e-02 s mean; 18282 us least of 54 runs
+ naic, no solve : 1.763e-02 s mean; 16755 us least of 57 runs
+ naic, specamt solve : 3.076e-02 s mean; 30303 us least of 33 runs
+ naic, ee prem solve : 2.811e-02 s mean; 27865 us least of 36 runs
+ finra, no solve : 5.563e-03 s mean; 5224 us least of 100 runs
+ finra, specamt solve: 1.834e-02 s mean; 17780 us least of 55 runs
+ finra, ee prem solve: 1.694e-02 s mean; 16476 us least of 60 runs
diff --git a/Speed_gcc_x86_64-w64-mingw32 b/Speed_gcc_x86_64-w64-mingw32
index 708e570..9d458ef 100644
--- a/Speed_gcc_x86_64-w64-mingw32
+++ b/Speed_gcc_x86_64-w64-mingw32
@@ -1,7 +1,7 @@
Test speed:
- naic, no solve : 2.666e-02 s mean; 26496 us least of 38 runs
- naic, specamt solve : 4.186e-02 s mean; 41651 us least of 24 runs
- naic, ee prem solve : 3.903e-02 s mean; 38808 us least of 26 runs
- finra, no solve : 1.498e-02 s mean; 14804 us least of 67 runs
- finra, specamt solve: 2.897e-02 s mean; 28771 us least of 35 runs
- finra, ee prem solve: 2.745e-02 s mean; 27208 us least of 37 runs
+ naic, no solve : 2.354e-02 s mean; 21568 us least of 43 runs
+ naic, specamt solve : 3.714e-02 s mean; 36679 us least of 27 runs
+ naic, ee prem solve : 3.442e-02 s mean; 33988 us least of 30 runs
+ finra, no solve : 9.926e-03 s mean; 9717 us least of 100 runs
+ finra, specamt solve: 2.401e-02 s mean; 23653 us least of 42 runs
+ finra, ee prem solve: 2.241e-02 s mean; 22148 us least of 45 runs
diff --git a/antediluvian_stubs.cpp b/antediluvian_stubs.cpp
index 236d0c1..b15968c 100644
--- a/antediluvian_stubs.cpp
+++ b/antediluvian_stubs.cpp
@@ -134,10 +134,18 @@ product_data::product_data(std::string const&)
product_data::~product_data() = default;
+product_data::product_data(fs::path const&)
+{}
+
product_data::product_data(product_data const&)
:MemberSymbolTable <product_data> {}
{}
+std::string product_data::actual_filename(std::string const&)
+{
+ return empty_string;
+}
+
int product_data::class_version() const
{
return 0;
diff --git a/basic_values.hpp b/basic_values.hpp
index 5480e29..a1c20b8 100644
--- a/basic_values.hpp
+++ b/basic_values.hpp
@@ -118,7 +118,7 @@ class LMI_SO BasicValues
double InvestmentManagementFee() const;
yare_input yare_input_;
- product_data const product_;
+ std::shared_ptr<product_data> product_;
product_database const database_;
std::shared_ptr<lingo> lingo_;
std::shared_ptr<FundData> FundData_;
@@ -133,7 +133,7 @@ class LMI_SO BasicValues
std::shared_ptr<Irc7702> Irc7702_;
std::shared_ptr<Irc7702A> Irc7702A_;
- product_data const& product () const {return product_;}
+ product_data const& product () const {return *product_;}
product_database const& database() const {return database_;}
double GetAnnualTgtPrem(int a_year, double a_specamt) const;
diff --git a/database.cpp b/database.cpp
index 11d5896..52e519b 100644
--- a/database.cpp
+++ b/database.cpp
@@ -192,7 +192,9 @@ void product_database::initialize(std::string const&
product_name)
}
else
{
- product_data const p(product_name);
+// product_data const p(product_name);
+ std::string f = product_data::actual_filename(product_name);
+ product_data const& p(*product_data::read_via_cache(f));
std::string const filename(p.datum("DatabaseFilename"));
LMI_ASSERT(!filename.empty());
db_ = DBDictionary::read_via_cache(AddDataDir(filename));
diff --git a/ihs_basicval.cpp b/ihs_basicval.cpp
index 7664a42..8ebfe7e 100644
--- a/ihs_basicval.cpp
+++ b/ihs_basicval.cpp
@@ -67,7 +67,9 @@ BasicValues::BasicValues(Input const& input)
// ,product_ (yare_input_.ProductName)
// Safe to dereference?
// ,product_
(*product_data::read_via_cache(yare_input_.ProductName))
- ,product_
(*product_data::read_via_cache(product_data::actual_filename(yare_input_.ProductName)))
+// ,product_
(*product_data::read_via_cache(product_data::actual_filename(yare_input_.ProductName)))
+ // Throw if null?
+ ,product_
(product_data::read_via_cache(product_data::actual_filename(yare_input_.ProductName)))
,database_ (yare_input_)
,DefnLifeIns_ {mce_cvat}
,DefnMaterialChange_ {mce_unnecessary_premium}
@@ -100,7 +102,9 @@ BasicValues::BasicValues
:yare_input_ (Input{})
// ,product_ (a_ProductName)
// Safe to dereference?
- ,product_
(*product_data::read_via_cache(product_data::actual_filename(a_ProductName)))
+// ,product_
(*product_data::read_via_cache(product_data::actual_filename(a_ProductName)))
+ // Throw if null?
+ ,product_
(product_data::read_via_cache(product_data::actual_filename(a_ProductName)))
,database_
(a_ProductName
,a_Gender
diff --git a/product_data.cpp b/product_data.cpp
index 2496786..3d396ce 100644
--- a/product_data.cpp
+++ b/product_data.cpp
@@ -26,7 +26,7 @@
#include "alert.hpp"
#include "assert_lmi.hpp"
-#include "ce_product_name.hpp"
+////#include "ce_product_name.hpp"
#include "contains.hpp"
#include "data_directory.hpp" // AddDataDir()
#include "map_lookup.hpp"
@@ -148,10 +148,14 @@ product_data::product_data(std::string const&
product_name)
{
}
+#if 0
+// Either add 'ce_product_name.o' to unit-test targets in makefiles,
+// or abandon this idea.
product_data::product_data(ce_product_name const& product_name)
:product_data(fs::path(actual_filename(product_name.str())))
{
}
+#endif // 0
product_data::product_data(product_data const& z)
// Is this initializer-list necessary?
diff --git a/product_data.hpp b/product_data.hpp
index d64d1cd..a734c08 100644
--- a/product_data.hpp
+++ b/product_data.hpp
@@ -33,7 +33,7 @@
#include <string>
-class LMI_SO_FWD_DECL ce_product_name;
+////class LMI_SO_FWD_DECL ce_product_name;
/// A single product datum: a string with an optional gloss.
///
@@ -95,7 +95,7 @@ class LMI_SO product_data
public:
explicit product_data(fs::path const& filename);
explicit product_data(std::string const& product_name);
- explicit product_data(ce_product_name const& product_name);
+//// explicit product_data(ce_product_name const& product_name);
~product_data() override;
std::string const& datum(std::string const& name) const;
diff --git a/verify_products.cpp b/verify_products.cpp
index 1e1f44b..ff97a74 100644
--- a/verify_products.cpp
+++ b/verify_products.cpp
@@ -55,7 +55,7 @@ class product_verifier
std::string const product_name_;
std::string const gender_str_ ;
std::string const smoking_str_ ;
- product_data const p_ ;
+ product_data const& p_ ; // or just std::shared_ptr?
mcenum_gender const gender_ ;
mcenum_smoking const smoking_ ;
product_database const db0_ ;
@@ -77,7 +77,8 @@ product_verifier::product_verifier
:product_name_ {product_name}
,gender_str_ {gender_str}
,smoking_str_ {smoking_str}
- ,p_ (product_name)
+// ,p_ (product_name)
+ ,p_
(*product_data::read_via_cache(product_data::actual_filename(product_name)))
,gender_ {mce_gender (gender_str ).value()}
,smoking_ {mce_smoking(smoking_str).value()}
,db0_