support running with Kokkos + OpenMP

This commit is contained in:
Axel Kohlmeyer
2023-08-02 21:06:30 -04:00
parent 07b36025e2
commit f6732f028c
4 changed files with 29 additions and 2 deletions

View File

@ -665,8 +665,14 @@ void LammpsGui::start_lammps()
lammps_args.push_back(mystrdup("-pk"));
lammps_args.push_back(mystrdup("gpu"));
lammps_args.push_back(mystrdup("0"));
} else if (accel == AcceleratorTab::Kokkos) {
lammps_args.push_back(mystrdup("-kokkos"));
lammps_args.push_back(mystrdup("on"));
lammps_args.push_back(mystrdup("t"));
lammps_args.push_back(mystrdup(std::to_string(nthreads)));
lammps_args.push_back(mystrdup("-suffix"));
lammps_args.push_back(mystrdup("kk"));
}
if (settings.value("echo", "0").toInt()) {
lammps_args.push_back(mystrdup("-echo"));
lammps_args.push_back(mystrdup("screen"));

View File

@ -160,6 +160,17 @@ bool LammpsWrapper::config_has_package(const char *package) const
#endif
}
bool LammpsWrapper::config_accelerator(const char *package, const char *category,
const char *setting) const
{
#if defined(LAMMPS_GUI_USE_PLUGIN)
return ((liblammpsplugin_t *)plugin_handle)->config_accelerator(package, category, setting) !=
0;
#else
return lammps_config_accelerator(package, category, setting) != 0;
#endif
}
bool LammpsWrapper::has_gpu_device() const
{
#if defined(LAMMPS_GUI_USE_PLUGIN)

View File

@ -34,6 +34,7 @@ public:
bool is_running();
bool has_error() const;
int get_last_error_message(char *errorbuf, int buflen);
bool config_accelerator(const char *package, const char *category, const char *setting) const;
bool config_has_package(const char *pkg) const;
bool has_gpu_device() const;

View File

@ -159,7 +159,16 @@ AcceleratorTab::AcceleratorTab(QSettings *_settings, LammpsWrapper *_lammps, QWi
openmp->setObjectName("openmp");
intel->setEnabled(lammps->config_has_package("INTEL"));
intel->setObjectName("intel");
kokkos->setEnabled(lammps->config_has_package("KOKKOS"));
// Kokkos support only works with OpenMP for now.
if (lammps->config_has_package("KOKKOS")) {
if (lammps->config_accelerator("KOKKOS", "api", "openmp") &&
!(lammps->config_accelerator("KOKKOS", "api", "cuda") ||
lammps->config_accelerator("KOKKOS", "api", "hip") ||
lammps->config_accelerator("KOKKOS", "api", "sycl")))
kokkos->setEnabled(true);
else
kokkos->setEnabled(false);
}
kokkos->setObjectName("kokkos");
gpu->setEnabled(lammps->config_has_package("GPU") && lammps->has_gpu_device());
gpu->setObjectName("gpu");