2013-03-08 3 views
2

Я пользуюсь рекламной библиотекой http://hackage.haskell.org/package/ad, и я ищу самую быструю проходимую для прохождения ее различные функции.Что является самым быстрым экземпляром Traversable в стране

В идеале это была бы структура данных, которая использует непрерывный массив памяти, поэтому я могу передать его числовому решателю в мире C++.

Какой у меня лучший выбор?

+0

Я не верю, что есть какие-либо структуры, как реализуют 'Traversable' и существуют как массив памяти, который может быть передан непосредственно на C/C++. –

+0

Можно ли создать плагин GHC, который каким-то образом переключит представление, или это слишком опасно и сложно считать возможным? –

ответ

6

структура данных, которая использует непрерывный массив памяти, поэтому я могу передать его числовому решателю в мире C++.

Используйте Storable экземпляр unboxed Vector type.

«Storable» ограничения - будучи в состоянии быть переданы C - ограничивает ваши доступные типы данных много. Векторы поддерживают очень быстро bulk operations. Другой альтернативой могут быть массивы Repa.

Однако, вы будете ограничены, так как для пакета ad требуется Functor и Traversable, но они предоставляются только для полноты - и фактически сериализуются в списки, чтобы получить экземпляр с возможностью перемещения. Traversable и Storable никогда не будут смешивать, так как Storable ограничивается классом определенными типами unboxed.

+0

Я предполагаю, что если вектор конвертируется в списки и из него, возможно, быстрее будет использовать списки в некоторых случаях. –

+0

@ Jonathan Fischoff это только удобный способ ввода/вывода данных из/в векторную инфраструктуру. Обычно прецессирующие высокоэффективные векторы не должны обрабатывать списки вообще. – leventov

+0

@leventov Я согласен, если бы я мог использовать AD-пакет, который хорошо играл с Vector, но поскольку это не так, его непонятное использование Vectors traversable будет лучше, чем просто использовать список ... или это так? –

2

instance Traversable (Data.Functor.Constant a)

(извините!)

Смежные вопросы