Dask线程如何与OpenBLAS / MKL /…交互?

时间:2018-10-19 15:09:21

标签: python numpy dask

根据What threads do Dask Workers have active?,一个快活的工人拥有

  

在其中运行任务的线程池。

documentation

  

如果本质上您的计算大部分是数字运算(例如NumPy和Pandas计算)并完全释放GIL,那么建议运行具有多个线程和一个进程的dask-worker进程。这样可以降低通信成本并通常简化部署。

NumPy的内部使用MKL或OpenBLAS,在正常执行代码时,其线程数等于环境变量OPENBLAS_NUM_THREADSMKL_NUM_THREADS

这些参数和dask的计算线程如何一起工作?

1 个答案:

答案 0 :(得分:1)

简短答案

更长的答案

默认情况下,大多数现代BLAS / LAPACK实现使用的线程数与逻辑内核数一样多。 Dask将执行相同的操作(假设使用默认配置)。如果您正在执行L3 BLAS操作,那么这可能导致活动线程多于拥有核心的线程,并且总体性能会下降。

我通常设置XXX_NUM_THREADS=1并一起使用时依靠Dask进行并行处理。