Skip to content

Add a new SYCL backend for supporting Intel GPUs and embedded GPUs #197

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 18 commits into from
Jul 11, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 17 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ option(MGARD_ENABLE_OPENMP "Enable OpenMP support." OFF)
option(MGARD_ENABLE_CUDA "Enable CUDA support" OFF)
option(MGARD_ENABLE_SERIAL "Enable SERIAL support" ON)
option(MGARD_ENABLE_HIP "Enable HIP support" OFF)
option(MGARD_ENABLE_SYCL "Enable SYCL support" OFF)
option(MGARD_ENABLE_LEGACY_CUDA "Enable legacy CUDA support" OFF)

option(MGARD_ENABLE_CLI "Build executable." OFF)
Expand Down Expand Up @@ -88,11 +89,18 @@ endif()

if (MGARD_ENABLE_SERIAL OR
MGARD_ENABLE_CUDA OR
MGARD_ENABLE_HIP )
MGARD_ENABLE_HIP OR
MGARD_ENABLE_SYCL)

if(MGARD_ENABLE_SYCL)
set(MGARD_ENABLE_SERIAL OFF)
endif()

set (CMAKE_CXX_STANDARD 17)
set (CMAKE_CXX_STANDARD_REQUIRED ON)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w")

include(MgardXGenerateSource)
add_subdirectory (src/mgard-x)
add_subdirectory (include/mgard-x)
add_subdirectory (include/mgard-x/MDR)
Expand Down Expand Up @@ -178,6 +186,12 @@ if (MGARD_ENABLE_HIP)
set_source_files_properties(${MGARD_X_HIP_SRC} PROPERTIES LANGUAGE HIP)
endif()

if (MGARD_ENABLE_SYCL)
# No need to link with sycl libraries for now
# find_package(IntelDPCPP REQUIRED)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w")
endif()

find_package(ZLIB REQUIRED)
find_package(zstd)

Expand Down Expand Up @@ -271,6 +285,7 @@ target_sources(
${MGARD_X_SERIAL_SRC}
${MGARD_X_CUDA_SRC}
${MGARD_X_HIP_SRC}
${MGARD_X_SYCL_SRC}
)

set_target_properties(mgard-library PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON)
Expand Down Expand Up @@ -450,6 +465,7 @@ if (MGARD_ENABLE_HIP)
message(STATUS "HIP Arch: ${CMAKE_HIP_ARCHITECTURES}")
list(POP_BACK CMAKE_MESSAGE_INDENT)
endif()
message(STATUS "SYCL: ${MGARD_ENABLE_SYCL}")
list(POP_BACK CMAKE_MESSAGE_INDENT)
message(STATUS "LEGACY CUDA: ${MGARD_ENABLE_LEGACY_CUDA}")
if (MGARD_ENABLE_LEGACY_CUDA)
Expand Down
82 changes: 82 additions & 0 deletions build_scripts/build_mgard_cuda_legacy.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
#!/bin/sh

# Copyright 2021, Oak Ridge National Laboratory.
# MGARD-X: MultiGrid Adaptive Reduction of Data Portable across GPUs and CPUs
# Author: Jieyang Chen ([email protected])
# Date: April 2, 2021
# Script for building MGARD-X

set -e
set -x

######## User Configurations ########
# Source directory
mgard_x_src_dir=.
# Build directory
build_dir=./build-cuda-turing
# Number of processors used for building
num_build_procs=8
# Installtaion directory
install_dir=./install-cuda-turing


#build NVCOMP
nvcomp_dir=${build_dir}/nvcomp
nvcomp_src_dir=${nvcomp_dir}/src
nvcomp_build_dir=${nvcomp_dir}/build
nvcomp_install_dir=${install_dir}
if [ ! -d "${nvcomp_src_dir}" ]; then
git clone -b v2.2.0 https://github.com/NVIDIA/nvcomp.git ${nvcomp_src_dir}
fi
mkdir -p ${nvcomp_build_dir}
cmake -S ${nvcomp_src_dir} -B ${nvcomp_build_dir}\
-DCMAKE_INSTALL_PREFIX=${nvcomp_install_dir}
cmake --build ${nvcomp_build_dir} -j ${num_build_procs}
cmake --install ${nvcomp_build_dir}

