Время выполнения функции Haskell



есть ли простой метод для вычисления времени выполнения функции в Haskell?

548   5  

5 ответов:

простые вещи это просто :set +s на ghci, а затем вы можете увидеть время выполнения всего, что вы запускаете, а также использование памяти.

на criterion пакета было сделано специально, чтобы сделать это хорошо.

смотрите, если http://hackage.haskell.org/package/timeit подходит для ваших нужд.

тест времени выполнения функции включен в критерий.Измерение

например, если я хочу, чтобы захватить время someIOFunction :: IO ()

import Criterion.Measurement
main = secs <$> time_ someIOFunction >>= print

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

TimeIt очень прост и делает то, что я хотел, за исключением того, что он не обрабатывает чистые функции хорошо. Время возвращается на чистая функция-это распределение времени подумать (насколько мне известно) и даже с помощью seq может быть трудно получить то, что вы хотите.

то, что работает для меня, основано на TimeIt.

import System.TimeIt

timeItTPure :: (a -> ()) -> a -> IO (Double,a)
timeItTPure p a = timeItT $ p a `seq` return a

in timeItTPure p a, p-функция, ответственная за оценку результата чистого вычисления, a, так глубоко, как это необходимо для получения хорошего времени оценки. Может быть, это простое совпадение шаблонов, может быть, это подсчет длины списка, может быть, его seq каждый элемент в списке, может быть, его deepseq и т. д.

использование seq является сложным. Отмечать, приведенная ниже функция не работает должным образом. Хаскелл-загадочная вещь.

badTimeItTPure a = timeItT . return $ seq (p a) a

Comments

    Ничего не найдено.