Skip to content
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

Add SYCL FPGA support to the job generator #2474

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
14 changes: 7 additions & 7 deletions cmake/alpakaCommon.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -726,14 +726,14 @@ if(alpaka_ACC_SYCL_ENABLE)

if(alpaka_SYCL_ONEAPI_FPGA_MODE STREQUAL "emulation")
target_compile_definitions(alpaka INTERFACE "ALPAKA_FPGA_EMULATION")
alpaka_set_compiler_options(DEVICE target alpaka "-Xsemulator")
target_link_options(alpaka INTERFACE "-Xsemulator")
alpaka_set_compiler_options(DEVICE target alpaka "-Xsycl-target-backend=${alpaka_SYCL_ONEAPI_FPGA_TARGET}" "-emulator")
target_link_options(alpaka INTERFACE "-Xsycl-target-backend=${alpaka_SYCL_ONEAPI_FPGA_TARGET}" "-emulator")
elseif(alpaka_SYCL_ONEAPI_FPGA_MODE STREQUAL "simulation")
alpaka_set_compiler_options(DEVICE target alpaka "-Xssimulation")
target_link_options(alpaka INTERFACE "-Xssimulation")
alpaka_set_compiler_options(DEVICE target alpaka "-Xsycl-target-backend=${alpaka_SYCL_ONEAPI_FPGA_TARGET}" "-simulation")
target_link_options(alpaka INTERFACE "-Xsycl-target-backend=${alpaka_SYCL_ONEAPI_FPGA_TARGET}" "-simulation")
elseif(alpaka_SYCL_ONEAPI_FPGA_MODE STREQUAL "hardware")
alpaka_set_compiler_options(DEVICE target alpaka "-Xshardware")
target_link_options(alpaka INTERFACE "-Xshardware")
alpaka_set_compiler_options(DEVICE target alpaka "-Xsycl-target-backend=${alpaka_SYCL_ONEAPI_FPGA_TARGET}" "-hardware")
target_link_options(alpaka INTERFACE "-Xsycl-target-backend=${alpaka_SYCL_ONEAPI_FPGA_TARGET}" "-hardware")
endif()

if(NOT alpaka_SYCL_ONEAPI_FPGA_MODE STREQUAL "emulation")
Expand All @@ -742,7 +742,7 @@ if(alpaka_ACC_SYCL_ENABLE)

set(alpaka_SYCL_ONEAPI_FPGA_BSP "intel_a10gx_pac" CACHE STRING "Path to or name of the Intel FPGA board support package")
set_property(CACHE alpaka_SYCL_ONEAPI_FPGA_BSP PROPERTY STRINGS "intel_a10gx_pac;intel_s10sx_pac")
target_link_options(alpaka INTERFACE "-Xsycl-target-backend=${alpaka_SYCL_ONEAPI_FPGA_TARGET} \"-board=${alpaka_SYCL_ONEAPI_FPGA_BSP}:${alpaka_SYCL_ONEAPI_FPGA_BOARD}\"")
target_link_options(alpaka INTERFACE "-Xsycl-target-backend=${alpaka_SYCL_ONEAPI_FPGA_TARGET}" "-board=${alpaka_SYCL_ONEAPI_FPGA_BSP}:${alpaka_SYCL_ONEAPI_FPGA_BOARD}")
endif()
endif()

Expand Down
257 changes: 168 additions & 89 deletions include/alpaka/kernel/SyclSubgroupSize.hpp

Large diffs are not rendered by default.

25 changes: 25 additions & 0 deletions script/before_install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,31 @@ if [ "${alpaka_ACC_SYCL_ENABLE}" == "OFF" ]; then
echo_yellow "<DEFAULT: SYCL environment variables for disabled backend>"
export alpaka_SYCL_ONEAPI_CPU=${alpaka_SYCL_ONEAPI_CPU:=""}
export alpaka_SYCL_ONEAPI_CPU_ISA=${alpaka_SYCL_ONEAPI_CPU_ISA:=""}
export alpaka_SYCL_ONEAPI_FPGA=${alpaka_SYCL_ONEAPI_FPGA:=""}
export alpaka_SYCL_ONEAPI_FPGA_MODE=${alpaka_SYCL_ONEAPI_FPGA_MODE:=""}
export alpaka_SYCL_ONEAPI_FPGA_BOARD=${alpaka_SYCL_ONEAPI_FPGA_BOARD:=""}
export alpaka_SYCL_ONEAPI_FPGA_BSP=${alpaka_SYCL_ONEAPI_FPGA_BSP:=""}
else
if !( [ "$alpaka_SYCL_ONEAPI_CPU" == "ON" ] || [ "$alpaka_SYCL_ONEAPI_FPGA" == "ON" ] ); then
echo_red "ERROR: the SYCL CPU or FPGA device needs to enabled"
exit 1
fi

