Skip to content

Commit 7f1a3c9

Browse files
authored
Merge pull request #258 from IntelPython/feature/add_windows_ci
Add windows CI build and test
2 parents 2ad599f + 276f872 commit 7f1a3c9

File tree

4 files changed

+175
-13
lines changed

4 files changed

+175
-13
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# SPDX-FileCopyrightText: 2000 - 2023 Kitware, Inc. and Contributors
2+
# SPDX-FileCopyrightText: 2022 - 2023 Intel Corporation
3+
#
4+
# SPDX-License-Identifier: BSD-3-Clause
5+
6+
7+
# This module is shared by multiple languages; use include blocker.
8+
if(__WINDOWS_INTEL_LLVM)
9+
return()
10+
endif()
11+
set(__WINDOWS_INTEL_LLVM 1)
12+
13+
# Platform/Windows-MSVC adds some linking options icx/ifx do not understand,
14+
# but that need to be passed to the linker. Wrap all the linking options from
15+
# Platform/Windows-MSVC so that the compiler will hand them off to the linker
16+
# without interpreting them.
17+
18+
# Save original CMAKE_${t}_LINKER_FLAGS_INIT
19+
foreach(t EXE SHARED MODULE STATIC)
20+
set(_saved_cmake_${t}_linker_flags_init ${CMAKE_${t}_LINKER_FLAGS_INIT})
21+
set(CMAKE_${t}_LINKER_FLAGS_INIT "")
22+
endforeach()
23+
include(Platform/Windows-MSVC)
24+
# Wrap linker flags from Windows-MSVC
25+
set(_IntelLLVM_LINKER_WRAPPER_FLAG "/Qoption,link,")
26+
set(_IntelLLVM_LINKER_WRAPPER_FLAG_SEP ",")
27+
foreach(t EXE SHARED MODULE STATIC)
28+
set(_wrapped_linker_flags "")
29+
foreach(flag ${CMAKE_${t}_LINKER_FLAGS_INIT})
30+
string(STRIP ${flag} flag)
31+
list(APPEND _wrapped_linker_flags "${_IntelLLVM_LINKER_WRAPPER_FLAG}${flag}")
32+
endforeach()
33+
set(CMAKE_${t}_LINKER_FLAGS_INIT "")
34+
list(APPEND CMAKE_${t}_LINKER_FLAGS_INIT
35+
${_saved_cmake_${t}_linker_flags_init} ${_wrapped_linker_flags})
36+
endforeach()
37+
38+
macro(__windows_compiler_intel lang)
39+
__windows_compiler_msvc(${lang})
40+
41+
set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "${_IntelLLVM_LINKER_WRAPPER_FLAG}")
42+
set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP "${_IntelLLVM_LINKER_WRAPPER_FLAG_SEP}")
43+
set(CMAKE_${lang}_CREATE_WIN32_EXE "${CMAKE_${lang}_LINKER_WRAPPER_FLAG}/subsystem:windows")
44+
set(CMAKE_${lang}_CREATE_CONSOLE_EXE "${CMAKE_${lang}_LINKER_WRAPPER_FLAG}/subsystem:console")
45+
set(CMAKE_LINK_DEF_FILE_FLAG "${CMAKE_${lang}_LINKER_WRAPPER_FLAG}/DEF:")
46+
set(CMAKE_LIBRARY_PATH_FLAG "${CMAKE_${lang}_LINKER_WRAPPER_FLAG}/LIBPATH:")
47+
48+
# Features for LINK_LIBRARY generator expression
49+
if(MSVC_VERSION GREATER "1900")
50+
## WHOLE_ARCHIVE: Force loading all members of an archive
51+
set(CMAKE_LINK_LIBRARY_USING_WHOLE_ARCHIVE "LINKER:/WHOLEARCHIVE:<LIBRARY>")
52+
set(CMAKE_LINK_LIBRARY_USING_WHOLE_ARCHIVE_SUPPORTED TRUE)
53+
endif()
54+
55+
set(CMAKE_${lang}_LINK_EXECUTABLE
56+
"${_CMAKE_VS_LINK_EXE}<CMAKE_${lang}_COMPILER> ${CMAKE_CL_NOLOGO} <CMAKE_${lang}_LINK_FLAGS> <OBJECTS> ${CMAKE_START_TEMP_FILE} <LINK_FLAGS> <LINK_LIBRARIES> /link /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR>${_PLATFORM_LINK_FLAGS} ${CMAKE_END_TEMP_FILE}")
57+
set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
58+
"${_CMAKE_VS_LINK_DLL}<CMAKE_${lang}_COMPILER> ${CMAKE_CL_NOLOGO} <CMAKE_${lang}_LINK_FLAGS> <OBJECTS> ${CMAKE_START_TEMP_FILE} -LD <LINK_FLAGS> <LINK_LIBRARIES> -link /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR>${_PLATFORM_LINK_FLAGS} ${CMAKE_END_TEMP_FILE}")
59+
set(CMAKE_${lang}_CREATE_SHARED_MODULE ${CMAKE_${lang}_CREATE_SHARED_LIBRARY})
60+
if (NOT "${lang}" STREQUAL "Fortran" OR CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL 2022.1)
61+
# The Fortran driver does not support -fuse-ld=llvm-lib before compiler version 2022.1
62+
set(CMAKE_${lang}_CREATE_STATIC_LIBRARY
63+
"<CMAKE_${lang}_COMPILER> ${CMAKE_CL_NOLOGO} <CMAKE_${lang}_LINK_FLAGS> <OBJECTS> ${CMAKE_START_TEMP_FILE} -fuse-ld=llvm-lib -o <TARGET> <LINK_FLAGS> <LINK_LIBRARIES> ${CMAKE_END_TEMP_FILE}")
64+
endif()
65+
66+
set(CMAKE_DEPFILE_FLAGS_${lang} "-QMD -QMT <DEP_TARGET> -QMF <DEP_FILE>")
67+
set(CMAKE_${lang}_DEPFILE_FORMAT gcc)
68+
endmacro()

