假设我有一台16核计算机和一个令人尴尬的并行程序。我使用了很多numpy点积和numpy数组,如果我不使用多处理,那就很容易了:确保numpy是针对使用多线程的blas版本构建的。但是,我使用的是多处理,并且所有内核一直都在努力工作。在这种情况下,使用多线程 Blade 有什么好处?
大多数操作是(blas)类型1,有些是类型2。
最佳答案
您可能需要谨慎一点,即您的代码实际上是使用多线程BLAS调用的假设。实际使用底层BLAS的numpy运算符相对较少,并且实际上是多线程的BLAS调用相对较少。 numpy.dot
使用BLAS dot
,gemv
或gemm
,具体取决于操作,但是其中只有gemm
通常是多线程的,因为这样做对BLAS的O(N)和O(N ^ 2)调用几乎没有任何性能上的好处。如果您将自己限制在1级和2级BLAS操作上,那么即使您使用的是由多线程BLAS构建的numpy实现(例如Atlas或MKL),我也怀疑您实际上是否在使用任何多线程BLAS调用。
关于python - 在Python中将多线程blas实现与多处理一起使用是否值得?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7761859/