Я пытаюсь использовать Haskell для вычисления статистических сумм моделей в статистической физике. Это включает в себя обход довольно больших списков конфигураций и суммирование различных наблюдаемых, что я хотел бы сделать как можно эффективнее.
Текущая версия моего кода находится здесь: https://gist.github.com/2420539
Некоторые странные вещи происходят при попытке выбрать между списками и векторами для перечисления конфигураций; в частности, для усечения списка с помощью V.toList . V.взять (3^n) . V.fromList
(где V
— это Data.Vector
) быстрее, чем просто использование take
, что кажется немного нелогичным. В обоих случаях список оценивается лениво.
Сам список строится с помощью iterate
; если вместо этого я максимально использую Vector
s и создаю список, используя V.iterateN
, снова он становится медленнее...
Мой вопрос в том, есть ли способ (кроме объединения V.toList
и V.fromList
в случайных местах кода), чтобы предсказать, какой из них будет самым быстрым? (Кстати, я компилирую все, используя ghc -O2
с текущей стабильной версией.)