5

假设我有一台 16 核的机器,以及一个令人尴尬的并行程序。我使用了许多 numpy 点积并添加了 numpy 数组,如果我不使用多处理,那将是一件很容易的事:确保 numpy 是针对使用多线程的 blas 版本构建的。但是,我正在使用多处理,并且所有内核一直在努力工作。在这种情况下,使用多线程 blas 有什么好处吗?

大多数操作是(blas)类型 1,有些是类型 2。

4

2 回答 2

6

您可能需要小心假设您的代码实际上是使用多线程 BLAS 调用。相对较少的 numpy 运算符实际上使用底层 BLAS,并且相对较少的 BLAS 调用实际上是多线程的。numpy.dot使用 BLAS或dot,具体取决于操作,但其中通常只有多线程,因为这样做对 O(N) 和 O(N^2) BLAS 调用几乎没有任何性能优势。如果您将自己限制在 1 级和 2 级 BLAS 操作,我怀疑您实际上是否在使用任何多线程 BLAS 调用,即使您使用的是使用多线程 BLAS 构建的 numpy 实现,例如 Atlas 或 MKL。gemvgemmgemm

于 2011-10-14T09:42:58.880 回答
2

如果您已经在使用多处理,并且所有内核都处于最大负载,那么添加将等待处理器的线程将几乎没有好处(如果有的话)。

根据您的算法和您正在做的事情,使用一种类型可能比另一种更有益,但这非常依赖。

于 2011-10-14T00:17:50.563 回答