#build ZSTD
zstd_dir=${build_dir}/zstd
zstd_src_dir=${zstd_dir}/src
zstd_build_dir=${zstd_dir}/build
zstd_install_dir=${install_dir}
if [ ! -d "${zstd_src_dir}" ]; then
git clone -b v1.5.0 https://github.com/facebook/zstd.git ${zstd_src_dir}
fi
mkdir -p ${zstd_build_dir}
cmake -S ${zstd_src_dir}/build/cmake -B ${zstd_build_dir}\
-DZSTD_MULTITHREAD_SUPPORT=ON\
-DCMAKE_INSTALL_LIBDIR=lib\
-DCMAKE_INSTALL_PREFIX=${zstd_install_dir}
cmake --build ${zstd_build_dir} -j ${num_build_procs}
cmake --install ${zstd_build_dir}

#build Protobuf
protobuf_dir=${build_dir}/protobuf
protobuf_src_dir=${protobuf_dir}/src
protobuf_build_dir=${protobuf_dir}/build
protobuf_install_dir=${install_dir}
if [ ! -d "${protobuf_src_dir}" ]; then
git clone -b v3.19.4 --recurse-submodules https://github.com/protocolbuffers/protobuf.git ${protobuf_src_dir}
fi
mkdir -p ${protobuf_build_dir}
cmake -S ${protobuf_src_dir}/cmake -B ${protobuf_build_dir}\
-Dprotobuf_BUILD_SHARED_LIBS=ON\
-DCMAKE_INSTALL_PREFIX=${protobuf_install_dir}
cmake --build ${protobuf_build_dir} -j ${num_build_procs}
cmake --install ${protobuf_build_dir}


#build MGARD
mgard_x_build_dir=${build_dir}/mgard
mgard_x_install_dir=${install_dir}
mkdir -p ${mgard_x_build_dir}
cmake -S ${mgard_x_src_dir} -B ${mgard_x_build_dir} \
-DCMAKE_PREFIX_PATH="${nvcomp_install_dir};${zstd_install_dir}/lib/cmake/zstd;${protobuf_install_dir}"\
-DMGARD_ENABLE_SERIAL=OFF\
-DMGARD_ENABLE_LEGACY_CUDA=ON\
-DCMAKE_CUDA_ARCHITECTURES="75"\
-DMGARD_ENABLE_DOCS=OFF\
-DCMAKE_BUILD_TYPE=Release\
-DCMAKE_INSTALL_PREFIX=${mgard_x_install_dir}
cmake --build ${mgard_x_build_dir} -j ${num_build_procs}
cmake --install ${mgard_x_build_dir}
2 changes: 1 addition & 1 deletion build_scripts/build_mgard_cuda_turing.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ mgard_x_src_dir=.
# Build directory
build_dir=./build-cuda-turing
# Number of processors used for building
num_build_procs=8
num_build_procs=16
# Installtaion directory
install_dir=./install-cuda-turing

Expand Down
74 changes: 74 additions & 0 deletions build_scripts/build_mgard_sycl_gen9.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#!/bin/sh

# Copyright 2021, Oak Ridge National Laboratory.
# MGARD-X: MultiGrid Adaptive Reduction of Data Portable across GPUs and CPUs
# Author: Jieyang Chen ([email protected])
# Date: April 2, 2021
# Script for building MGARD-X

set -e
set -x

######## User Configurations ########
# Source directory
mgard_x_src_dir=.
# Build directory
build_dir=./build-sycl-gen9
# Number of processors used for building
num_build_procs=8
# Installtaion directory
install_dir=./install-sycl-gen9


#build ZSTD
zstd_dir=${build_dir}/zstd
zstd_src_dir=${zstd_dir}/src
zstd_build_dir=${zstd_dir}/build
zstd_install_dir=${install_dir}
if [ ! -d "${zstd_src_dir}" ]; then
git clone -b v1.5.0 https://github.com/facebook/zstd.git ${zstd_src_dir}
fi
mkdir -p ${zstd_build_dir}
cmake -S ${zstd_src_dir}/build/cmake -B ${zstd_build_dir}\
-DZSTD_MULTITHREAD_SUPPORT=ON\
-DCMAKE_INSTALL_LIBDIR=lib\
-DCMAKE_CXX_COMPILER=icpx\
-DCMAKE_C_COMPILER=icx\
-DCMAKE_INSTALL_PREFIX=${zstd_install_dir}
cmake --build ${zstd_build_dir} -j ${num_build_procs}
cmake --install ${zstd_build_dir}

