2012-12-23 49 views
6

我試圖在Python中執行擬合值迭代(FVI)(包括使用分段線性插值來近似5維函數)。在CUDA中相當於scipy.interpolate.griddata

scipy.interpolate.griddata完美適用於此。但是,我需要調用插值程序幾千次(因爲FVI是基於MC的算法)。所以基本上,已知函數的點集是靜態的(大的 - 比方說32k),但是我需要近似的點(它們是原始集合的小擾動)非常大(32k x 5000說)。

scipy.interpolate.griddata是否存在一個已經移植到CUDA的實現?或者,有沒有辦法加快計算速度?

謝謝。

回答

1

對於分段線性插值,所述文檔說scipy.interpolate.griddata使用的scipy.interpolate.LinearNDInterpolator的方法中,又使用qhull做輸入點的德洛奈tesellation,然後執行標準重心插值,其中對於每個點,你必須確定每個點在哪個高等級面內,然後使用它的barycentric coordinates作爲高等級面元節點值的內插權重。

tesellation可能很難並行化,但您可以通過scipy.spatial.Delaunay訪問CPU版本。其他兩個步驟很容易並行化,但我不知道有什麼免費的實現。

如果您的已知函數點在常規網格上,則描述的方法here特別容易在CUDA中實現,並且我已經與它的實際實現一起工作,儘管沒有公開可用。

那麼恐怕你將不得不做的大部分工作自己...

+0

你好,是的 - 我沒有最終結束了做大部分工作的自己。我在scipy.spatial.Delauny中查看了find_simplex的實現,發現基本思想可以很容易地並行化得足夠多。所以基本上我運行了2個循環 - 一個爲每個MC樣本查找(和存儲)單純形,另一個查找存儲的單形並計算其插值的重心座標。它受視頻內存限制,但速度非常快。 – user1726633