From fd239bf9a64c9025a698a5083e83930b541753cc Mon Sep 17 00:00:00 2001 From: Andrey Alekseenko Date: Thu, 8 Oct 2020 08:51:36 +0000 Subject: [PATCH] Activate SYCL build on CI --- admin/gitlab-ci/global.gitlab-ci.yml | 5 +++ admin/gitlab-ci/gromacs.gitlab-ci.yml | 40 +++++++++++++++++++ src/gromacs/ewald/pme.cpp | 9 ++++- src/gromacs/gpu_utils/gpu_utils.cpp | 4 ++ .../hardware/device_management_sycl.cpp | 5 +-- src/gromacs/taskassignment/decidegpuusage.cpp | 2 +- 6 files changed, 60 insertions(+), 5 deletions(-) diff --git a/admin/gitlab-ci/global.gitlab-ci.yml b/admin/gitlab-ci/global.gitlab-ci.yml index c3a4bf30f7..2463fa96b4 100644 --- a/admin/gitlab-ci/global.gitlab-ci.yml +++ b/admin/gitlab-ci/global.gitlab-ci.yml @@ -52,6 +52,11 @@ CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF" CMAKE_GPU_OPTIONS: -DGMX_GPU=OpenCL +.use-sycl: + variables: + CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=OFF" + CMAKE_GPU_OPTIONS: -DGMX_GPU=SYCL + # Base definition for using gcc. .use-gcc:base: variables: diff --git a/admin/gitlab-ci/gromacs.gitlab-ci.yml b/admin/gitlab-ci/gromacs.gitlab-ci.yml index b96b584497..f5c9ea23ca 100644 --- a/admin/gitlab-ci/gromacs.gitlab-ci.yml +++ b/admin/gitlab-ci/gromacs.gitlab-ci.yml @@ -312,6 +312,16 @@ gromacs:oneapi-2021.1-beta09-opencl:configure: variables: COMPILER_MAJOR_VERSION: 2021 +gromacs:oneapi-2021.1-beta09-sycl:configure: + extends: + - .gromacs:base:configure + - .use-oneapi:base + - .use-sycl + - .rules:merge-and-post-merge-acceptance + image: gromacs/cmake-3.17.2-oneapi-2021.1-beta09-master + variables: + COMPILER_MAJOR_VERSION: 2021 + gromacs:clang-UBSAN:configure: extends: - .gromacs:base:configure @@ -540,6 +550,17 @@ gromacs:oneapi-2021.1-beta09-opencl:build: needs: - job: gromacs:oneapi-2021.1-beta09-opencl:configure +gromacs:oneapi-2021.1-beta09-sycl:build: + extends: + - .variables:default + - .gromacs:base:build + - .use-ccache + - .use-oneapi:base + - .rules:merge-and-post-merge-acceptance + image: gromacs/cmake-3.17.2-oneapi-2021.1-beta09-master + needs: + - job: gromacs:oneapi-2021.1-beta09-sycl:configure + gromacs:clang-9-mpi:build: extends: - .variables:default @@ -794,6 +815,15 @@ gromacs:oneapi-2021.1-beta09-opencl:test: needs: - job: gromacs:oneapi-2021.1-beta09-opencl:build +gromacs:oneapi-2021.1-beta09-sycl:test: + extends: + - .gromacs:base:test + - .use-oneapi:base + - .rules:post-merge-acceptance + image: gromacs/cmake-3.17.2-oneapi-2021.1-beta09-master + needs: + - job: gromacs:oneapi-2021.1-beta09-sycl:build + gromacs:clang-9-mpi:test: extends: - .gromacs:base:test @@ -948,6 +978,16 @@ gromacs:oneapi-2021.1-beta09-opencl:regressiontest: - job: gromacs:oneapi-2021.1-beta09-opencl:build - job: regressiontests:prepare +gromacs:oneapi-2021.1-beta09-sycl:regressiontest: + extends: + - .gromacs:base:regressiontest + - .use-oneapi:base + - .rules:post-merge-acceptance + image: gromacs/cmake-3.17.2-oneapi-2021.1-beta09-master + needs: + - job: gromacs:oneapi-2021.1-beta09-sycl:build + - job: regressiontests:prepare + gromacs:gcc-8-cuda-11.0:release:test: extends: - .gromacs:base:test diff --git a/src/gromacs/ewald/pme.cpp b/src/gromacs/ewald/pme.cpp index 912216964c..76051509ec 100644 --- a/src/gromacs/ewald/pme.cpp +++ b/src/gromacs/ewald/pme.cpp @@ -163,6 +163,10 @@ bool pme_gpu_supports_build(std::string* error) { errorReasons.emplace_back("a non-GPU build"); } + if (GMX_GPU_SYCL) + { + errorReasons.emplace_back("SYCL build"); // SYCL-TODO + } return addMessageIfNotSupported(errorReasons, error); } @@ -235,7 +239,10 @@ static bool pme_gpu_check_restrictions(const gmx_pme_t* pme, std::string* error) { errorReasons.emplace_back("non-GPU build of GROMACS"); } - + if (GMX_GPU_SYCL) + { + errorReasons.emplace_back("SYCL build of GROMACS"); // SYCL-TODO + } return addMessageIfNotSupported(errorReasons, error); } diff --git a/src/gromacs/gpu_utils/gpu_utils.cpp b/src/gromacs/gpu_utils/gpu_utils.cpp index 1379ba83ce..eb26ce0a8e 100644 --- a/src/gromacs/gpu_utils/gpu_utils.cpp +++ b/src/gromacs/gpu_utils/gpu_utils.cpp @@ -79,5 +79,9 @@ bool buildSupportsNonbondedOnGpu(std::string* error) { errorReasons.emplace_back("non-GPU build of GROMACS"); } + if (GMX_GPU_SYCL) + { + errorReasons.emplace_back("SYCL build of GROMACS"); + } return addMessageIfNotSupported(errorReasons, error); } diff --git a/src/gromacs/hardware/device_management_sycl.cpp b/src/gromacs/hardware/device_management_sycl.cpp index 236c2d2ab3..0c142e0001 100644 --- a/src/gromacs/hardware/device_management_sycl.cpp +++ b/src/gromacs/hardware/device_management_sycl.cpp @@ -118,10 +118,9 @@ static DeviceStatus isDeviceCompatible(const cl::sycl::device& syclDevice) static bool isDeviceFunctional(const cl::sycl::device& syclDevice, std::string* errorMessage) { static const int numThreads = 8; - cl::sycl::queue queue; try { - queue = cl::sycl::queue(syclDevice); + cl::sycl::queue queue(syclDevice); cl::sycl::buffer buffer(numThreads); queue.submit([&](cl::sycl::handler& cgh) { auto d_buffer = buffer.get_access(cgh); @@ -202,7 +201,7 @@ std::vector> findDevices() deviceInfos[i]->syclDevice = syclDevice; deviceInfos[i]->status = checkDevice(i, *deviceInfos[i]); deviceInfos[i]->deviceVendor = - getDeviceVendor(syclDevice.get_info()); + getDeviceVendor(syclDevice.get_info().c_str()); } return deviceInfos; } diff --git a/src/gromacs/taskassignment/decidegpuusage.cpp b/src/gromacs/taskassignment/decidegpuusage.cpp index 3ec7ce027e..020e6187c1 100644 --- a/src/gromacs/taskassignment/decidegpuusage.cpp +++ b/src/gromacs/taskassignment/decidegpuusage.cpp @@ -319,7 +319,7 @@ bool decideWhetherToUseGpusForNonbonded(const TaskTarget nonbondedTarge // If we get here, then the user permitted GPUs, which we should // use for nonbonded interactions. - return gpusWereDetected; + return buildSupportsNonbondedOnGpu && gpusWereDetected; } bool decideWhetherToUseGpusForPme(const bool useGpuForNonbonded, -- 2.22.0