From d6bb0366b5879204589609d581b5e69ac3f940f0 Mon Sep 17 00:00:00 2001 From: Simeon Ehrig Date: Tue, 4 Feb 2025 13:11:53 +0100 Subject: [PATCH] CI job generator: generate for each SYCL job a CPU and FPGA version --- script/job_generator/alpaka_globals.py | 5 ++++ script/job_generator/generate_job_yaml.py | 19 ++++++++++----- script/job_generator/job_generator.py | 4 +++- script/job_generator/job_modifier.py | 28 +++++++++++++++++++++++ 4 files changed, 49 insertions(+), 7 deletions(-) diff --git a/script/job_generator/alpaka_globals.py b/script/job_generator/alpaka_globals.py index 1ca7d8fc2e05..9fbd2a6816f9 100644 --- a/script/job_generator/alpaka_globals.py +++ b/script/job_generator/alpaka_globals.py @@ -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" diff --git a/script/job_generator/generate_job_yaml.py b/script/job_generator/generate_job_yaml.py index 8712b12d4f0e..dc35ae847790 100644 --- a/script/job_generator/generate_job_yaml.py +++ b/script/job_generator/generate_job_yaml.py @@ -389,12 +389,14 @@ 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_FPGA"] = "ON" - variables["alpaka_SYCL_ONEAPI_FPGA_MODE"] = "emulation" - variables["alpaka_SYCL_ONEAPI_FPGA_BOARD"] = "" - variables["alpaka_SYCL_ONEAPI_FPGA_BSP"] = "" + 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 @@ -487,6 +489,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" diff --git a/script/job_generator/job_generator.py b/script/job_generator/job_generator.py index d079d59c08f3..37ebf6c5965c 100644 --- a/script/job_generator/job_generator.py +++ b/script/job_generator/job_generator.py @@ -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 @@ -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)}") diff --git a/script/job_generator/job_modifier.py b/script/job_generator/job_modifier.py index 7eac92a54fc7..8cf2d2ef393b 100644 --- a/script/job_generator/job_modifier.py +++ b/script/job_generator/job_modifier.py @@ -135,3 +135,31 @@ 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: + for enabled_device in (SYCL_CPU, SYCL_FPGA): + extended_job = job.copy() + extended_job[SYCL_DEVICE] = (enabled_device, ON) + extended_job_matrix.append(extended_job) + else: + job[SYCL_DEVICE] = ("", "") + extended_job_matrix.append(job) + + + + return extended_job_matrix