Python joblib在Windows 10中只使用了一半的内核(SMT被禁用)

Python joblib在Windows 10中只使用了一半的内核(SMT被禁用),python,windows,multiprocessing,cpu,joblib,Python,Windows,Multiprocessing,Cpu,Joblib,我在Windows 10上以以下方式运行并行数据帧处理: Parallel(n_jobs=28)( delayed(function)(group) for name, group in grouped_data) 在Ryzen Master中SMT被禁用,我在任何监控软件中只看到32个物理内核。 在执行脚本时,我只看到16个内核加载了80-90%,而其他16个内核都处于空闲状态。 如果我启用SMT(32个物理核和64个逻辑核)并使用 n_jobs = 60 然后我看到了相同的画面:

我在Windows 10上以以下方式运行并行数据帧处理:

Parallel(n_jobs=28)(
    delayed(function)(group) for name, group in grouped_data)
在Ryzen Master中SMT被禁用,我在任何监控软件中只看到32个物理内核。 在执行脚本时,我只看到16个内核加载了80-90%,而其他16个内核都处于空闲状态。 如果我启用SMT(32个物理核和64个逻辑核)并使用

n_jobs = 60
然后我看到了相同的画面:只有前16个物理核和前32个逻辑核被加载,其他的空闲

由于一些业务限制,我无法在Linux上安装和检查它。
有什么问题

如果设置
n_jobs=-1
会发生什么?如果将
后端
参数与值
多处理
一起使用会发生什么?启用SMT会导致值错误:最多需要63个句柄,获得长度为65的序列。禁用SMT不会改变这种情况。我是洛基。后端多处理会导致系统在计算开始后立即重新启动目标函数的计算时间与并行化开销相比可能相对较短。AFAIK
joblib
的两个mp后端通过单个队列(如
multiprocessing.Pool
)为其工作人员提供数据,如果您也传输相对大量的数据,这可能成为瓶颈。基本上是我在中描述的
多处理.Pool
场景。这只是一种可能的情况,我们不知道您在
函数中实际做了什么,因此这也可能是由于长时间的I/O操作。平均作业计算时间约为15秒,但它限制在一半的内核(0-15)上,并且从不使用16-31It报告16,这看起来很可疑。有趣的是,如果我同时启动这个脚本两次,那么我会看到100%的内核和CPU负载