如何让 np.multiply 使用多个核心?

问题描述 投票:0回答:2

标题已经说了。我目前正在并行化我的代码,主要瓶颈是由两个三维

ndarrays
的元素乘法造成的。我的系统监视器显示只有一个
40
可用核心用于该操作。

我知道并行化是有效的,因为其他

scipy.fft
和 BLAS 操作是并行运行的。

到目前为止,我还没有在 SO 或 GitHub 上真正找到任何有意义的问题/问题。有点令人困惑的是没有其他人遇到过这个问题。我是不是错过了什么?

我尝试使用 BLAS 环境变量并使用

dgbmv
和扁平化数组来实现所需的行为,但我还没有成功。一个最小的代码示例是(在我的案例中涉及更大的
k
、3d 数组和广播):

import numpy as np
k = 1e6
x = np.random.rand(k)
y = np.random.rand(k)
z = np.multiply(x, y)
python numpy parallel-processing blas numpy-ufunc
2个回答
0
投票

您可以尝试查看 numexpr :https://pypi.org/project/numexpr/2.6.1/

这个库应该使用你所有的核心。

你可以这样使用它:

import numpy as np
import numexpr as ne

k = int(1e6)
x = np.random.rand(k)
y = np.random.rand(k)

z = ne.evaluate('x * y')

0
投票

请遵循以下代码: 这个库应该使用你所有的核心。

你可以这样使用它:

将 numpy 导入为 np 将 numexpr 导入为 ne

x = np.random.rand(k) y = np.random.rand(k)

z = ne.evaluate('x * y')

© www.soinside.com 2019 - 2024. All rights reserved.