if [ "$alpaka_SYCL_ONEAPI_CPU" == "ON" ] && [ "$alpaka_SYCL_ONEAPI_FPGA" == "ON" ]; then
echo_red "ERROR: the SYCL CPU or FPGA device cannot be enabled at the same time"
exit 1
fi

if [ "$alpaka_SYCL_ONEAPI_CPU" == "OFF" ]; then
echo_yellow "<DEFAULT: SYCL environment variables for enabled backend and disabled CPU device>"
export alpaka_SYCL_ONEAPI_CPU_ISA=""
fi
if [ "$alpaka_SYCL_ONEAPI_FPGA" == "OFF" ]; then
echo_yellow "<DEFAULT: SYCL environment variables for enabled backend and disabled FPGA device>"
export alpaka_SYCL_ONEAPI_FPGA_MODE=""
export alpaka_SYCL_ONEAPI_FPGA_BOARD=""
export alpaka_SYCL_ONEAPI_FPGA_BSP=""
fi
fi

#-------------------------------------------------------------------------------
Expand Down
2 changes: 1 addition & 1 deletion script/install_oneapi.sh
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ else
components=(
intel-oneapi-common-vars # Contains /opt/intel/oneapi/setvars.sh - has no version number
intel-oneapi-compiler-dpcpp-cpp-"${ALPAKA_CI_ONEAPI_VERSION}" # Contains icpx compiler and SYCL runtime
intel-oneapi-runtime-opencl # Required to run SYCL tests on the CPU - has no version number
intel-oneapi-compiler-fpga-"${ALPAKA_CI_ONEAPI_VERSION}" # Containes the FPGA support package
)
travis_retry sudo apt-get install -y "${components[@]}"

Expand Down
5 changes: 5 additions & 0 deletions script/job_generator/alpaka_globals.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,8 @@

# enable mdspan support
MDSPAN: str = "mdspan"

# enabled device for Intel SYCL backend
SYCL_DEVICE: str = "sycl_device"
SYCL_CPU: str = "sycl_cpu"
SYCL_FPGA: str = "sycl_fpga"
17 changes: 15 additions & 2 deletions script/job_generator/generate_job_yaml.py
Original file line number Diff line number Diff line change
Expand Up @@ -389,8 +389,16 @@ def job_variables(job: Dict[str, Tuple[str, str]]) -> Dict[str, str]:
variables["ALPAKA_CI_CLANG_VER"] = "19"
variables["ALPAKA_CI_STDLIB"] = "libstdc++"
variables["ALPAKA_CI_ONEAPI_VERSION"] = job[DEVICE_COMPILER][VERSION]
variables["alpaka_SYCL_ONEAPI_CPU"] = "ON"
variables["alpaka_SYCL_ONEAPI_CPU_ISA"] = "avx2"
variables["alpaka_SYCL_ONEAPI_CPU"] = "OFF"
variables["alpaka_SYCL_ONEAPI_FPGA"] = "OFF"
if job[SYCL_DEVICE][NAME] == SYCL_CPU:
variables["alpaka_SYCL_ONEAPI_CPU"] = "ON"
variables["alpaka_SYCL_ONEAPI_CPU_ISA"] = "avx2"
if job[SYCL_DEVICE][NAME] == SYCL_FPGA:
variables["alpaka_SYCL_ONEAPI_FPGA"] = "ON"
variables["alpaka_SYCL_ONEAPI_FPGA_MODE"] = "emulation"
variables["alpaka_SYCL_ONEAPI_FPGA_BOARD"] = ""
variables["alpaka_SYCL_ONEAPI_FPGA_BSP"] = ""

return variables

