# include <fftw3.h>
#endif
-#ifdef HAVE_LIBMKL
+#if HAVE_LIBMKL
# include <mkl.h>
#endif
#include "gromacs/utility/textwriter.h"
#include "cuda_version_information.h"
+#include "sycl_version_information.h"
namespace
{
"Aldert van Buuren",
"Rudi van Drunen",
"Anton Feenstra",
+ "Oliver Fleetwood",
+ "Gaurav Garg",
"Gilles Gouaillardet",
"Alan Gray",
"Gerrit Groenhof",
static const char* const CopyrightText[] = {
"Copyright (c) 1991-2000, University of Groningen, The Netherlands.",
"Copyright (c) 2001-2019, The GROMACS development team at",
- "Uppsala University, Stockholm University and", "the Royal Institute of Technology, Sweden.",
+ "Uppsala University, Stockholm University and",
+ "the Royal Institute of Technology, Sweden.",
"check out http://www.gromacs.org for more information."
};
}
}
-// Construct a string that describes the library that provides FFT support to this build
-const char* getFftDescriptionString()
+//! Construct a string that describes the library that provides CPU FFT support to this build
+const char* getCpuFftDescriptionString()
{
// Define the FFT description string
#if GMX_FFT_FFTW3 || GMX_FFT_ARMPL_FFTW3
#endif
};
+//! Construct a string that describes the library that provides GPU FFT support to this build
+const char* getGpuFftDescriptionString()
+{
+ if (GMX_GPU)
+ {
+ if (GMX_GPU_CUDA)
+ {
+ return "cuFFT";
+ }
+ else if (GMX_GPU_OPENCL)
+ {
+ return "clFFT";
+ }
+ else if (GMX_GPU_SYCL)
+ {
+ return "unknown";
+ }
+ else
+ {
+ GMX_RELEASE_ASSERT(false, "Unknown GPU configuration");
+ return "impossible";
+ }
+ }
+ else
+ {
+ return "none";
+ }
+};
+
void gmx_print_version_info(gmx::TextWriter* writer)
{
writer->writeLine(formatString("GROMACS version: %s", gmx_version()));
#if GMX_DOUBLE
writer->writeLine("Precision: double");
#else
- writer->writeLine("Precision: single");
+ writer->writeLine("Precision: mixed");
#endif
writer->writeLine(formatString("Memory model: %u bit", static_cast<unsigned>(8 * sizeof(void*))));
#if GMX_THREAD_MPI
writer->writeLine("MPI library: thread_mpi");
#elif GMX_MPI
+# if HAVE_CUDA_AWARE_MPI
+ writer->writeLine("MPI library: MPI (CUDA-aware)");
+# else
writer->writeLine("MPI library: MPI");
+# endif
#else
writer->writeLine("MPI library: none");
#endif
#endif
writer->writeLine(formatString("GPU support: %s", getGpuImplementationString()));
writer->writeLine(formatString("SIMD instructions: %s", GMX_SIMD_STRING));
- writer->writeLine(formatString("FFT library: %s", getFftDescriptionString()));
+ writer->writeLine(formatString("CPU FFT library: %s", getCpuFftDescriptionString()));
+ writer->writeLine(formatString("GPU FFT library: %s", getGpuFftDescriptionString()));
#if GMX_TARGET_X86
writer->writeLine(formatString("RDTSCP usage: %s", GMX_USE_RDTSCP ? "enabled" : "disabled"));
#endif
#if HAVE_EXTRAE
unsigned major, minor, revision;
Extrae_get_version(&major, &minor, &revision);
- writer->writeLine(formatString("Tracing support: enabled. Using Extrae-%d.%d.%d", major,
- minor, revision));
+ writer->writeLine(formatString(
+ "Tracing support: enabled. Using Extrae-%d.%d.%d", major, minor, revision));
#else
writer->writeLine("Tracing support: disabled");
#endif
* them. Can wait for later, as the master branch has ready code to do all
* that. */
writer->writeLine(formatString("C compiler: %s", BUILD_C_COMPILER));
- writer->writeLine(formatString("C compiler flags: %s %s", BUILD_CFLAGS,
- CMAKE_BUILD_CONFIGURATION_C_FLAGS));
+ writer->writeLine(formatString(
+ "C compiler flags: %s %s", BUILD_CFLAGS, CMAKE_BUILD_CONFIGURATION_C_FLAGS));
writer->writeLine(formatString("C++ compiler: %s", BUILD_CXX_COMPILER));
- writer->writeLine(formatString("C++ compiler flags: %s %s", BUILD_CXXFLAGS,
- CMAKE_BUILD_CONFIGURATION_CXX_FLAGS));
-#ifdef HAVE_LIBMKL
+ writer->writeLine(formatString(
+ "C++ compiler flags: %s %s", BUILD_CXXFLAGS, CMAKE_BUILD_CONFIGURATION_CXX_FLAGS));
+#if HAVE_LIBMKL
/* MKL might be used for LAPACK/BLAS even if FFTs use FFTW, so keep it separate */
- writer->writeLine(formatString("Linked with Intel MKL version %d.%d.%d.", __INTEL_MKL__,
- __INTEL_MKL_MINOR__, __INTEL_MKL_UPDATE__));
+ writer->writeLine(formatString(
+ "Intel MKL version: %d.%d.%d", __INTEL_MKL__, __INTEL_MKL_MINOR__, __INTEL_MKL_UPDATE__));
#endif
#if GMX_GPU_OPENCL
writer->writeLine(formatString("OpenCL include dir: %s", OPENCL_INCLUDE_DIR));
#endif
#if GMX_GPU_CUDA
writer->writeLine(formatString("CUDA compiler: %s", CUDA_COMPILER_INFO));
- writer->writeLine(formatString("CUDA compiler flags:%s %s", CUDA_COMPILER_FLAGS,
- CMAKE_BUILD_CONFIGURATION_CXX_FLAGS));
+ writer->writeLine(formatString(
+ "CUDA compiler flags:%s %s", CUDA_COMPILER_FLAGS, CMAKE_BUILD_CONFIGURATION_CXX_FLAGS));
writer->writeLine("CUDA driver: " + gmx::getCudaDriverVersionString());
writer->writeLine("CUDA runtime: " + gmx::getCudaRuntimeVersionString());
#endif
+#if GMX_SYCL_DPCPP
+ writer->writeLine(formatString("SYCL DPC++ flags: %s", SYCL_DPCPP_COMPILER_FLAGS));
+ writer->writeLine("SYCL DPC++ version: " + gmx::getSyclCompilerVersion());
+#endif
+#if GMX_SYCL_HIPSYCL
+ writer->writeLine(formatString("hipSYCL launcher: %s", SYCL_HIPSYCL_COMPILER_LAUNCHER));
+ writer->writeLine(formatString("hipSYCL flags: %s", SYCL_HIPSYCL_COMPILER_FLAGS));
+ writer->writeLine(formatString("hipSYCL targets: %s", SYCL_HIPSYCL_TARGETS));
+ writer->writeLine("hipSYCL version: " + gmx::getSyclCompilerVersion());
+#endif
}
//! \endcond
// necessary to read stuff above the copyright notice.
// The line above the copyright notice puts the copyright notice is
// context, though.
- writer->writeLine(formatString("%sGROMACS: %s, version %s%s%s", prefix, name,
- gmx_version(), precisionString, suffix));
+ writer->writeLine(formatString(
+ "%sGROMACS: %s, version %s%s%s", prefix, name, gmx_version(), precisionString, suffix));
}
const char* const binaryPath = programContext.fullBinaryPath();
if (!gmx::isNullOrEmpty(binaryPath))
const gmx::InstallationPrefixInfo installPrefix = programContext.installationPrefix();
if (!gmx::isNullOrEmpty(installPrefix.path))
{
- writer->writeLine(formatString("%sData prefix: %s%s%s", prefix, installPrefix.path,
- installPrefix.bSourceLayout ? " (source tree)" : "", suffix));
+ writer->writeLine(formatString("%sData prefix: %s%s%s",
+ prefix,
+ installPrefix.path,
+ installPrefix.bSourceLayout ? " (source tree)" : "",
+ suffix));
}
const std::string workingDir = Path::getWorkingDirectory();
if (!workingDir.empty())
const char* const commandLine = programContext.commandLine();
if (!gmx::isNullOrEmpty(commandLine))
{
- writer->writeLine(formatString("%sCommand line:%s\n%s %s%s", prefix, suffix, prefix,
- commandLine, suffix));
+ writer->writeLine(formatString(
+ "%sCommand line:%s\n%s %s%s", prefix, suffix, prefix, commandLine, suffix));
}
if (settings.bExtendedInfo_)
{