Commit e9effccf authored by gbalduzz's avatar gbalduzz
Browse files

Compute single particle greens function always in double precision.

parent 4e34d609
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -237,12 +237,12 @@ endif()

################################################################################
# Single precision measurements
# TODO: change to ON by default after merging and testing the two particle accumulator.
option(DCA_WITH_SINGLE_PRECISION_MEASUREMENTS "Measure in single precision." OFF)
mark_as_advanced(DCA_WITH_SINGLE_PRECISION_MEASUREMENTS)
# TODO: maybe change to ON by default.
option(DCA_WITH_SINGLE_PRECISION_TP_MEASUREMENTS "Measure in single precision." OFF)
mark_as_advanced(DCA_WITH_SINGLE_PRECISION_TP_MEASUREMENTS)

if (DCA_WITH_SINGLE_PRECISION_MEASUREMENTS)
  dca_add_config_define(DCA_WITH_SINGLE_PRECISION_MEASUREMENTS)
if (DCA_WITH_SINGLE_PRECISION_TP_MEASUREMENTS)
  dca_add_config_define(DCA_WITH_SINGLE_PRECISION_TP_MEASUREMENTS)
endif()

################################################################################
@@ -278,9 +278,9 @@ else()
endif()

if (DCA_WITH_SINGLE_PRECISION_MEASUREMENTS)
  set(MC_ACCUMULATION_SCALAR float)
  set(TP_ACCUMULATION_SCALAR float)
else()
  set(MC_ACCUMULATION_SCALAR double)
  set(TP_ACCUMULATION_SCALAR double)
endif()

option(DCA_WITH_MANAGED_MEMORY "Use managed memory allocator." OFF)
+1 −1
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@ namespace config {
// dca::config::

struct AccumulationOptions {
  using MCAccumulationScalar = @MC_ACCUMULATION_SCALAR@;
  using TPAccumulationScalar = @TP_ACCUMULATION_SCALAR@;

  static constexpr bool memory_savings = @MEMORY_SAVINGS@;

+1 −2
Original line number Diff line number Diff line
@@ -40,8 +40,7 @@ struct CMakeOptions {
  static const std::string dca_profiler;
  static const std::string dca_with_autotuning;
  static const std::string dca_with_gnuplot;
  static const std::string dca_with_reduced_vertex_function;
  static const std::string dca_with_single_precision_measurements;
  static const std::string dca_with_single_precision_tp_measurements;
  static const std::string dca_with_memory_savings;
  static const std::string dca_with_managed_memory;

+1 −1
Original line number Diff line number Diff line
@@ -64,7 +64,7 @@ public:
  using Concurrency = typename Parameters::concurrency_type;
  using Lattice = typename Parameters::lattice_type;
  constexpr static int DIMENSION = Lattice::DIMENSION;
  using TpAccumulatorScalar = typename Parameters::MC_measurement_scalar_type;
  using TpAccumulatorScalar = typename Parameters::TP_measurement_scalar_type;

  using TDmn = func::dmn_0<domains::time_domain>;
  using WDmn = func::dmn_0<domains::frequency_domain>;
+6 −7
Original line number Diff line number Diff line
@@ -165,9 +165,8 @@ private:
  void accumulate_single_particle_quantities();

  void accumulate_equal_time_quantities();
  using AccumType = typename Parameters::MC_measurement_scalar_type;
  void accumulate_equal_time_quantities(const std::array<linalg::Matrix<AccumType, linalg::GPU>, 2>& M);
  void accumulate_equal_time_quantities(const std::array<linalg::Matrix<AccumType, linalg::CPU>, 2>& M);
  void accumulate_equal_time_quantities(const std::array<linalg::Matrix<double, linalg::GPU>, 2>& M);
  void accumulate_equal_time_quantities(const std::array<linalg::Matrix<double, linalg::CPU>, 2>& M);

  void accumulate_two_particle_quantities();

@@ -190,8 +189,8 @@ protected:

  std::array<std::vector<vertex_singleton_type>, 2> hs_configuration_;

  std::array<dca::linalg::Matrix<AccumType, device_t>, 2> M_;
  std::array<dca::linalg::Matrix<AccumType, linalg::CPU>, 2> M_host_;
  std::array<dca::linalg::Matrix<double, device_t>, 2> M_;
  std::array<dca::linalg::Matrix<double, linalg::CPU>, 2> M_host_;

  func::function<double, func::dmn_0<domains::numerical_error_domain>> error;
  func::function<double, func::dmn_0<Feynman_expansion_order_domain>> visited_expansion_order_k;
@@ -460,7 +459,7 @@ void CtauxAccumulator<device_t, Parameters, Data>::accumulate_equal_time_quantit

template <dca::linalg::DeviceType device_t, class Parameters, class Data>
void CtauxAccumulator<device_t, Parameters, Data>::accumulate_equal_time_quantities(
    const std::array<linalg::Matrix<AccumType, linalg::GPU>, 2>& M) {
    const std::array<linalg::Matrix<double, linalg::GPU>, 2>& M) {
  for (int s = 0; s < 2; ++s)
    M_host_[s].setAsync(M[s], thread_id, s);
  for (int s = 0; s < 2; ++s)
@@ -471,7 +470,7 @@ void CtauxAccumulator<device_t, Parameters, Data>::accumulate_equal_time_quantit

template <dca::linalg::DeviceType device_t, class Parameters, class Data>
void CtauxAccumulator<device_t, Parameters, Data>::accumulate_equal_time_quantities(
    const std::array<linalg::Matrix<AccumType, linalg::CPU>, 2>& M) {
    const std::array<linalg::Matrix<double, linalg::CPU>, 2>& M) {
  MC_two_particle_equal_time_accumulator_obj.compute_G_r_t(hs_configuration_[0], M[0],
                                                           hs_configuration_[1], M[1]);

Loading