.github/workflows/build_and_run.yml

Lines changed: 73 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,35 @@ on:
1010
branches: [main]
1111

1212
env:
13-
WORKLOADS: python,numpy,dpnp,sycl,numba_n,numba_np,numba_npr,numba_dpex_k,numba_dpex_n,numba_dpex_p,numba_mlir_k,numba_mlir_n,numba_mlir_p
13+
# sycl is not included. Add it manually if you need
14+
WORKLOADS: python,numpy,dpnp,numba_n,numba_np,numba_npr,numba_dpex_k,numba_dpex_n,numba_dpex_p,numba_mlir_k,numba_mlir_n,numba_mlir_p
1415

1516
jobs:
1617
build_linux:
17-
name: Builds dpbench and runs the benchmarks
18-
runs-on: ubuntu-latest
18+
name: Build and run
1919

2020
strategy:
2121
fail-fast: false
2222
matrix:
23+
os: ["ubuntu-latest", "windows-latest"]
2324
python: ["3.9", "3.10"]
25+
sycl: ["sycl","no-sycl"]
26+
install: ["pip", "setup.py"]
27+
include:
28+
- sycl: sycl
29+
os: ubuntu-latest
30+
cc: icx
31+
cxx: icpx
32+
environment: conda-linux-sycl.yml
33+
- sycl: sycl
34+
os: windows-latest
35+
cc: icx
36+
cxx: icx
37+
environment: conda-win-sycl.yml
38+
- sycl: no-sycl
39+
environment: conda.yml
40+
41+
runs-on: ${{matrix.os}}
2442

2543
steps:
2644
- name: Cancel Previous Runs
@@ -40,35 +58,78 @@ jobs:
4058
python-version: ${{ matrix.python }}
4159
mamba-version: "*"
4260
activate-environment: dpbench-dev
43-
environment-file: environments/conda-linux-sycl.yml
61+
environment-file: environments/${{ matrix.environment }}
4462

