Program Club

Haskell 함수 실행 시간

proclub 2020. 11. 10. 22:32
반응형

Haskell 함수 실행 시간


Haskell에서 함수 실행 시간을 계산하는 간단한 방법이 있습니까?


간단한 일들은하는 것입니다 :set +sghci, 그리고 당신은 메모리 사용과 함께 실행할 아무것도의 실행 시간을 볼 수 있습니다.


criterion패키지 이 잘 수행하기 위해 특별히 만들어졌다.


http://hackage.haskell.org/package/timeit이 귀하의 요구에 맞는지 확인 하십시오 .


함수 실행 시간 벤치 마크는 Criterion에 포함됩니다.

예를 들어, 시간을 캡처하려면 someIOFunction :: IO ()

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

Criterion은 시작하기가 어려웠지만 가장 정교한 방법이며 벤치마킹 프로그램을 대상으로하는 것 같습니다. 나는 실행 시간을 계산하고 내 프로그램 내에서 그 데이터를 사용하고 싶었는데이 요구 사항을 해결하지 못하는 것 같지만 적어도 즉각적인 것은 아닙니다.

시간 순수한 기능을 잘 처리하지 않는 것을 제외하고는 매우 간단하고 내가 원하는 것을 수행합니다. 순수 함수에 대해 반환되는 시간은 썽크 할당 시간 (AFAIK)이며 seq를 사용하더라도 원하는 것을 얻는 것이 어려울 수 있습니다.

나를 위해 일하는 것은 TimeIt을 기반으로합니다.

import System.TimeIt

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

timeItTPure pa에서 p는 좋은 평가 타이밍을 얻기 위해 필요한만큼 순수 계산의 결과 a를 평가하는 기능입니다. 아마도 이것은 단순한 패턴 일치 일 수도 있고, 아마도 목록의 길이를 세는 것일 수도 있고, 아마도 목록의 모든 요소를 ​​seq, 아마도 그것의 deepseq 등일 수도 있습니다.

seq의 사용은 까다 롭습니다. 아래 기능은 원하는대로 수행되지 않습니다. Haskell은 신비한 것입니다.

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

참고 URL : https://stackoverflow.com/questions/6766450/haskell-function-execution-time

반응형