Expand Down Expand Up @@ -483,6 +491,11 @@ def create_job(job: Dict[str, Tuple[str, str]], container_version: float, gitlab
if job[DEVICE_COMPILER][NAME] == CLANG_CUDA:
job_name = job_name + "-cuda" + job[ALPAKA_ACC_GPU_CUDA_ENABLE][VERSION]

if job[SYCL_DEVICE][NAME] == SYCL_CPU:
job_name = job_name + "-cpu"
if job[SYCL_DEVICE][NAME] == SYCL_FPGA:
job_name = job_name + "-fpga"

if job[JOB_EXECUTION_TYPE][VERSION] == JOB_EXECUTION_COMPILE_ONLY:
job_name += "_compile_only"

Expand Down
4 changes: 3 additions & 1 deletion script/job_generator/job_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
JOB_UNKNOWN,
WAVE_GROUP_NAMES,
)
from job_modifier import add_job_parameters
from job_modifier import add_job_parameters, add_sycl_fpga_jobs
from verify import verify, verify_parameters
from util import print_warn

Expand Down Expand Up @@ -139,6 +139,8 @@ def get_args() -> argparse.Namespace:
)

add_job_parameters(job_matrix)

job_matrix = add_sycl_fpga_jobs(job_matrix)

if args.print_combinations or args.all:
print(f"number of combinations before reorder: {len(job_matrix)}")
Expand Down
33 changes: 33 additions & 0 deletions script/job_generator/job_modifier.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,3 +135,36 @@ def add_job_parameters(job_matrix: List[Dict[str, Tuple[str, str]]]):
for job in job_matrix:
if job[DEVICE_COMPILER][NAME] in [GCC, CLANG, ICPX]:
job[JOB_EXECUTION_TYPE] = (JOB_EXECUTION_TYPE, JOB_EXECUTION_RUNTIME)


def add_sycl_fpga_jobs(job_matrix: List[Dict[str, Tuple[str, str]]]) -> List[Dict[str, Tuple[str, str]]]:
"""Duplicate each job with enabled backend ALPAKA_ACC_SYCL_ENABLE and set
the SYCL_DEVICE to SYCL_CPU for the first and SYCL_FPGA for the second job.
All other jobs get a neutral SYCL_DEVICE entry.

Args:
job_matrix (List[Dict[str, Tuple[str, str]]]): Job matrix
Return:
(List[Dict[str, Tuple[str, str]]]): Job matrix with duplicated and
extended jobs
"""
extended_job_matrix = []

for job in job_matrix:
if ALPAKA_ACC_SYCL_ENABLE in job:
extended_job = job.copy()
extended_job[SYCL_DEVICE] = (SYCL_CPU, ON)
extended_job_matrix.append(extended_job)
# TODO: a bug in the blockSharedSharingTest disallow testing the
# SYCL FPGA backend in debug mode
if job[BUILD_TYPE][VERSION] == CMAKE_RELEASE:
extended_job = job.copy()
extended_job[SYCL_DEVICE] = (SYCL_FPGA, ON)
extended_job_matrix.append(extended_job)
else:
job[SYCL_DEVICE] = ("", "")
extended_job_matrix.append(job)



return extended_job_matrix
1 change: 1 addition & 0 deletions script/run_generate.sh
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ cd build/
$(env2cmake alpaka_CUDA_SHOW_REGISTER) $(env2cmake alpaka_CUDA_KEEP_FILES) $(env2cmake alpaka_CUDA_EXPT_EXTENDED_LAMBDA) \
$(env2cmake alpaka_ACC_GPU_HIP_ENABLE) $(env2cmake alpaka_ACC_GPU_HIP_ONLY_MODE) $(env2cmake CMAKE_HIP_ARCHITECTURES) $(env2cmake CMAKE_HIP_COMPILER) "$(env2cmake CMAKE_HIP_FLAGS)" \
$(env2cmake alpaka_ACC_SYCL_ENABLE) $(env2cmake alpaka_SYCL_ONEAPI_CPU) $(env2cmake alpaka_SYCL_ONEAPI_CPU_ISA) \
$(env2cmake alpaka_SYCL_ONEAPI_FPGA) $(env2cmake alpaka_SYCL_ONEAPI_FPGA_MODE) $(env2cmake alpaka_SYCL_ONEAPI_FPGA_BOARD) "$(env2cmake alpaka_SYCL_ONEAPI_FPGA_BSP)" \
$(env2cmake alpaka_DEBUG) $(env2cmake alpaka_CI) $(env2cmake alpaka_CHECK_HEADERS) $(env2cmake alpaka_CXX_STANDARD) $(env2cmake alpaka_USE_MDSPAN) $(env2cmake CMAKE_INSTALL_PREFIX) \
..

Expand Down
Loading