【发布时间】:2016-10-18 20:10:53
【问题描述】:
在许多情况下,科学家使用 Stencil 模拟系统的动力学,这是在网格上对数学运算符进行卷积。通常,此操作会消耗大量计算资源。 Here 很好地解释了这个想法。
在 numpy 中,编写 2D 5 点模板的规范方法如下:
for i in range(rows):
for j in range(cols):
grid[i, j] = ( grid[i,j] + grid[i-1,j] + grid[i+1,j] + grid[i,j-1] + grid[i,j+1]) / 5
或者,更有效地,使用切片:
grid[1:-1,1:-1] = ( grid[1:-1,1:-1] + grid[0:-2,1:-1] + grid[2:,1:-1] + grid[1:-1,0:-2] + grid[1:-1,2:] ) / 5
但是,如果你的网格真的很大,它不会在你的记忆中修复,或者如果卷积操作真的很复杂需要很长时间,则使用并行编程技术来克服这个问题,或者只是为了得到结果更快。像Dask 这样的工具允许科学家以并行几乎透明的方式自行对模拟进行编程。目前,Dask 不支持项目分配,所以,我如何使用 Dask 编写模板。
【问题讨论】: