numpy 什么时候是xarrays `xr,apply_ufunc(...dask='parallelized')`快?

zpgglvta  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(78)

我打开了ERA5 Google Cloud Zarr存档中的数据。我做了一些重构(改变时间分辨率,只选择北方半球,等等。),其中操作应用于dask数据。
这就是xarray DataArray的样子:

然后我应用一个numpy函数,它使用xr.apply_ufunc处理多维数据:

我测试了两个场景,一个是先加载数据,然后在numpy上应用ufunc,另一个是在dask数据上应用ufunc,然后计算结果。

选项一:首先计算数据)

”””这是快速的。**

选项二:稍后计算结果)

”””这是缓慢的。**

提问:为什么选择1会更快?

我认为dask=parallelized将需要完成的工作分布在多个内核上。numpy也是这样做的吗?为什么将ufunc应用到numpy上的速度还快得多?
一旦数据集变大,首先将数据加载到内存中将是不可行的(选项1)。因此,我想确保我没有做一些愚蠢的事情使dask=parallelized非常慢。
谢谢。

7xllpg7q

7xllpg7q1#

如果数组足够小,可以轻松地放入内存中,那么旋转dask工作进程的开销,调度这些工作进程以及拆分数据的一般I/O,计算数据并将其拼接在一起会使dask慢得多。
Dask有助于扩大规模。它不利于加速完全适合内存的数组计算。
如果你所做的是愚蠢的真的取决于函数_to_lon_lat在做什么。但一般来说,如果你在该函数中所做的事情可以用原生的xarray函数来完成,那么你不应该使用apply_ufunc,而应该使用那些xarray函数,因为它们都可以使用dask。

相关问题