Commit 1facab9c authored by Giovanni La Mura's avatar Giovanni La Mura
Browse files

Set up the USE_OFFLOAD runtime option

parent a1042b5a
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -132,6 +132,8 @@ protected:
  double _accuracy_goal;
  //! \brief Maximum number of refinement iterations.
  int _ref_iters;
  //! \brief Flag to use target offload, if available.
  bool _offload_flag;

public:
  //! \brief Read-only view on number of spherical components.
@@ -196,6 +198,8 @@ public:
  const double& accuracy_goal = _accuracy_goal;
  //! \brief Read-only view on maximum number of refinement iterations.
  const int& ref_iters = _ref_iters;
  //! \brief Read-only view on flag to use target offload, if available.
  const bool& offload_flag = _offload_flag;
  
  /**
   * \brief Build a scattering geometry configuration structure.
+19 −2
Original line number Diff line number Diff line
@@ -111,6 +111,7 @@ GeometryConfiguration::GeometryConfiguration(
  _invert_mode = 0;
  _accuracy_goal = 1.0e-07;
  _ref_iters = 5;
  _offload_flag = true;
}

GeometryConfiguration::GeometryConfiguration(const GeometryConfiguration& rhs)
@@ -154,6 +155,7 @@ GeometryConfiguration::GeometryConfiguration(const GeometryConfiguration& rhs)
  _invert_mode = rhs._invert_mode;
  _accuracy_goal = rhs._accuracy_goal;
  _ref_iters = rhs._ref_iters;
  _offload_flag = rhs._offload_flag;
}

#ifdef MPI_VERSION
@@ -197,6 +199,7 @@ GeometryConfiguration::GeometryConfiguration(const mixMPI *mpidata) {
  MPI_Bcast(&_invert_mode, 1, MPI_SHORT, 0, MPI_COMM_WORLD);
  MPI_Bcast(&_accuracy_goal, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD);
  MPI_Bcast(&_ref_iters, 1, MPI_INT, 0, MPI_COMM_WORLD);
  MPI_Bcast(&_offload_flag, 1, MPI_C_BOOL, 0, MPI_COMM_WORLD);
}

void GeometryConfiguration::mpibcast(const mixMPI *mpidata) {
@@ -236,6 +239,7 @@ void GeometryConfiguration::mpibcast(const mixMPI *mpidata) {
  MPI_Bcast(&_invert_mode, 1, MPI_SHORT, 0, MPI_COMM_WORLD);
  MPI_Bcast(&_accuracy_goal, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD);
  MPI_Bcast(&_ref_iters, 1, MPI_INT, 0, MPI_COMM_WORLD);
  MPI_Bcast(&_offload_flag, 1, MPI_C_BOOL, 0, MPI_COMM_WORLD);
}
#endif

@@ -402,6 +406,13 @@ GeometryConfiguration* GeometryConfiguration::from_legacy(const std::string& fil
	conf->_host_ram_gb = ram_gb;
	is_parsed = true;
      }
      if (str_target.substr(0, 12).compare("USE_OFFLOAD=") == 0) {
	re = regex("[0-9]+");
	regex_search(str_target, m, re);
	short dyn_order_flag = (short)stoi(m.str());
	conf->_offload_flag = (dyn_order_flag > 0) ? true : false;
	is_parsed = true;
      }
    }
    if (str_target_size > 11) {
      if (str_target.substr(0, 11).compare("GPU_RAM_GB=") == 0) {
@@ -422,7 +433,7 @@ GeometryConfiguration* GeometryConfiguration::from_legacy(const std::string& fil
	if (str_inv_mode.compare("LU") == 0) inv_mode = RuntimeSettings::INV_MODE_LU;
	else if (str_inv_mode.compare("GESV") == 0) inv_mode = RuntimeSettings::INV_MODE_GESV;
	else if (str_inv_mode.compare("RBT") == 0) inv_mode = RuntimeSettings::INV_MODE_RBT;
	else if (str_inv_mode.compare("SVD") == 0) inv_mode = RuntimeSettings::INV_MODE_SVD;
	// else if (str_inv_mode.compare("SVD") == 0) inv_mode = RuntimeSettings::INV_MODE_SVD;
	else {
	  throw(UnrecognizedConfigurationException("ERROR: unrecognized option \"" + str_target + "\"!\n"));
	}
@@ -462,6 +473,9 @@ RuntimeSettings::RuntimeSettings() {
  _max_ref_iters = 5;
  _use_refinement = false;
  _use_offload = true;
#ifndef USE_TARGET_OFFLOAD
  _use_offload = false;
#endif // USE_TARGET_OFFLOAD
  logger = NULL;
}

@@ -472,7 +486,10 @@ RuntimeSettings::RuntimeSettings(GeometryConfiguration *gconf, Logger *ptr_logge
  _host_ram_gb = gconf->host_ram_gb;
  _max_ref_iters = gconf->ref_iters;
  _use_refinement = gconf->refine_flag;
  _use_offload = true; // TODO: make this option configurable.
  _use_offload = gconf->offload_flag;
#ifndef USE_TARGET_OFFLOAD
  _use_offload = false;
#endif // USE_TARGET_OFFLOAD
  logger = ptr_logger;
}
// >>> END OF RuntimeSettings CLASS IMPLEMENTATION <<<