提高计算模板的Dask数组的性能

时间:2017-04-20 15:25:42

标签: python parallel-processing benchmarking dask

thisthis问题来看,似乎编程模板的Dask-ish方法是dask.array.map_blocks使用dask.array.ghostdask.array.map_overlap。所以我有以下代码:

def local_stencil(block):
    block[1:-1,1:-1,1:-1] = ( block[1:-1,1:-1,1:-1] + block[0:-2,1:-1,1:-1] + block[2:,1:-1,1:-1] + block[1:-1,0:-2,1:-1] + block[1:-1,2:,1:-1] + block[1:-1,1:-1,0:-2] + block[1:-1,1:-1,2:]) / 7.0;
    return block

def stencil(grid, iterations, workers):
    g = da.ghost.ghost(grid, depth={0:1, 1:1, 2:1}, boundary={0:0, 1:1, 2:0})
    chunk_size = int(math.pow( g.shape[0]**3/workers, 1/3))
    for iteration in range(iterations):
        g = da.from_array( g.map_blocks(local_stencil).compute(), chunks=chunk_size)
    return da.ghost.trim_internal(g, {0:1, 1:1, 2:1})

我不知道为什么与同一模板函数(local_stencil)的numpy版本相比,它的性能要差得多: enter image description here

我可以对代码进行任何更改以提高性能吗?

this其他答案,我了解当文件大于RAM内存时Dask是如何有用的,但是Dask是否也可以在矩阵乘法或卷积运算等计算绑定操作中提供帮助?

0 个答案:

没有答案