diff --git a/.github/workflows/generate_coverage.yaml b/.github/workflows/generate_coverage.yaml index 98402bd1e156..bbdf57e71f29 100644 --- a/.github/workflows/generate_coverage.yaml +++ b/.github/workflows/generate_coverage.yaml @@ -7,6 +7,364 @@ on: permissions: read-all jobs: + prev-release: + name: Install oneAPI with 2025.0 + runs-on: ubuntu-latest + + permissions: + # Needed to cancel any previous runs that are not completed for a given workflow + actions: write + + defaults: + run: + shell: bash -el {0} + + env: + environment-file: 'environments/environment.yml' + build-with-oneapi-env: 'environments/build_with_oneapi.yml' + coverage-env: 'environments/coverage.yml' + oneapi-pkgs-env: '' + # Enable env when it's required to use only conda packages without OneAPI installation + # oneapi-pkgs-env: '${{ github.workspace }}/environments/oneapi_pkgs.yml' + + steps: + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # 0.12.1 + with: + access_token: ${{ github.token }} + + - name: Add Intel repository + if: env.oneapi-pkgs-env == '' + run: | + wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB + cat GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null + rm GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB + echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list + sudo apt update + + - name: Install latest Intel OneAPI + if: env.oneapi-pkgs-env == '' + run: | + sudo apt install hwloc \ + intel-oneapi-mkl=2025.0.1-14 \ + intel-oneapi-umf=0.9.1-6 \ + intel-oneapi-mkl-devel=2025.0.1-14 \ + intel-oneapi-tbb-devel=2022.0.0-402 \ + intel-oneapi-libdpstd-devel=2022.7.1-14 \ + intel-oneapi-compiler-dpcpp-cpp=2025.0.4-1519 + + - name: Debug new oneAPI pkgs + run: | + [ -f /opt/intel/oneapi/setvars.sh ] && source /opt/intel/oneapi/setvars.sh + echo "Running LDD:" + sudo ldd /opt/intel/oneapi/mkl/2025.0/lib/libmkl_sycl_vm.so.5 + echo "Running ReadELF:" + sudo readelf -d /opt/intel/oneapi/mkl/2025.0/lib/libmkl_sycl_vm.so.5 + echo "Searching for libsycl:" + sudo find /opt/intel/oneapi -name "libsycl.so*" + echo "Running LDD with LD_LIBRARY_PATH to compiler:" + sudo LD_LIBRARY_PATH="/opt/intel/oneapi/compiler/2025.0/lib" ldd /opt/intel/oneapi/mkl/2025.0/lib/libmkl_sycl_vm.so.5 + echo "Looking for undefined symbols in libmkl_sycl_vm.so.5:" + sudo nm -A -u /opt/intel/oneapi/mkl/2025.0/lib/libmkl_sycl_vm.so.5 + + - name: Cat setvars.sh + run: cat /opt/intel/oneapi/setvars.sh + + - name: Cat DPC++ vars.sh + run: cat /opt/intel/oneapi/compiler/2025.0/env/vars.sh + + - name: Cat MKL vars.sh + run: cat /opt/intel/oneapi/mkl/2025.0/env/vars.sh + + - name: Create test file + uses: 1arp/create-a-file-action@0.4.5 + with: + path: 'example' + isAbsolutePath: false + file: 'test.cpp' + content: | + #include + #include + + namespace mkl_vm = oneapi::mkl::vm; + + int main(void) + { + sycl::queue q{sycl::default_selector_v}; + + const auto &dev = q.get_device(); + std::cout << "Device: " << dev.get_info() << std::endl; + std::cout << "Driver_version: " << dev.get_info() << std::endl; + + using T = float; + constexpr std::size_t size = 10; + + T *data = sycl::malloc_device(size, q); + T *res = sycl::malloc_device(size, q); + + auto fill_ev = q.fill(data, T(-1.0), size); + + mkl_vm::abs(q, size, data, res, {fill_ev}).wait_and_throw(); + + sycl::free(data, q); + sycl::free(res, q); + + std::cout << "Exit" << std::endl; + return 0; + } + + - name: Cat test file + run: cat example/test.cpp + + - name: Build test file + run: | + [ -f /opt/intel/oneapi/setvars.sh ] && source /opt/intel/oneapi/setvars.sh + icpx -fsycl test.cpp -DMKL_ILP64 -qmkl-ilp64=parallel -qtbb -o test.x + working-directory: example + + - name: Run test file + run: | + [ -f /opt/intel/oneapi/setvars.sh ] && source /opt/intel/oneapi/setvars.sh + ./test.x + working-directory: example + + new-release: + name: Install oneAPI with 2025.1 + runs-on: ubuntu-latest + + permissions: + # Needed to cancel any previous runs that are not completed for a given workflow + actions: write + + defaults: + run: + shell: bash -el {0} + + env: + environment-file: 'environments/environment.yml' + build-with-oneapi-env: 'environments/build_with_oneapi.yml' + coverage-env: 'environments/coverage.yml' + oneapi-pkgs-env: '' + # Enable env when it's required to use only conda packages without OneAPI installation + # oneapi-pkgs-env: '${{ github.workspace }}/environments/oneapi_pkgs.yml' + + steps: + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # 0.12.1 + with: + access_token: ${{ github.token }} + + - name: Add Intel repository + if: env.oneapi-pkgs-env == '' + run: | + wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB + cat GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null + rm GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB + echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list + sudo apt update + + - name: Install latest Intel OneAPI + if: env.oneapi-pkgs-env == '' + run: | + sudo apt install hwloc \ + intel-oneapi-mkl \ + intel-oneapi-umf \ + intel-oneapi-mkl-devel \ + intel-oneapi-tbb-devel \ + intel-oneapi-libdpstd-devel \ + intel-oneapi-compiler-dpcpp-cpp + + - name: Debug new oneAPI pkgs + run: | + [ -f /opt/intel/oneapi/setvars.sh ] && source /opt/intel/oneapi/setvars.sh + echo "Running LDD:" + sudo ldd /opt/intel/oneapi/mkl/2025.1/lib/libmkl_sycl_vm.so.5 + echo "Running ReadELF:" + sudo readelf -d /opt/intel/oneapi/mkl/2025.1/lib/libmkl_sycl_vm.so.5 + echo "Searching for libsycl:" + sudo find /opt/intel/oneapi -name "libsycl.so*" + echo "Running LDD with LD_LIBRARY_PATH to compiler:" + sudo LD_LIBRARY_PATH="/opt/intel/oneapi/compiler/2025.1/lib" ldd /opt/intel/oneapi/mkl/2025.1/lib/libmkl_sycl_vm.so.5 + echo "Looking for undefined symbols in libmkl_sycl_vm.so.5:" + sudo nm -A -u /opt/intel/oneapi/mkl/2025.1/lib/libmkl_sycl_vm.so.5 + echo "Grep for SubmissionInfo:" + sudo nm -A /opt/intel/oneapi/mkl/2025.1/lib/libmkl_sycl_vm.so.5 | grep SubmissionInfo + + - name: Cat setvars.sh + run: cat /opt/intel/oneapi/setvars.sh + + - name: Cat DPC++ vars.sh + run: cat /opt/intel/oneapi/compiler/2025.1/env/vars.sh + + - name: Cat MKL vars.sh + run: cat /opt/intel/oneapi/mkl/2025.1/env/vars.sh + + - name: Create test file + uses: 1arp/create-a-file-action@0.4.5 + with: + path: 'example' + isAbsolutePath: false + file: 'test.cpp' + content: | + #include + #include + + namespace mkl_vm = oneapi::mkl::vm; + + int main(void) + { + sycl::queue q{sycl::default_selector_v}; + + const auto &dev = q.get_device(); + std::cout << "Device: " << dev.get_info() << std::endl; + std::cout << "Driver_version: " << dev.get_info() << std::endl; + + using T = float; + constexpr std::size_t size = 10; + + T *data = sycl::malloc_device(size, q); + T *res = sycl::malloc_device(size, q); + + auto fill_ev = q.fill(data, T(-1.0), size); + + mkl_vm::abs(q, size, data, res, {fill_ev}).wait_and_throw(); + + sycl::free(data, q); + sycl::free(res, q); + + std::cout << "Exit" << std::endl; + return 0; + } + + - name: Cat test file + run: cat example/test.cpp + + - name: Build test file + run: | + [ -f /opt/intel/oneapi/setvars.sh ] && source /opt/intel/oneapi/setvars.sh + icpx -fsycl test.cpp -DMKL_ILP64 -qmkl-ilp64=parallel -qtbb -o test.x + working-directory: example + + - name: Run test file + run: | + [ -f /opt/intel/oneapi/setvars.sh ] && source /opt/intel/oneapi/setvars.sh + ./test.x + working-directory: example + + new-release-old-compiler: + name: Install oneAPI with 2025.1, but DPC++ from 2025.0 + runs-on: ubuntu-latest + + permissions: + # Needed to cancel any previous runs that are not completed for a given workflow + actions: write + + defaults: + run: + shell: bash -el {0} + + env: + environment-file: 'environments/environment.yml' + build-with-oneapi-env: 'environments/build_with_oneapi.yml' + coverage-env: 'environments/coverage.yml' + oneapi-pkgs-env: '' + # Enable env when it's required to use only conda packages without OneAPI installation + # oneapi-pkgs-env: '${{ github.workspace }}/environments/oneapi_pkgs.yml' + + steps: + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # 0.12.1 + with: + access_token: ${{ github.token }} + + - name: Add Intel repository + if: env.oneapi-pkgs-env == '' + run: | + wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB + cat GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null + rm GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB + echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list + sudo apt update + + - name: Install latest Intel OneAPI + if: env.oneapi-pkgs-env == '' + run: | + sudo apt install hwloc \ + intel-oneapi-mkl \ + intel-oneapi-umf=0.9.1-6 \ + intel-oneapi-mkl-devel \ + intel-oneapi-tbb-devel \ + intel-oneapi-libdpstd-devel=2022.7.1-14 \ + intel-oneapi-compiler-dpcpp-cpp=2025.0.4-1519 + + - name: Debug new oneAPI pkgs + run: | + [ -f /opt/intel/oneapi/setvars.sh ] && source /opt/intel/oneapi/setvars.sh + echo "Running LDD:" + sudo ldd /opt/intel/oneapi/mkl/2025.1/lib/libmkl_sycl_vm.so.5 + echo "Running ReadELF:" + sudo readelf -d /opt/intel/oneapi/mkl/2025.1/lib/libmkl_sycl_vm.so.5 + echo "Searching for libsycl:" + sudo find /opt/intel/oneapi -name "libsycl.so*" + echo "Running LDD with LD_LIBRARY_PATH to compiler:" + sudo LD_LIBRARY_PATH="/opt/intel/oneapi/compiler/2025.0/lib" ldd /opt/intel/oneapi/mkl/2025.1/lib/libmkl_sycl_vm.so.5 + echo "Looking for undefined symbols in libmkl_sycl_vm.so.5:" + sudo nm -A -u /opt/intel/oneapi/mkl/2025.1/lib/libmkl_sycl_vm.so.5 + echo "Grep for SubmissionInfo:" + sudo nm -A /opt/intel/oneapi/mkl/2025.1/lib/libmkl_sycl_vm.so.5 | grep SubmissionInfo + + - name: Create test file + uses: 1arp/create-a-file-action@0.4.5 + with: + path: 'example' + isAbsolutePath: false + file: 'test.cpp' + content: | + #include + #include + + namespace mkl_vm = oneapi::mkl::vm; + + int main(void) + { + sycl::queue q{sycl::default_selector_v}; + + const auto &dev = q.get_device(); + std::cout << "Device: " << dev.get_info() << std::endl; + std::cout << "Driver_version: " << dev.get_info() << std::endl; + + using T = float; + constexpr std::size_t size = 10; + + T *data = sycl::malloc_device(size, q); + T *res = sycl::malloc_device(size, q); + + auto fill_ev = q.fill(data, T(-1.0), size); + + mkl_vm::abs(q, size, data, res, {fill_ev}).wait_and_throw(); + + sycl::free(data, q); + sycl::free(res, q); + + std::cout << "Exit" << std::endl; + return 0; + } + + - name: Cat test file + run: cat example/test.cpp + + - name: Build test file + run: | + [ -f /opt/intel/oneapi/setvars.sh ] && source /opt/intel/oneapi/setvars.sh + icpx -fsycl test.cpp -DMKL_ILP64 -qmkl-ilp64=parallel -qtbb -o test.x + working-directory: example + + - name: Run test file + run: | + [ -f /opt/intel/oneapi/setvars.sh ] && source /opt/intel/oneapi/setvars.sh + ./test.x + working-directory: example + generate-coverage: name: Generate coverage and push to Coveralls.io runs-on: ubuntu-latest @@ -94,11 +452,60 @@ jobs: environment-file: ${{ env.environment-file }} activate-environment: 'coverage' + # - name: Conda info + # run: pip install -i https://pypi.anaconda.org/dppy/label/dev/simple dpctl + - name: Conda info run: | mamba info mamba list + - name: Create test file + uses: 1arp/create-a-file-action@0.4.5 + with: + path: 'example' + isAbsolutePath: false + file: 'test.cpp' + content: | + #include + #include + + namespace mkl_vm = oneapi::mkl::vm; + + int main(void) + { + sycl::queue q{sycl::default_selector_v}; + + const auto &dev = q.get_device(); + std::cout << "Device: " << dev.get_info() << std::endl; + std::cout << "Driver_version: " << dev.get_info() << std::endl; + + using T = float; + constexpr std::size_t size = 10; + + T *data = sycl::malloc_device(size, q); + T *res = sycl::malloc_device(size, q); + + auto fill_ev = q.fill(data, T(-1.0), size); + + mkl_vm::abs(q, size, data, res, {fill_ev}).wait_and_throw(); + + sycl::free(data, q); + sycl::free(res, q); + + std::cout << "Exit" << std::endl; + return 0; + } + + - name: Cat test file + run: cat example/test.cpp + + - name: Build & Run test file + run: | + [ -f /opt/intel/oneapi/setvars.sh ] && source /opt/intel/oneapi/setvars.sh + icpx -fsycl test.cpp -DMKL_ILP64 -qmkl-ilp64=parallel -qtbb -o test.x + working-directory: example + - name: Build dpnp with coverage id: build_coverage uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3.0.2 diff --git a/environments/build_with_oneapi.yml b/environments/build_with_oneapi.yml index 715023ee48db..2fcee7537fdd 100644 --- a/environments/build_with_oneapi.yml +++ b/environments/build_with_oneapi.yml @@ -5,8 +5,9 @@ channels: dependencies: - cmake - cython - - dpctl>=0.19.0dev0 - ninja - numpy - pytest - scikit-build + - pip: + - dpctl==0.20.0dev0