2013-03-08 38 views
2

我正在使用廣告庫http://hackage.haskell.org/package/ad,我正在尋找最快的遍歷來傳遞給它的各種功能。什麼是土地中最快的Traversable實例

理想情況下,它將是一個使用連續內存數組的數據結構,因此我可以將它傳遞給C++世界中的數值求解器。

我最好的選擇是什麼?

+0

我不相信,有一些都實現'Traversable'而存在的,可以直接傳遞到C/C++的存儲陣列的任何結構。 – 2013-03-08 06:36:05

+0

是否可以創建一個GHC插件,以某種方式切換該表示,或者這太不安全,難以被認爲是可行的? – 2013-03-08 15:04:21

回答

6

一個使用連續內存數組的數據結構,所以我可以將它傳遞給C++世界中的數值求解器。

使用的unboxed Vector type.

的「耐儲藏」約束可存儲的實例 - 能夠被傳遞到C - 限制您的可用數據類型很多。矢量支持非常快bulk operations。另一種選擇是Repa陣列。

但是,由於ad軟件包需要Functor和Traversable,所以您將受到限制,但它們僅用於完整性 - 並且實際上序列化爲列表以獲得可遍歷實例。可穿越和可存儲不會混合,因爲可存儲是受限於某些未裝箱類型的類。

+0

我的猜測是,如果Vector正在向列表中轉換,則在某些情況下使用列表可能會更快。 – 2013-03-08 18:29:49

+0

@Jonathan Fischoff它只是一個方便的方法來向/從矢量基礎設施輸入/輸出數據。通常高性能的矢量處理不應該處理列表。 – leventov 2013-03-08 19:07:39

+0

@leventov我同意,如果我可以選擇使用適合Vector的AD包,但由於情況並非如此,所以不清楚使用Vector穿越將比使用列表更好...還是它? – 2013-03-08 19:55:10

2

instance Traversable (Data.Functor.Constant a)

(對不起!)