Debian11/Ubuntu20.04下libatlas3、liblapacke与libopenblas0的交互及配置问题
Debian 11 / Ubuntu 20.04 BLAS相关库交互问题解答
如何选择活跃的OpenBLAS版本
Debian/Ubuntu默认使用update-alternatives工具管理同一类库的多版本共存,切换OpenBLAS活跃版本直接执行以下命令:
sudo update-alternatives --config libopenblas.so.0-x86_64-linux-gnu
执行后会列出所有已安装的OpenBLAS分支(openmp/pthread/serial),输入对应选项的序号回车即可完成切换,更改即时生效。
如果需要将系统全局的默认BLAS实现从OpenBLAS切换为libatlas3-base,或者反过来,可以执行:
sudo update-alternatives --config libblas.so.3-x86_64-linux-gnu
切换后libatlas3-base、liblapacke是否会自动调用活跃版本
- liblapacke会自动调用当前系统设置的活跃BLAS实现:Debian/Ubuntu官方源的liblapacke编译时默认动态链接通用BLAS接口,接口指向的实际库由
update-alternatives管理,切换活跃BLAS版本后无需额外配置即可生效。 - libatlas3-base本身是独立的BLAS实现,和OpenBLAS属于平级的竞争关系,它不会调用OpenBLAS:只有当你将系统全局BLAS实现设置为ATLAS时,上层应用才会调用libatlas3-base,否则libatlas3-base仅作为可选备选项存在,不会被lapacke或其他默认链接系统BLAS的程序调用。
如何查询当前实际调用的底层BLAS实现
有三种常用方法:
- 查看alternatives的当前配置
执行命令:
update-alternatives --query libblas.so.3-x86_64-linux-gnu
输出中Value字段对应的路径就是当前系统默认的BLAS实现路径。
2. 查看liblapacke的动态链接依赖
执行命令:
ldd /usr/lib/x86_64-linux-gnu/liblapacke.so.3 | grep blas
输出结果就是liblapacke实际绑定的BLAS库路径。
3. 运行时验证正在运行的程序调用的BLAS版本
如果要确认某一个运行中的进程实际加载的BLAS库,替换命令中的<PID>为对应进程ID后执行:
cat /proc/<PID>/maps | grep blas
输出中出现的路径就是该进程实际加载的BLAS库文件路径。
内容的提问来源于stack exchange,提问作者KJ7LNW
相关产品推荐
相关产品推荐

