【问题标题】:scipy.interpolate.griddata equivalent in CUDACUDA 中的 scipy.interpolate.griddata 等效项
【发布时间】:2012-12-10 12:11:29
【问题描述】:

我正在尝试在 python 中执行拟合值迭代 (FVI)(涉及使用分段线性插值逼近 5 维函数)。

scipy.interpolate.griddata 非常适合这个。但是,我需要调用插值程序几千次(因为 FVI 是基于 MC 的算法)。

所以基本上,已知函数的点集是静态的(并且很大 - 比如说 32k),但是我需要近似的点(它们是原始集的小扰动)非常大(比如 32k x 5000 )。

是否有 scipy.interpolate.griddata 已移植到 CUDA 的实现? 或者,有没有办法以某种方式加快计算速度?

谢谢。

【问题讨论】:

    标签: python cuda scipy pycuda


    【解决方案1】:

    对于分段线性插值,文档说 scipy.interpolate.griddata 使用 scipy.interpolate.LinearNDInterpolator 的方法,而 qhull 又使用 qhull 对输入点进行 Delaunay 曲面细分,然后执行标准重心插值,其中每个点您必须确定每个点在哪个超四面体内部,然后使用其barycentric coordinates 作为超四面体节点值的插值权重。

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

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

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

    【讨论】:

    • 嗨,是的 - 我最终还是自己完成了大部分工作。我查看了 scipy.spatial.Delauny 中 find_simplex 的实现,发现基本思想可以很容易地并行化到足够多的点。所以基本上我运行了 2 个循环 - 一个用于查找(并存储)每个 MC 样本的单纯形,另一个用于查找存储的单纯形并计算其重心坐标以进行插值。它受视频内存的限制,但速度非常快。
    • 你有上传过这个吗?我现在正在寻找一个 cuda 版本的 griddata。
    猜你喜欢
    • 2019-01-24
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 2021-08-09
    • 2020-11-15
    • 2011-08-26
    • 2013-08-21
    • 1970-01-01
    相关资源
    最近更新 更多