问题描述
我在一台每核 4 个线程的机器上使用 scipy.cKDTree.query(data,n_jobs=4) 和 export OMP_NUM_THREADS=4。我原以为脚本运行时会有 400% 的 cpu 使用率,但是,似乎只有 200% 左右的 cpu 使用率与 numpy 数组一起使用。使用压缩数据可以达到 400%,但只是间歇性的。我想知道 scipy.cKDTree.query 的最佳数据结构是什么?
这是简单的shell脚本(script.sh):
#!/bin/sh
export OMP_NUM_THREADS=4
python -u stackOverflowExample.py > log.python 2>&1 &
这是压缩数据的简单 python 代码 (stackOverflowExample.py)(达到 400% cpu,但只有短暂的 3 次,中间又恢复到 100% cpu):
from scipy import spatial
import numpy as np
x,y,z = np.mgrid[2.111:400,2.222:640,2.543:48]
data = list(zip(x.ravel(),y.ravel(),z.ravel()))
x,z = np.mgrid[1.1:400,1.5:640,1.125:48]
data2 = list(zip(x.ravel(),z.ravel()))
tree = spatial.cKDTree(data)
for i in range(3):
distance,index = tree.query(data2,n_jobs=4)
我也用 numpy 数组尝试了类似的代码(达到大约 200% cpu 并且基本保持不变):
from scipy import spatial
import numpy as np
import time
x,2.543:48]
data3 = np.array([x.ravel(),z.ravel()])
x,1.125:48]
data4 = np.array([x.ravel(),z.ravel()])
data5=data4[:,:data3.shape[1]]
tree = spatial.cKDTree(data3)
for i in range(50):
distance,index = tree.query(data5,n_jobs=4)
- Python 版本:3.6.5
- Scipy 版本:1.1.0
- Numpy 版本:1.14.3
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)