Skip to content

Commit 3f82b0b

Browse files
author
jenkins
committed
git subrepo pull (merge) ore
subrepo: subdir: "ore" merged: "7f58b2bdcc" upstream: origin: "git@gitlab.acadiasoft.net:qs/ore.git" branch: "master" commit: "13be379b4a" git-subrepo: version: "0.4.6" origin: "https://github.com/ingydotnet/git-subrepo" commit: "73a0129"
2 parents 9d57504 + 13be379 commit 3f82b0b

10 files changed

Lines changed: 191 additions & 94 deletions

OREData/ored/scripting/engines/scriptedinstrumentpricingenginecg.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ double externalAverage(const std::vector<double>& v) {
6464

6565
} // namespace
6666

67+
ScriptedInstrumentPricingEngineCG::~ScriptedInstrumentPricingEngineCG() {
68+
if (externalCalculationId_)
69+
ComputeEnvironment::instance().context().disposeCalculation(externalCalculationId_);
70+
}
71+
6772
ScriptedInstrumentPricingEngineCG::ScriptedInstrumentPricingEngineCG(
6873
const std::string& npv, const std::vector<std::pair<std::string, std::string>>& additionalResults,
6974
const QuantLib::ext::shared_ptr<ModelCG>& model, const ASTNodePtr ast,

OREData/ored/scripting/engines/scriptedinstrumentpricingenginecg.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ class ScriptedInstrumentPricingEngineCG : public QuantExt::ScriptedInstrument::e
4848
const bool includePastCashflows = false, const bool useCachedSensis = false,
4949
const bool useExternalComputeFramework = false,
5050
const bool useDoublePrecisionForExternalCalculation = false);
51+
~ScriptedInstrumentPricingEngineCG();
5152

5253
bool lastCalculationWasValid() const { return lastCalculationWasValid_; }
5354
const std::string& npvName() const { return npv_; }

QuantExt/qle/math/basiccpuenvironment.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class BasicCpuContext : public ComputeContext {
4242
std::pair<std::size_t, bool> initiateCalculation(const std::size_t n, const std::size_t id = 0,
4343
const std::size_t version = 0,
4444
const Settings settings = {}) override final;
45+
void disposeCalculation(const std::size_t id) override final;
4546
std::size_t createInputVariable(double v) override final;
4647
std::size_t createInputVariable(double* v) override final;
4748
std::vector<std::vector<std::size_t>> createInputVariates(const std::size_t dim,
@@ -92,6 +93,7 @@ class BasicCpuContext : public ComputeContext {
9293

9394
std::vector<std::size_t> size_;
9495
std::vector<std::size_t> version_;
96+
std::vector<bool> disposed_;
9597
std::vector<program> program_;
9698
std::vector<std::size_t> numberOfInputVars_;
9799
std::vector<std::size_t> numberOfVariates_;
@@ -141,6 +143,12 @@ void BasicCpuContext::init() {
141143
initialized_ = true;
142144
}
143145

146+
void BasicCpuContext::disposeCalculation(const std::size_t id) {
147+
QL_REQUIRE(!disposed_[id - 1], "BasicCpuContext::disposeCalculation(): id " << id << " was already disposed.");
148+
program_[id - 1].clear();
149+
disposed_[id - 1] = true;
150+
}
151+
144152
std::pair<std::size_t, bool> BasicCpuContext::initiateCalculation(const std::size_t n, const std::size_t id,
145153
const std::size_t version, const Settings settings) {
146154

@@ -155,6 +163,7 @@ std::pair<std::size_t, bool> BasicCpuContext::initiateCalculation(const std::siz
155163

156164
size_.push_back(n);
157165
version_.push_back(version);
166+
disposed_.push_back(false);
158167
program_.push_back(program());
159168
numberOfInputVars_.push_back(0);
160169
numberOfVariates_.push_back(0);
@@ -170,9 +179,11 @@ std::pair<std::size_t, bool> BasicCpuContext::initiateCalculation(const std::siz
170179

171180
QL_REQUIRE(id <= size_.size(),
172181
"BasicCpuContext::initiateCalculation(): id (" << id << ") invalid, got 1..." << size_.size());
173-
QL_REQUIRE(size_[id - 1] == n, "BasicCpuCOntext::initiateCalculation(): size ("
182+
QL_REQUIRE(size_[id - 1] == n, "BasicCpuContext::initiateCalculation(): size ("
174183
<< size_[id - 1] << ") for id " << id << " does not match current size ("
175184
<< n << ")");
185+
QL_REQUIRE(!disposed_[id - 1], "BasicCpuContext::initiateCalculation(): id ("
186+
<< id << ") was already disposed, it can not be used any more.");
176187

177188
if (version != version_[id - 1]) {
178189
version_[id - 1] = version;

QuantExt/qle/math/computeenvironment.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ class ComputeContext {
8787
virtual std::pair<std::size_t, bool> initiateCalculation(const std::size_t n, const std::size_t id = 0,
8888
const std::size_t version = 0,
8989
const Settings settings = {}) = 0;
90+
virtual void disposeCalculation(const std::size_t id) = 0;
9091

9192
virtual std::size_t createInputVariable(double v) = 0;
9293
virtual std::size_t createInputVariable(double* v) = 0;

0 commit comments

Comments
 (0)