[conda] Split GPU runtime into dal-gpu package#3551
[conda] Split GPU runtime into dal-gpu package#3551napetrov wants to merge 25 commits intouxlfoundation:mainfrom
Conversation
There was a problem hiding this comment.
Pull request overview
Splits oneDAL’s conda packaging so the CPU runtime (dal) is decoupled from the GPU/DPC++ runtime (dal-gpu), and updates validation to cover both CPU-only and CPU+GPU install scenarios.
Changes:
- Split packaging of DPC++ runtime libraries into a new
dal-gpuoutput and exclude them fromdal. - Update
dal-develtest requirements sodal-gpuis only required forcxx_compiler == dpcpp. - Update
test-devel.shto always run CPU examples and conditionally run oneAPI DPC++ examples when GPU libs are present.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 5 comments.
| File | Description |
|---|---|
| conda-recipe/test-devel.sh | Adds conditional execution for DPC++ examples and keeps CPU examples always running. |
| conda-recipe/pack.sh | Splits copying of CPU vs DPC++ runtime shared libraries into dal vs dal-gpu. |
| conda-recipe/meta.yaml | Introduces dal-gpu output and adjusts tests/requirements accordingly. |
| conda-recipe/build.sh | Adds a build-time workaround to ensure an unversioned libtbb.so is available. |
- dal-devel: skip intel64 symlink creation for *_dpc* runtime libs (CPU-oriented devel layout, aligns with dal-gpu split) - test-devel.sh: detect dal-gpu via versioned or unversioned libonedal*_dpc.so* - test-devel.sh: fail clearly if example output glob is empty instead of executing a literal wildcard pattern
|
Addressed latest review comments in follow-up commits:
This should address the recent Copilot notes and the MKL runtime dependency concern. |
Create local data symlink in oneapi/cpp and oneapi/dpc test runs when data is located at ../data. This matches test_tmp source_files layout and avoids runtime file-open aborts in examples.
If examples/<iface>/data is missing in test_tmp, seed it from /data before running examples. Keep local data symlink for existing relative path expectations.
…lookup pack.sh: copy examples/oneapi/data/*.csv into PREFIX/share/oneDAL/data so they survive into the test environment where work_dir is unavailable (conda-build renames work/ before running tests, making source_files empty). test-devel.sh: symlink CONDA_PREFIX/share/oneDAL/data as ../data before running oneapi/cpp and oneapi/dpc examples so get_data_path() resolves CSV files correctly.
|
@napetrov If having |
we have |
Move ignore_run_exports_from: dpcpp_impl_linux-64 from the global build: section to the dal output build: section only. Previously the global setting suppressed run_exports for ALL outputs including dal-gpu, forcing a manual intel-sycl-rt pin in dal-gpu run:. With per-output placement: - dal (CPU): ignores dpcpp_impl run_exports → no GPU/SYCL runtime dep - dal-gpu: does NOT ignore run_exports → automatically inherits the compatible intel-sycl-rt pin declared by dpcpp_impl_linux-64, keeping SYCL runtime version in sync with the build compiler
All outputs except dal-gpu should not pull GPU/SYCL runtime. Add ignore_run_exports_from: dpcpp_impl_linux-64 to dal-include, dal-static, and dal-devel outputs (dal already had it).
|
The CI error: So looks like something went wrong with the pinning. |
|
Note that the version number is fetched from whatever is the last tag pushed, so 2025.10 is expectable, but it should be able to find the GPU package created in the recipe. |
| - mkl-devel | ||
| - mkl-static | ||
| - mkl-devel-dpcpp # [ cxx_compiler == "dpcpp" ] | ||
| - {{ pin_subpackage('dal-gpu', exact=True) }} # [ cxx_compiler == "dpcpp" ] |
There was a problem hiding this comment.
Something here is not working correctly. It still gets pulled when it shouldn't. Either that, or dal-gpu is being built when it should.
|
|
||
| - name: dal-gpu | ||
| build: | ||
| skip: true # [cxx_compiler != "dpcpp" or not linux64] |
There was a problem hiding this comment.
This one has:
[cxx_compiler != "dpcpp" or not linux64]
But dal-devel has:
{{ pin_subpackage('dal-gpu', exact=True) }} # [ cxx_compiler == "dpcpp" ]
Summary
libonedal_dpc.so) fromdalinto dedicateddal-gpuconda packagedalas CPU runtime package (libonedal_core.so,libonedal_thread.so)dal-develtest requirements to includedal-gpuonly forcxx_compiler == dpcpptest-devel.shto always run CPU examples and runoneapi/dpcexamples only when GPU runtime is installedMotivation
Need explicit validation of two independent scenarios:
dalwithoutdal-gpu) still passes CPU examplesdal+dal-gpu) enables DPC++ runtime coverageThis removes coupling between CPU runtime delivery and DPC++ runtime delivery in conda packaging.
Testing
bash -n conda-recipe/test-devel.shgxx/clangxx/dpcpp)Naming
dal-gpu