在Python中结合使用多线程BLAS实现和多进程划算吗?

5 投票
2 回答
2441 浏览
提问于 2025-04-17 04:17

假设我有一台16核的机器,并且我在运行一个可以轻松并行处理的程序。我使用了很多numpy的点积和数组相加的操作。如果我不使用多进程,那就简单了:只需要确保numpy是和一个支持多线程的blas版本一起编译的就行了。然而,我现在在使用多进程,而且所有的核心都在努力工作。在这种情况下,使用一个多线程的blas还有什么好处吗?

大部分操作都是(blas)类型1,有一些是类型2。

2 个回答

2

如果你已经在使用多进程,而且所有的处理器核心都在满负荷运转,那么再加上等待处理器的线程,几乎没有什么好处。

根据你的算法和具体操作,使用某一种方式可能会更有利,但这要看具体情况而定。

6

你可能需要对你的代码是否真的在使用多线程的BLAS调用保持一点谨慎。其实,很多numpy的操作并不真正使用底层的BLAS库,而且真正支持多线程的BLAS调用也不多。numpy.dot这个函数会根据不同的操作使用BLAS中的dotgemvgemm,但在这几种中,通常只有gemm是支持多线程的,因为对于O(N)和O(N^2)的BLAS调用来说,使用多线程通常不会带来性能上的好处。如果你只在使用一级和二级的BLAS操作,我怀疑你实际上根本没有在使用任何多线程的BLAS调用,即使你使用的是像Atlas或MKL这样的多线程BLAS构建的numpy实现。

撰写回答