4563
- name: Conda info
46-
shell: bash -l {0}
64+
shell: bash -el {0}
4765
run: |
4866
conda info
4967
conda list
5068
69+
- name: Configure Intel OpenCL CPU RT
70+
if: matrix.os == 'windows-latest'
71+
shell: pwsh
72+
run: |
73+
$script_path="$env:CONDA_PREFIX\Scripts\set-intel-ocl-icd-registry.ps1"
74+
&$script_path
75+
echo "OCL_ICD_FILENAMES=$env:CONDA_PREFIX\Library\lib\intelocl64.dll" >> $env:GITHUB_ENV
76+
echo "LIB=$env:CONDA_PREFIX\Library\lib;$env:CONDA_PREFIX\compiler\lib;$env:LIB" >> $env:GITHUB_ENV
77+
echo "INCLUDE=$env:CONDA_PREFIX\include;$env:INCLUDE" >> $env:GITHUB_ENV
78+
# Check the variable assisting OpenCL CPU driver to find TBB DLLs which are not located where it expects them by default
79+
$cl_cfg="$env:CONDA_PREFIX\Library\lib\cl.cfg"
80+
Get-Content -Tail 5 -Path $cl_cfg
81+
82+
- name: Configure Python
83+
if: matrix.os == 'windows-latest'
84+
shell: pwsh
85+
run: |
86+
# Set python encoding to support utf-8 symblos like ms.
87+
echo "PYTHONIOENCODING=utf-8" >> $env:GITHUB_ENV
88+
89+
- name: Patch IntelLLVM cmake
90+
if: matrix.os == 'windows-latest' && matrix.sycl == 'sycl'
91+
shell: pwsh
92+
run: |
93+
$env:PATCHED_CMAKE_VERSION="3.26"
94+
$env:PLATFORM_DIR="${env:CONDA_PREFIX}\Library\share\cmake-${env:PATCHED_CMAKE_VERSION}\Modules\Platform"
95+
$env:FN="Windows-IntelLLVM.cmake"
96+
Copy-Item ".github\workflows\Windows-IntelLLVM_${env:PATCHED_CMAKE_VERSION}.cmake" "${env:PLATFORM_DIR}\${env:FN}"
97+
98+
- name: Configure Sycl
99+
if: matrix.sycl == 'sycl'
100+
shell: bash -el {0}
101+
run: |
102+
sycl-ls
103+
echo "CC=${{matrix.cc}}" >> "$GITHUB_ENV"
104+
echo "CXX=${{matrix.cxx}}" >> "$GITHUB_ENV"
105+
echo "DPBENCH_SYCL=1" >> "$GITHUB_ENV"
106+
echo "WORKLOADS=$WORKLOADS,sycl" >> "$GITHUB_ENV"
107+
51108
- name: Build dpbench
52-
shell: bash -l {0}
109+
if: matrix.install == 'pip'
110+
shell: bash -el {0}
53111
run: |
54-
CC=icx CXX=icpx DPBENCH_SYCL=1 pip install \
112+
pip install \
55113
--no-index --no-deps --no-build-isolation -e . -v
56114
115+
- name: Build dpbench
116+
if: matrix.install == 'setup.py'
117+
shell: bash -el {0}
118+
run: |
119+
python setup.py develop
120+
57121
- name: Run benchmarks
58-
shell: bash -l {0}
122+
shell: bash -el {0}
59123
run: |
60-
export OCL_ICD_FILENAMES=libintelocl.so
61124
export NUMBA_MLIR_GPU_RUNTIME=sycl
62125
# Turn off numba-dpex autofall back
63126
export NUMBA_DPEX_FALLBACK_ON_CPU=0
64127
# Make sure numba-dpex is using native atomics in github CI
65128
export NUMBA_DPEX_ACTIVATE_ATOMICS_FP_NATIVE=1
66-
ls $(dirname $(dirname `which icx`))/bin-llvm || exit 1
67-
export NUMBA_DPEX_LLVM_SPIRV_ROOT=$(dirname $(dirname `which icx`))/bin-llvm
68129
69130
dpbench -i ${WORKLOADS} run -r2 --no-print-results || exit 1
70131
71132
- name: Generate report
72-
shell: bash -l {0}
133+
shell: bash -el {0}
73134
run: |
74135
dpbench -i ${WORKLOADS} report || exit 1

dpbench/configs/bench_info/knn.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ array_args = [
3232
output_args = [
3333
"predictions",
3434
]
35-
expected_failure_implementations = ["numba_dpex_p"]
35+
36+
# `sycl` fails just on Windows
37+
expected_failure_implementations = ["numba_dpex_p", "sycl"]
3638

3739
[benchmark.parameters.S]
3840
test_size = 1024

environments/conda-win-sycl.yml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# SPDX-FileCopyrightText: 2022 - 2023 Intel Corporation
2+
#
3+
# SPDX-License-Identifier: Apache-2.0
4+
5+
name: dpbench-dev
6+
channels:
7+
- dppy/label/dev
8+
- conda-forge
9+
- intel
10+
- nodefaults
11+
dependencies:
12+
- pip
13+
- tomli
14+
- alembic
15+
- sqlalchemy
16+
- scipy
17+
- scikit-learn
18+
- pandas
19+
- intel::numpy
20+
- numba
21+
- dpctl
22+
- dpnp
23+
- numba-dpex
24+
- numba-mlir
25+
- dpcpp_win-64
26+
- cmake
27+
- cython
28+
- scikit-build
29+
# https://github.com/scikit-build/scikit-build/issues/981
30+
- setuptools>=42,<64
31+
- pybind11

0 commit comments

Comments
 (0)