我有(x,y,T)的2400个点,并希望通过RBF插值将它们插值到261 x 157网格中。使用dask
,可以在
Windows笔记本电脑。但是,具有相同数据的相同代码在我的ubuntu vps上运行速度非常慢,而该笔记本电脑具有类似的计算能力。
# input: xp, yp, t, xx, yy
import dask.array as da
chunks = 1, xx.shape[1]
rbf = Rbf(xp, yp, t, function='linear') # ~1.5s on my laptop, ~35s on my vps
x_dask = da.from_array(xx, chunks=chunks)
y_dask = da.from_array(yy, chunks=chunks)
t_dask = da.map_blocks(rbf, x_dask, y_dask)
self.data = t_dask.compute() # ~3.7s on my laptop, >10 min on my vps!
我的笔记本电脑上的 numpy
已链接到MKL,并已链接到vps上的openblas(已安装pip)。我还尝试了安装numpy
的conda,该conda与vps上的MKL链接时没有明显改善。我还运行了here的基准测试,看两者之间的差异是否真的那么大,但是它们产生的结果相似:
==Laptop
Dotted two 2048x2048 matrices in 0.80 s.
Dotted two vectors of length 262144 in 0.25 ms.
SVD of a 1024x512 matrix in 0.28 s.
Cholesky decomposition of a 1024x1024 matrix in 0.06 s.
Eigendecomposition of a 1024x1024 matrix in 2.58 s.
==Ubuntu, pip
Dotted two 2048x2048 matrices in 0.82 s.
Dotted two vectors of length 262144 in 0.14 ms.
SVD of a 1024x512 matrix in 0.37 s.
Cholesky decomposition of a 1024x1024 matrix in 0.04 s.
Eigendecomposition of a 1024x1024 matrix in 2.55 s.
==Ubuntu, conda
Dotted two 2048x2048 matrices in 0.65 s.
Dotted two vectors of length 262144 in 0.20 ms.
SVD of a 1024x512 matrix in 0.29 s.
Cholesky decomposition of a 1024x1024 matrix in 0.06 s.
Eigendecomposition of a 1024x1024 matrix in 2.21 s.
我将点数减少到100,而在vps上rbf
仍然要慢180倍。我还尝试从代码中删除dask
部分,但未做任何更改。
所以现在我不知道发生了什么以及如何解决它。我的笔记本电脑上的numpy
和scipy
是从Christoph Gohlke下载的,通过此链接编译的二进制文件是否具有我不知道的某些特殊优化?感谢您的任何想法!