Ian*_*ore 5 python multithreading numpy multiprocessing blas
假设我有一台16核机器和一个令人尴尬的并行程序.我使用大量的numpy dot产品和添加numpy数组,如果我不使用多处理,那将是一个明智的选择:确保numpy是针对使用多线程的blas版本构建的.但是,我正在使用多处理,所有核心都在努力工作.在这种情况下,使用多线程blas有什么好处吗?
大多数操作是(blas)类型1,有些是类型2.
小智 6
您可能需要对您的代码实际使用多线程BLAS调用的假设有点小心.相对较少的numpy运算符实际上使用底层BLAS,而相对较少的BLAS调用实际上是多线程的.numpy.dot使用BLAS dot,gemv或者gemm,取决于操作,但是那些只是gemm通常是多线程的,因为这样做的O(N)和O(N ^ 2)BLAS调用很少有任何性能优势.如果您将自己限制为1级和2级BLAS操作,我怀疑您实际上是在使用任何多线程BLAS调用,即使您使用的是使用多线程BLAS(如Atlas或MKL)构建的numpy实现.
如果您已经在使用多处理,并且所有内核都处于最大负载,那么添加等待处理器的线程几乎没有任何好处(如果有的话)。
根据您的算法和您正在执行的操作,使用一种类型可能比使用另一种类型更有利,但这非常依赖。
| 归档时间: |
|
| 查看次数: |
2056 次 |
| 最近记录: |