interpolate griddata python cuda scipy pycuda

interpolate - griddata python



scipy.interpolate.griddata equivalente en CUDA (1)

Para la interpolación lineal por partes, los documentos dicen que scipy.interpolate.griddata usa los métodos de scipy.interpolate.LinearNDInterpolator , que a su vez usa qhull para hacer una tesellation Delaunay de los puntos de entrada, luego realiza una interpolación baricéntrica estándar, donde para cada debes determinar en qué hipertetraedro se encuentra cada punto, luego usa sus coordenadas baricéntricas como los pesos de interpolación para los valores del nodo hipertetraedro.

El tesellation probablemente sea difícil de paralelizar, pero puede acceder a la versión de CPU con scipy.spatial.Delaunay . Los otros dos pasos se pueden paralelizar fácilmente, aunque no conozco ninguna implementación disponible de manera gratuita.

Si sus puntos de función conocida están en una cuadrícula regular, el método descrito aquí es especialmente fácil de implementar en CUDA, y he trabajado con implementaciones reales de él, aunque ninguno disponible públicamente.

Así que me temo que tendrás que hacer la mayor parte del trabajo tú mismo ...

Estoy tratando de realizar la iteración de valor ajustado (FVI) en python (que implica aproximar una función de 5 dimensiones mediante interpolación lineal por partes).

scipy.interpolate.griddata funciona perfectamente para esto. Sin embargo, necesito llamar a la rutina de interpolación miles de veces (ya que FVI es un algoritmo basado en MC).

Básicamente, el conjunto de puntos donde se conoce la función es estático (y grande, digamos 32k), pero los puntos que necesito aproximar (que son pequeñas perturbaciones del conjunto original) son muy grandes (32k x 5000 dicen).

¿Existe una implementación de lo que hace scipy.interpolate.griddata que ha sido portado a CUDA? alternativamente, ¿hay alguna manera de acelerar el cálculo de alguna manera?

Gracias.