CUDA中的scipy.interpolate.griddata等效方法

8
我正在尝试在Python中执行Fitted Value Iteration(FVI)(涉及使用分段线性插值来逼近一个5维函数)。
scipy.interpolate.griddata对此非常有效。但是,我需要多次调用插值程序(因为FVI是基于MC的算法)。
因此,已知函数的点集是静态的(而且很大 - 比如说32k),但我需要逼近的点(这些点是原始点的小扰动)非常多(比如说32k x 5000)。
有没有将scipy.interpolate.griddata实现移植到CUDA的方法?或者,有没有一种方法可以更快地计算?
谢谢。
1个回答

1

对于分段线性插值,文档中提到 scipy.interpolate.griddata 使用 scipy.interpolate.LinearNDInterpolator 的方法,而后者使用 qhull 对输入点进行 Delaunay 三角剖分,然后执行标准的重心插值。对于每个点,您需要确定它在哪个超四面体内,然后使用其重心坐标作为超四面体节点值的插值权重。

三角剖分可能很难并行化,但您可以通过 scipy.spatial.Delaunay 访问 CPU 版本。其他两个步骤很容易并行化,尽管我不知道是否有任何免费可用的实现。

如果您的已知函数点位于规则网格上,则此处描述的方法在CUDA中特别容易实现,我已经使用过它的实际实现,尽管没有公开可用的。

所以我恐怕您将不得不自己完成大部分工作...


嗨,是的 - 我最终自己做了大部分工作。我查看了scipy.spatial.Delauny中find_simplex的实现,并发现只要有足够多的点,基本思想就可以很容易地并行化。所以基本上我运行2个循环 - 一个用于找到(并存储)每个MC样本的simplex,另一个用于查找存储的simplex并计算其重心坐标进行插值。它受视频内存限制,但速度非常快。 - user1726633
1
你有没有在任何地方上传过这个?我现在正在寻找一个cuda版本的griddata。 - TomNorway

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接