#build Protobuf
protobuf_dir=${build_dir}/protobuf
protobuf_src_dir=${protobuf_dir}/src
protobuf_build_dir=${protobuf_dir}/build
protobuf_install_dir=${install_dir}
if [ ! -d "${protobuf_src_dir}" ]; then
git clone -b v3.19.4 --recurse-submodules https://github.com/protocolbuffers/protobuf.git ${protobuf_src_dir}
fi
mkdir -p ${protobuf_build_dir}
cmake -S ${protobuf_src_dir}/cmake -B ${protobuf_build_dir}\
-Dprotobuf_BUILD_SHARED_LIBS=ON\
-DCMAKE_CXX_COMPILER=icpx\
-DCMAKE_C_COMPILER=icx\
-DCMAKE_INSTALL_PREFIX=${protobuf_install_dir}
cmake --build ${protobuf_build_dir} -j ${num_build_procs}
cmake --install ${protobuf_build_dir}


#build MGARD
mgard_x_build_dir=${build_dir}/mgard
mgard_x_install_dir=${install_dir}
mkdir -p ${mgard_x_build_dir}
cmake -S ${mgard_x_src_dir} -B ${mgard_x_build_dir} \
-DCMAKE_PREFIX_PATH="${zstd_install_dir}/lib/cmake/zstd;${protobuf_install_dir}"\
-DMGARD_ENABLE_SERIAL=OFF\
-DMGARD_ENABLE_SYCL=ON\
-DCMAKE_CXX_COMPILER=icpx\
-DCMAKE_C_COMPILER=icx\
-DCMAKE_CXX_FLAGS="-O2 -fsycl -fsycl-targets=spir64_gen -Xsycl-target-backend \"-device gen9\""\
-DMGARD_ENABLE_DOCS=OFF\
-DCMAKE_BUILD_TYPE=Release\
-DCMAKE_INSTALL_PREFIX=${mgard_x_install_dir}
cmake --build ${mgard_x_build_dir} -j ${num_build_procs}
cmake --install ${mgard_x_build_dir}
74 changes: 74 additions & 0 deletions build_scripts/build_mgard_sycl_x86.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#!/bin/sh

# Copyright 2021, Oak Ridge National Laboratory.
# MGARD-X: MultiGrid Adaptive Reduction of Data Portable across GPUs and CPUs
# Author: Jieyang Chen ([email protected])
# Date: April 2, 2021
# Script for building MGARD-X

set -e
set -x

######## User Configurations ########
# Source directory
mgard_x_src_dir=.
# Build directory
build_dir=./build-sycl-x86
# Number of processors used for building
num_build_procs=8
# Installtaion directory
install_dir=./install-sycl-x86


#build ZSTD
zstd_dir=${build_dir}/zstd
zstd_src_dir=${zstd_dir}/src
zstd_build_dir=${zstd_dir}/build
zstd_install_dir=${install_dir}
if [ ! -d "${zstd_src_dir}" ]; then
git clone -b v1.5.0 https://github.com/facebook/zstd.git ${zstd_src_dir}
fi
mkdir -p ${zstd_build_dir}
cmake -S ${zstd_src_dir}/build/cmake -B ${zstd_build_dir}\
-DZSTD_MULTITHREAD_SUPPORT=ON\
-DCMAKE_INSTALL_LIBDIR=lib\
-DCMAKE_CXX_COMPILER=icpx\
-DCMAKE_C_COMPILER=icx\
-DCMAKE_INSTALL_PREFIX=${zstd_install_dir}
cmake --build ${zstd_build_dir} -j ${num_build_procs}
cmake --install ${zstd_build_dir}

#build Protobuf
protobuf_dir=${build_dir}/protobuf
protobuf_src_dir=${protobuf_dir}/src
protobuf_build_dir=${protobuf_dir}/build
protobuf_install_dir=${install_dir}
if [ ! -d "${protobuf_src_dir}" ]; then
git clone -b v3.19.4 --recurse-submodules https://github.com/protocolbuffers/protobuf.git ${protobuf_src_dir}
fi
mkdir -p ${protobuf_build_dir}
cmake -S ${protobuf_src_dir}/cmake -B ${protobuf_build_dir}\
-Dprotobuf_BUILD_SHARED_LIBS=ON\
-DCMAKE_CXX_COMPILER=icpx\
-DCMAKE_C_COMPILER=icx\
-DCMAKE_INSTALL_PREFIX=${protobuf_install_dir}
cmake --build ${protobuf_build_dir} -j ${num_build_procs}
cmake --install ${protobuf_build_dir}


#build MGARD
mgard_x_build_dir=${build_dir}/mgard
mgard_x_install_dir=${install_dir}
mkdir -p ${mgard_x_build_dir}
cmake -S ${mgard_x_src_dir} -B ${mgard_x_build_dir} \
-DCMAKE_PREFIX_PATH="${zstd_install_dir}/lib/cmake/zstd;${protobuf_install_dir}"\
-DMGARD_ENABLE_SERIAL=OFF\
-DMGARD_ENABLE_SYCL=ON\
-DCMAKE_CXX_COMPILER=icpx\
-DCMAKE_C_COMPILER=icx\
-DCMAKE_CXX_FLAGS="-fsycl -fsycl-targets=x86_64"\
-DMGARD_ENABLE_DOCS=OFF\
-DCMAKE_BUILD_TYPE=Release\
-DCMAKE_INSTALL_PREFIX=${mgard_x_install_dir}
cmake --build ${mgard_x_build_dir} -j ${num_build_procs}
cmake --install ${mgard_x_build_dir}
74 changes: 74 additions & 0 deletions build_scripts/build_mgard_sycl_xehp.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#!/bin/sh

# Copyright 2021, Oak Ridge National Laboratory.
# MGARD-X: MultiGrid Adaptive Reduction of Data Portable across GPUs and CPUs
# Author: Jieyang Chen ([email protected])
# Date: April 2, 2021
# Script for building MGARD-X

set -e
set -x

######## User Configurations ########
# Source directory
mgard_x_src_dir=.
# Build directory
build_dir=./build-sycl-xehp
# Number of processors used for building
num_build_procs=8
# Installtaion directory
install_dir=./install-sycl-xehp


#build ZSTD
zstd_dir=${build_dir}/zstd
zstd_src_dir=${zstd_dir}/src
zstd_build_dir=${zstd_dir}/build
zstd_install_dir=${install_dir}
if [ ! -d "${zstd_src_dir}" ]; then
git clone -b v1.5.0 https://github.com/facebook/zstd.git ${zstd_src_dir}
fi
mkdir -p ${zstd_build_dir}
cmake -S ${zstd_src_dir}/build/cmake -B ${zstd_build_dir}\
-DZSTD_MULTITHREAD_SUPPORT=ON\
-DCMAKE_INSTALL_LIBDIR=lib\
-DCMAKE_CXX_COMPILER=icpx\
-DCMAKE_C_COMPILER=icx\
-DCMAKE_INSTALL_PREFIX=${zstd_install_dir}
cmake --build ${zstd_build_dir} -j ${num_build_procs}
cmake --install ${zstd_build_dir}

#build Protobuf
protobuf_dir=${build_dir}/protobuf
protobuf_src_dir=${protobuf_dir}/src
protobuf_build_dir=${protobuf_dir}/build
protobuf_install_dir=${install_dir}
if [ ! -d "${protobuf_src_dir}" ]; then
git clone -b v3.19.4 --recurse-submodules https://github.com/protocolbuffers/protobuf.git ${protobuf_src_dir}
fi
mkdir -p ${protobuf_build_dir}
cmake -S ${protobuf_src_dir}/cmake -B ${protobuf_build_dir}\
-Dprotobuf_BUILD_SHARED_LIBS=ON\
-DCMAKE_CXX_COMPILER=icpx\
-DCMAKE_C_COMPILER=icx\
-DCMAKE_INSTALL_PREFIX=${protobuf_install_dir}
cmake --build ${protobuf_build_dir} -j ${num_build_procs}
cmake --install ${protobuf_build_dir}


#build MGARD
mgard_x_build_dir=${build_dir}/mgard
mgard_x_install_dir=${install_dir}
mkdir -p ${mgard_x_build_dir}
cmake -S ${mgard_x_src_dir} -B ${mgard_x_build_dir} \
-DCMAKE_PREFIX_PATH="${zstd_install_dir}/lib/cmake/zstd;${protobuf_install_dir}"\
-DMGARD_ENABLE_SERIAL=OFF\
-DMGARD_ENABLE_SYCL=ON\
-DCMAKE_CXX_COMPILER=icpx\
-DCMAKE_C_COMPILER=icx\
-DCMAKE_CXX_FLAGS="-O2 -fsycl -fsycl-targets=spir64_gen -Xsycl-target-backend \"-device xehp\""\
-DMGARD_ENABLE_DOCS=OFF\
-DCMAKE_BUILD_TYPE=Release\
-DCMAKE_INSTALL_PREFIX=${mgard_x_install_dir}
cmake --build ${mgard_x_build_dir} -j ${num_build_procs}
cmake --install ${mgard_x_build_dir}
Loading