2012-12-23 12 views
6

Próbuję wykonać iterację Fitted Value (FVI) w pythonie (polegającą na przybliżeniu funkcji 5-wymiarowej za pomocą interpolacji liniowej).scipy.interpolate.griddata odpowiednik w CUDA

scipy.interpolate.griddata doskonale się do tego nadaje. Jednak muszę wywołać procedurę interpolacji kilka tysięcy razy (ponieważ FVI jest algorytmem opartym na MC).

Zasadniczo zbiór punktów, w których funkcja jest znana, jest statyczny (i duży - na przykład 32k), ale punkty, które muszę przybliać (które są małymi zaburzeniami oryginalnego zestawu) są bardzo duże (32k x 5000 mówić).

Czy jest implementacja pliku scipy.interpolate.griddata, który został przeniesiony do CUDA? Alternatywnie, czy istnieje sposób, aby jakoś przyspieszyć obliczenia?

Dzięki.

Odpowiedz

1

Dla kawałek mądry interpolacji liniowej, docs powiedzieć, że scipy.interpolate.griddata wykorzystuje metody scipy.interpolate.LinearNDInterpolator, co z kolei używa qhull zrobić Delaunay tesellation punktów wejściowych, a następnie wykonuje standardowe barycentryczne interpolacji, w którym dla każdego punktu trzeba określ wewnętrznie, w którym hiperterhedronem jest każdy punkt, a następnie użyj jego barycentric coordinates jako wagi interpolacji dla wartości węzła hiper-czworościanu.

Teselacja jest prawdopodobnie trudna do zrównoleglenia, ale można uzyskać dostęp do wersji procesora z scipy.spatial.Delaunay. Pozostałe dwa kroki są łatwo zrównoleglone, chociaż nie znam żadnej z nich.

Jeśli Twoje znane punkty funkcjonalne znajdują się na regularnej siatce, metoda opisana pod numerem here jest szczególnie łatwa do wdrożenia w CUDA, a ja pracowałem przy jej rzeczywistych implementacjach, choć żadna z nich nie była publicznie dostępna.

Więc obawiam się, będziesz musiał zrobić większość prac sam ...

+0

Cześć, tak - ja nie ostatecznie kończy się robi większość prac sam. Spojrzałem na implementację find_simplex w scipy.spatial.Delauny i odkryłem, że podstawową ideę można z łatwością zrównoleglić dla wystarczającej liczby punktów. Zasadniczo uruchamiam 2 pętle - jedną, aby znaleźć (i zapisać) simpleks dla każdej próbki MC i jedną, aby wyszukać przechowywany simplex i obliczyć jego barycentryczne współrzędne dla interpolacji. Jest ograniczony przez pamięć wideo, ale jest bardzo szybki. – user1726633