@@ -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+
144152std::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;
0 commit comments