【发布时间】:2019-12-17 11:00:40
【问题描述】:
我在 Python 3.6.6 中调用 cvxopt.glpk.ilp,cvxopt==1.2.3 来解决一个大约有 500k 布尔变量的布尔优化问题。它在 1.5 小时内解决,但它似乎只在一个核心上运行!如何让它在所有或特定的一组内核上运行?
装有 Linux Ubuntu x86_64 的服务器有 16 或 32 个物理内核。我的进程亲和力是 64 核(我假设是由于超线程)。
> grep ^cpu\\scores /proc/cpuinfo | uniq
16
> grep -c ^processor /proc/cpuinfo
64
> taskset -cp <PID>
pid <PID> current affinity list: 0-63
但是top 显示我的进程只占用了 100% 的 CPU,htop 显示只有一个核心 100% 繁忙(其他一些可能被其他用户轻微加载)。
我设置OMP_NUM_THREADS=32 并再次启动我的程序,但仍然是一个核心。重新启动服务器本身有点困难。我没有对服务器的 root 访问权限。
我从一家公司的内部仓库安装了cvxopt,它应该是 PyPI 的镜像。以下库安装在/usr/lib:liblapack, liblapack_atlas, libopenblas, libblas, libcblas, libatlas。
【问题讨论】: