Intel oneAPI是Intel公司的高性能异构计算工具集,包含有Intel C++编译器、Intel Fortran编译器、Intel MKL数学库等组件。要在基于APT包管理器的操作系统(如Ubuntu)上安装Intel oneAPI,可以使用Intel提供的APT源进行安装。然而,使用官方文档中列出的操作步骤安装后,安装的软件会被APT自动更新并导致潜在的兼容性问题。使用带版本号的包名可以解决这一问题。
问题分析
然而,官方文档中列出的meta-package,如intel-basekit
、intel-hpckit
等只包含了对实际软件包的依赖,而没有限制版本。以intel-basekit
为例,2023.0.0-25537
版本的intel-basekit
依赖intel-oneapi-compiler-dpcpp-cpp (>= 2023.0.0-25370)
,即使我们在APT中手动固定intel-basekit
的版本,其依赖项intel-oneapi-compiler-dpcpp-cpp
也会自动升级。因此,安装这些meta-package后,若使用apt upgrade
和apt autoremove
命令则会自动升级到最新版本,引起潜在的兼容性问题。按照Ubuntu系统的包管理逻辑,一般apt upgrade
不会进行不兼容的大版本升级,只会进行小版本更新,但Intel提供的APT源并无此保证。
通过命令apt list intel-basekit-*
搜索相关的包名发现,与Ubuntu官方源类似,Intel也提供了带有版本号后缀的固定版本的meta-package。例如,intel-basekit-2022.3.1
中的依赖项如下所示,注意到其主要的、非共享组件都具有特定的版本号。使用这些带有版本号后缀的包替代原有的intel-basekit
包则可以防止apt upgrade
更新oneAPI的大版本。
intel-basekit-getting-started (>= 2022.3.1-17310)
intel-oneapi-common-vars (>= 2022.2.1-14969)
intel-oneapi-common-licensing-2022.2.1
intel-oneapi-dpcpp-ct-2022.2.1
intel-oneapi-dev-utilities-2021.7.1
intel-oneapi-dpcpp-debugger-2021.7.1
intel-oneapi-libdpstd-devel-2021.7.2
intel-oneapi-diagnostics-utility (>= 2022.1.2-14995)
intel-oneapi-tbb-devel-2021.7.1
intel-oneapi-ccl-devel-2021.7.1
intel-oneapi-compiler-dpcpp-cpp-2022.2.1
intel-oneapi-dal-devel-2021.7.1
intel-oneapi-onevpl-devel-2022.2.5
intel-oneapi-ipp-devel-2021.6.2
intel-oneapi-ippcp-devel-2021.6.2
intel-oneapi-mkl-devel-2022.2.1
intel-oneapi-advisor (>= 2022.3.1-15323)
intel-oneapi-python (>= 2022.2.1-17274)
intel-oneapi-vtune (>= 2022.4.1-16919)
intel-oneapi-dnnl-devel (>= 2022.2.1-16994)
如果已经安装了intel-basekit
,运行命令apt list intel-basekit
可以看到当前已安装的版本(比如2022.3.1-17310
)。此时,通过以下命令即可转换为固定版本的intel-basekit
:
sudo apt install intel-basekit-2022.3.1
sudo apt remove intel-basekit
sudo apt autoremove
对于其他的工具包,如intel-hpckit
,也可以通过类似的方式安装固定版本的meta-package。
结论
使用官方APT源安装Intel oneAPI时,要想避免安装的软件包被自动更新,可以通过apt list intel-<toolkit>-*
命令(其中<toolkit>
为官方文档中的工具包名称,如basekit
、hpckit
等)搜索带版本号后缀的meta-package,安装这些带版本号的meta-package则不会被APT自动更新。
留言
有想法?请给我们留言!您的留言不会直接显示在网站内。