Loading include/dca/phys/dca_step/cluster_solver/shared_tools/accumulation/sp/sp_accumulator.hpp +0 −1 Original line number Diff line number Diff line Loading @@ -248,7 +248,6 @@ template <class Parameters, typename Real> const typename SpAccumulator<Parameters, linalg::CPU, Real>::MFunction& SpAccumulator<Parameters, linalg::CPU, Real>::get_single_measurement_sign_times_MFunction() { single_measurement_M_r_w_.reset(new MFunction("single_function_M_r_w")); finalizeFunction(*single_measurement_M_r_t_, *single_measurement_M_r_w_); return *single_measurement_M_r_w_; } Loading include/dca/phys/dca_step/cluster_solver/shared_tools/accumulation/sp/sp_accumulator_gpu.hpp +1 −1 Original line number Diff line number Diff line Loading @@ -224,8 +224,8 @@ void SpAccumulator<Parameters, linalg::GPU, Real>::finalizeFunction(std::array<N template <class Parameters, typename Real> const auto& SpAccumulator<Parameters, linalg::GPU, Real>::get_single_measurement_sign_times_M_r_w() { single_measurement_M_r_w_.reset(new MFunction("single_function_M_r_w")); single_measurement_M_r_t_.synchronizeCopy(); finalizeFunction(single_measurement_M_r_t_, *single_measurement_M_r_w_); return *single_measurement_M_r_w_; } Loading include/dca/phys/dca_step/cluster_solver/stdthread_qmci/stdthread_qmci_accumulator.hpp +22 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ public: void waitForQmciWalker(); void logPerConfigurationGreensFunction(const SpGreensFunction&) const; void logPerConfigurationMFunction(const MFunction&) const; void measure(); Loading Loading @@ -152,6 +153,27 @@ void StdThreadQmciAccumulator<QmciAccumulator, SpGreensFunction>::measure() { QmciAccumulator::measure(); } template <class QmciAccumulator, class MFunction> void StdThreadQmciAccumulator<QmciAccumulator, MFunction>::logPerConfigurationMFunction( const MFunction& mfunc) const { const bool print_to_log = writer_ && static_cast<bool>(*writer_); // File exists and it is open. if (print_to_log && stamping_period_ && (meas_id_ % stamping_period_) == 0) { if (writer_ && (writer_->isADIOS2() || concurrency_id_ == 0)) { // Induce copy for GPU MFunction const std::string stamp_name = "r_" + std::to_string(concurrency_id_) + "_meas_" + std::to_string(meas_id_) + "_w_" + std::to_string(walker_thread_id_); writer_->lock(); writer_->open_group("STQW_Configurations"); writer_->open_group(stamp_name); writer_->execute("MFunction", mfunc); writer_->close_group(); writer_->close_group(); writer_->unlock(); } } } template <class QmciAccumulator, class SpGreensFunction> void StdThreadQmciAccumulator<QmciAccumulator, SpGreensFunction>::logPerConfigurationGreensFunction( const SpGreensFunction& spf) const { Loading include/dca/phys/dca_step/cluster_solver/stdthread_qmci/stdthread_qmci_cluster_solver.hpp +10 −6 Original line number Diff line number Diff line Loading @@ -86,8 +86,8 @@ public: private: void startWalker(int id); void startAccumulator(int id); void startWalkerAndAccumulator(int id); void startAccumulator(int id, const Parameters& parameters); void startWalkerAndAccumulator(int id, const Parameters& parameters); void initializeAndWarmUp(Walker& walker, int id, int walker_id); Loading Loading @@ -216,9 +216,9 @@ void StdThreadQmciClusterSolver<QmciSolver>::integrate() { if (thread_task_handler_.getTask(i) == "walker") futures.emplace_back(pool.enqueue(&ThisType::startWalker, this, i)); else if (thread_task_handler_.getTask(i) == "accumulator") futures.emplace_back(pool.enqueue(&ThisType::startAccumulator, this, i)); futures.emplace_back(pool.enqueue(&ThisType::startAccumulator, this, i, parameters_)); else if (thread_task_handler_.getTask(i) == "walker and accumulator") futures.emplace_back(pool.enqueue(&ThisType::startWalkerAndAccumulator, this, i)); futures.emplace_back(pool.enqueue(&ThisType::startWalkerAndAccumulator, this, i, parameters_)); else throw std::logic_error("Thread task is undefined."); } Loading Loading @@ -434,7 +434,7 @@ auto StdThreadQmciClusterSolver<QmciSolver>::computeSingleMeasurement_G_k_w(cons } template <class QmciSolver> void StdThreadQmciClusterSolver<QmciSolver>::startAccumulator(int id) { void StdThreadQmciClusterSolver<QmciSolver>::startAccumulator(int id, const Parameters& parameters) { Profiler::start_threading(id); auto accumulator_log = last_iteration_ ? BaseClass::writer_ : nullptr; Loading Loading @@ -465,6 +465,8 @@ void StdThreadQmciClusterSolver<QmciSolver>::startAccumulator(int id) { if (last_iteration_) { auto [M_r_w, sign] = getSingleMFunc(accumulator_obj); auto single_meas_G_k_w = computeSingleMeasurement_G_k_w(M_r_w, sign); if(parameters.per_measurement_MFunction()) accumulator_obj.logPerConfigurationMFunction(M_r_w); accumulator_obj.logPerConfigurationGreensFunction(single_meas_G_k_w); accumulator_obj.clearSingleMeasurement(); } Loading Loading @@ -499,7 +501,7 @@ void StdThreadQmciClusterSolver<QmciSolver>::startAccumulator(int id) { } template <class QmciSolver> void StdThreadQmciClusterSolver<QmciSolver>::startWalkerAndAccumulator(int id) { void StdThreadQmciClusterSolver<QmciSolver>::startWalkerAndAccumulator(int id, const Parameters& parameters) { Profiler::start_threading(id); // Create and warm a walker. Loading Loading @@ -533,6 +535,8 @@ void StdThreadQmciClusterSolver<QmciSolver>::startWalkerAndAccumulator(int id) { if (last_iteration_) { auto [M_r_w, sign] = getSingleMFunc(accumulator_obj); auto single_meas_G_k_w = computeSingleMeasurement_G_k_w(M_r_w, sign); if(parameters.per_measurement_MFunction()) accumulator_obj.logPerConfigurationMFunction(M_r_w); accumulator_obj.logPerConfigurationGreensFunction(single_meas_G_k_w); accumulator_obj.clearSingleMeasurement(); } Loading include/dca/phys/parameters/mci_parameters.hpp +13 −5 Original line number Diff line number Diff line Loading @@ -78,7 +78,6 @@ public: std::fill(measurements_.begin(), measurements_.end(), measurements); } int get_walkers() const { return walkers_; } Loading Loading @@ -127,6 +126,9 @@ public: int stamping_period() const { return stamping_period_; } bool per_measurement_MFunction() const { return per_measurement_MFunction_; } protected: // Resize vector arguments to have the same size as the number of iterations. Loading Loading @@ -159,6 +161,7 @@ private: bool store_configuration_; DistType g4_distribution_; int stamping_period_ = 0; bool per_measurement_MFunction_ = false; }; template <typename Concurrency> Loading @@ -182,7 +185,7 @@ int MciParameters::getBufferSize(const Concurrency& concurrency) const { buffer_size += concurrency.get_buffer_size(store_configuration_); buffer_size += concurrency.get_buffer_size(g4_distribution_); buffer_size += concurrency.get_buffer_size(stamping_period_); buffer_size += concurrency.get_buffer_size(per_measurement_MFunction_); return buffer_size; } Loading @@ -206,6 +209,7 @@ void MciParameters::pack(const Concurrency& concurrency, char* buffer, int buffe concurrency.pack(buffer, buffer_size, position, store_configuration_); concurrency.pack(buffer, buffer_size, position, g4_distribution_); concurrency.pack(buffer, buffer_size, position, stamping_period_); concurrency.pack(buffer, buffer_size, position, per_measurement_MFunction_); } template <typename Concurrency> Loading @@ -228,6 +232,7 @@ void MciParameters::unpack(const Concurrency& concurrency, char* buffer, int buf concurrency.unpack(buffer, buffer_size, position, store_configuration_); concurrency.unpack(buffer, buffer_size, position, g4_distribution_); concurrency.unpack(buffer, buffer_size, position, stamping_period_); concurrency.unpack(buffer, buffer_size, position, per_measurement_MFunction_); } template <typename ReaderOrWriter> Loading Loading @@ -283,6 +288,9 @@ void MciParameters::readWrite(ReaderOrWriter& reader_or_writer) { reader_or_writer.execute("time-correlation-window", time_correlation_window_); reader_or_writer.execute("compute-G-correlation", compute_G_correlation_); reader_or_writer.execute("stamping-period", stamping_period_); reader_or_writer.execute("per-measurement-MFunction", per_measurement_MFunction_); reader_or_writer.execute("compute-G-correlation", compute_G_correlation_); reader_or_writer.execute("store-configuration", store_configuration_); // Read arguments for threaded solver. Loading Loading
include/dca/phys/dca_step/cluster_solver/shared_tools/accumulation/sp/sp_accumulator.hpp +0 −1 Original line number Diff line number Diff line Loading @@ -248,7 +248,6 @@ template <class Parameters, typename Real> const typename SpAccumulator<Parameters, linalg::CPU, Real>::MFunction& SpAccumulator<Parameters, linalg::CPU, Real>::get_single_measurement_sign_times_MFunction() { single_measurement_M_r_w_.reset(new MFunction("single_function_M_r_w")); finalizeFunction(*single_measurement_M_r_t_, *single_measurement_M_r_w_); return *single_measurement_M_r_w_; } Loading
include/dca/phys/dca_step/cluster_solver/shared_tools/accumulation/sp/sp_accumulator_gpu.hpp +1 −1 Original line number Diff line number Diff line Loading @@ -224,8 +224,8 @@ void SpAccumulator<Parameters, linalg::GPU, Real>::finalizeFunction(std::array<N template <class Parameters, typename Real> const auto& SpAccumulator<Parameters, linalg::GPU, Real>::get_single_measurement_sign_times_M_r_w() { single_measurement_M_r_w_.reset(new MFunction("single_function_M_r_w")); single_measurement_M_r_t_.synchronizeCopy(); finalizeFunction(single_measurement_M_r_t_, *single_measurement_M_r_w_); return *single_measurement_M_r_w_; } Loading
include/dca/phys/dca_step/cluster_solver/stdthread_qmci/stdthread_qmci_accumulator.hpp +22 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ public: void waitForQmciWalker(); void logPerConfigurationGreensFunction(const SpGreensFunction&) const; void logPerConfigurationMFunction(const MFunction&) const; void measure(); Loading Loading @@ -152,6 +153,27 @@ void StdThreadQmciAccumulator<QmciAccumulator, SpGreensFunction>::measure() { QmciAccumulator::measure(); } template <class QmciAccumulator, class MFunction> void StdThreadQmciAccumulator<QmciAccumulator, MFunction>::logPerConfigurationMFunction( const MFunction& mfunc) const { const bool print_to_log = writer_ && static_cast<bool>(*writer_); // File exists and it is open. if (print_to_log && stamping_period_ && (meas_id_ % stamping_period_) == 0) { if (writer_ && (writer_->isADIOS2() || concurrency_id_ == 0)) { // Induce copy for GPU MFunction const std::string stamp_name = "r_" + std::to_string(concurrency_id_) + "_meas_" + std::to_string(meas_id_) + "_w_" + std::to_string(walker_thread_id_); writer_->lock(); writer_->open_group("STQW_Configurations"); writer_->open_group(stamp_name); writer_->execute("MFunction", mfunc); writer_->close_group(); writer_->close_group(); writer_->unlock(); } } } template <class QmciAccumulator, class SpGreensFunction> void StdThreadQmciAccumulator<QmciAccumulator, SpGreensFunction>::logPerConfigurationGreensFunction( const SpGreensFunction& spf) const { Loading
include/dca/phys/dca_step/cluster_solver/stdthread_qmci/stdthread_qmci_cluster_solver.hpp +10 −6 Original line number Diff line number Diff line Loading @@ -86,8 +86,8 @@ public: private: void startWalker(int id); void startAccumulator(int id); void startWalkerAndAccumulator(int id); void startAccumulator(int id, const Parameters& parameters); void startWalkerAndAccumulator(int id, const Parameters& parameters); void initializeAndWarmUp(Walker& walker, int id, int walker_id); Loading Loading @@ -216,9 +216,9 @@ void StdThreadQmciClusterSolver<QmciSolver>::integrate() { if (thread_task_handler_.getTask(i) == "walker") futures.emplace_back(pool.enqueue(&ThisType::startWalker, this, i)); else if (thread_task_handler_.getTask(i) == "accumulator") futures.emplace_back(pool.enqueue(&ThisType::startAccumulator, this, i)); futures.emplace_back(pool.enqueue(&ThisType::startAccumulator, this, i, parameters_)); else if (thread_task_handler_.getTask(i) == "walker and accumulator") futures.emplace_back(pool.enqueue(&ThisType::startWalkerAndAccumulator, this, i)); futures.emplace_back(pool.enqueue(&ThisType::startWalkerAndAccumulator, this, i, parameters_)); else throw std::logic_error("Thread task is undefined."); } Loading Loading @@ -434,7 +434,7 @@ auto StdThreadQmciClusterSolver<QmciSolver>::computeSingleMeasurement_G_k_w(cons } template <class QmciSolver> void StdThreadQmciClusterSolver<QmciSolver>::startAccumulator(int id) { void StdThreadQmciClusterSolver<QmciSolver>::startAccumulator(int id, const Parameters& parameters) { Profiler::start_threading(id); auto accumulator_log = last_iteration_ ? BaseClass::writer_ : nullptr; Loading Loading @@ -465,6 +465,8 @@ void StdThreadQmciClusterSolver<QmciSolver>::startAccumulator(int id) { if (last_iteration_) { auto [M_r_w, sign] = getSingleMFunc(accumulator_obj); auto single_meas_G_k_w = computeSingleMeasurement_G_k_w(M_r_w, sign); if(parameters.per_measurement_MFunction()) accumulator_obj.logPerConfigurationMFunction(M_r_w); accumulator_obj.logPerConfigurationGreensFunction(single_meas_G_k_w); accumulator_obj.clearSingleMeasurement(); } Loading Loading @@ -499,7 +501,7 @@ void StdThreadQmciClusterSolver<QmciSolver>::startAccumulator(int id) { } template <class QmciSolver> void StdThreadQmciClusterSolver<QmciSolver>::startWalkerAndAccumulator(int id) { void StdThreadQmciClusterSolver<QmciSolver>::startWalkerAndAccumulator(int id, const Parameters& parameters) { Profiler::start_threading(id); // Create and warm a walker. Loading Loading @@ -533,6 +535,8 @@ void StdThreadQmciClusterSolver<QmciSolver>::startWalkerAndAccumulator(int id) { if (last_iteration_) { auto [M_r_w, sign] = getSingleMFunc(accumulator_obj); auto single_meas_G_k_w = computeSingleMeasurement_G_k_w(M_r_w, sign); if(parameters.per_measurement_MFunction()) accumulator_obj.logPerConfigurationMFunction(M_r_w); accumulator_obj.logPerConfigurationGreensFunction(single_meas_G_k_w); accumulator_obj.clearSingleMeasurement(); } Loading
include/dca/phys/parameters/mci_parameters.hpp +13 −5 Original line number Diff line number Diff line Loading @@ -78,7 +78,6 @@ public: std::fill(measurements_.begin(), measurements_.end(), measurements); } int get_walkers() const { return walkers_; } Loading Loading @@ -127,6 +126,9 @@ public: int stamping_period() const { return stamping_period_; } bool per_measurement_MFunction() const { return per_measurement_MFunction_; } protected: // Resize vector arguments to have the same size as the number of iterations. Loading Loading @@ -159,6 +161,7 @@ private: bool store_configuration_; DistType g4_distribution_; int stamping_period_ = 0; bool per_measurement_MFunction_ = false; }; template <typename Concurrency> Loading @@ -182,7 +185,7 @@ int MciParameters::getBufferSize(const Concurrency& concurrency) const { buffer_size += concurrency.get_buffer_size(store_configuration_); buffer_size += concurrency.get_buffer_size(g4_distribution_); buffer_size += concurrency.get_buffer_size(stamping_period_); buffer_size += concurrency.get_buffer_size(per_measurement_MFunction_); return buffer_size; } Loading @@ -206,6 +209,7 @@ void MciParameters::pack(const Concurrency& concurrency, char* buffer, int buffe concurrency.pack(buffer, buffer_size, position, store_configuration_); concurrency.pack(buffer, buffer_size, position, g4_distribution_); concurrency.pack(buffer, buffer_size, position, stamping_period_); concurrency.pack(buffer, buffer_size, position, per_measurement_MFunction_); } template <typename Concurrency> Loading @@ -228,6 +232,7 @@ void MciParameters::unpack(const Concurrency& concurrency, char* buffer, int buf concurrency.unpack(buffer, buffer_size, position, store_configuration_); concurrency.unpack(buffer, buffer_size, position, g4_distribution_); concurrency.unpack(buffer, buffer_size, position, stamping_period_); concurrency.unpack(buffer, buffer_size, position, per_measurement_MFunction_); } template <typename ReaderOrWriter> Loading Loading @@ -283,6 +288,9 @@ void MciParameters::readWrite(ReaderOrWriter& reader_or_writer) { reader_or_writer.execute("time-correlation-window", time_correlation_window_); reader_or_writer.execute("compute-G-correlation", compute_G_correlation_); reader_or_writer.execute("stamping-period", stamping_period_); reader_or_writer.execute("per-measurement-MFunction", per_measurement_MFunction_); reader_or_writer.execute("compute-G-correlation", compute_G_correlation_); reader_or_writer.execute("store-configuration", store_configuration_); // Read arguments for threaded solver. Loading