Skip to content

[DEBUG] Issue with undefined symbol in MKL #5211

[DEBUG] Issue with undefined symbol in MKL

[DEBUG] Issue with undefined symbol in MKL #5211

name: Generate coverage data for dpnp
on:
pull_request:
push:
branches: [master]
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: Create test file
uses: 1arp/[email protected]
with:
path: 'example'
isAbsolutePath: false
file: 'test.cpp'
content: |
#include <sycl/sycl.hpp>
#include <oneapi/mkl.hpp>
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<sycl::info::device::name>() << std::endl;
std::cout << "Driver_version: " << dev.get_info<sycl::info::device::driver_version>() << std::endl;
using T = float;
constexpr std::size_t size = 10;
T *data = sycl::malloc_device<T>(size, q);
T *res = sycl::malloc_device<T>(size, q);
auto fill_ev = q.fill<T>(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: Create test file
uses: 1arp/[email protected]
with:
path: 'example'
isAbsolutePath: false
file: 'test.cpp'
content: |
#include <sycl/sycl.hpp>
#include <oneapi/mkl.hpp>
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<sycl::info::device::name>() << std::endl;
std::cout << "Driver_version: " << dev.get_info<sycl::info::device::driver_version>() << std::endl;
using T = float;
constexpr std::size_t size = 10;
T *data = sycl::malloc_device<T>(size, q);
T *res = sycl::malloc_device<T>(size, q);
auto fill_ev = q.fill<T>(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 \
intel-oneapi-mkl-devel \
intel-oneapi-tbb-devel \
intel-oneapi-libdpstd-devel \
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/[email protected]
with:
path: 'example'
isAbsolutePath: false
file: 'test.cpp'
content: |
#include <sycl/sycl.hpp>
#include <oneapi/mkl.hpp>
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<sycl::info::device::name>() << std::endl;
std::cout << "Driver_version: " << dev.get_info<sycl::info::device::driver_version>() << std::endl;
using T = float;
constexpr std::size_t size = 10;
T *data = sycl::malloc_device<T>(size, q);
T *res = sycl::malloc_device<T>(size, q);
auto fill_ev = q.fill<T>(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
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=2025.0.4-1519
- name: Install Lcov
run: |
sudo apt-get install lcov
sudo gem install coveralls-lcov
- name: Checkout repo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
- name: Install conda-merge tool
uses: BSFishy/pip-action@8f2d471d809dc20b6ada98c91910b6ae6243f318 # v1
with:
packages: conda-merge
- name: Merge conda env files
run: |
conda-merge ${{ env.build-with-oneapi-env }} ${{ env.coverage-env }} ${{ env.oneapi-pkgs-env }} > ${{ env.environment-file }}
cat ${{ env.environment-file }}
- name: Setup miniconda
id: setup_miniconda
continue-on-error: true
uses: conda-incubator/setup-miniconda@505e6394dae86d6a5c7fbb6e3fb8938e3e863830 # v3.1.1
with:
miniforge-version: latest
use-mamba: 'true'
conda-remove-defaults: 'true'
environment-file: ${{ env.environment-file }}
activate-environment: 'coverage'
- name: ReSetup miniconda
if: steps.setup_miniconda.outcome == 'failure'
uses: conda-incubator/setup-miniconda@505e6394dae86d6a5c7fbb6e3fb8938e3e863830 # v3.1.1
with:
miniforge-version: latest
use-mamba: 'true'
conda-remove-defaults: 'true'
environment-file: ${{ env.environment-file }}
activate-environment: 'coverage'
- name: Conda info
run: |
mamba info
mamba list
- name: Build dpnp with coverage
id: build_coverage
uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3.0.2
with:
shell: bash
timeout_minutes: 60
max_attempts: 5
retry_on: error
command: |
. $CONDA/etc/profile.d/conda.sh
conda activate coverage
[ -f /opt/intel/oneapi/setvars.sh ] && source /opt/intel/oneapi/setvars.sh
git clean -fxd
python scripts/gen_coverage.py --verbose
- name: Total number of coverage attempts
run: |
echo "Total number of coverage attempts: ${{ steps.build_coverage.outputs.total_attempts }}"
- name: Upload coverage data to coveralls.io
run: |
echo "Processing pytest-coverage"
export DPNP_PYTEST_LCOV=$(find . -name dpnp_pytest.lcov)
coveralls-lcov -v -n $DPNP_PYTEST_LCOV > pytest-dpnp-c-api-coverage.json
# merge file with coverage data and upload
echo "Merging files with coverage data"
coveralls --service=github --merge=pytest-dpnp-c-api-coverage.json
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
COVERALLS_PARALLEL: true
coveralls:
name: Indicate completion to coveralls.io
needs: generate-coverage
runs-on: ubuntu-latest
container: python:3-slim
steps:
- name: Finished
run: |
pip3 install --upgrade coveralls==3.3.1
coveralls --service=github --finish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}