Haskell fonction du temps d'exécution
Est-il une méthode simple pour calculer le temps d'exécution de la fonction en Haskell?
- les réponses à ma question sur le critère peut contenir quelques exemples d'utilisation stackoverflow.com/questions/6637968/... .
- Aussi, c'est un peu nuancée de la situation, parce que les fonctions n'ont pas à être complètement "exécuté" en Haskell. Ils ont juste à être étendue suffisante pour quelle que soit la valeur requise. Envisager
head [1..]
, qui prend le premier élément d'une liste infinie. - C'est pourquoi le critère a de la
whnf
etnf
fonctions.
Vous devez vous connecter pour publier un commentaire.
Choses les plus simples est de faire de
:set +s
dansghci
, et puis vous pouvez voir le temps d'exécution de quelque chose que vous exécutez, avec l'utilisation de la mémoire.La
critère
le paquet a été faite spécialement pour ce faire bien.Voir si http://hackage.haskell.org/package/timeit convient à vos besoins.
exécution de la fonction de temps de référence est inclus dans Le critère.Mesure
par exemple, si je veux capturer le temps de
someIOFunction :: IO ()
Critère est la méthode la plus poussée, bien que je l'ai trouvé difficile à démarrer, et il semble ciblées à l'analyse comparative des programmes. Je voulais calculer le temps d'exécution et l'utilisation des données dans le cadre de mon programme, et il ne semble pas répondre à ce besoin, au moins, il n'est pas immédiatement apparent.
TimeIt est très simple et fait ce que je voulais, sauf qu'il ne gère pas les fonctions pures bien. L'heure du retour pour une fonction pure est le thunk moment de l'allocation (autant que je sache), et même avec l'aide de seq il peut être difficile d'obtenir ce que vous voulez.
Ce qui fonctionne pour moi est basé sur TimeIt.
Dans timeItTPure p a, p est la fonction de chargé d'évaluer le résultat d'un calcul pur, un, aussi profondément que nécessaire pour obtenir la bonne évaluation de timing. C'est peut-être une simple mise en correspondance du modèle, c'est peut-être le comptage de la longueur d'une liste, peut-être son seq chaque élément dans la liste, c'est peut-être un deepseq, etc.
L'utilisation de seq est délicat. Note, ci-dessous la fonction ne fonctionne pas comme souhaité. Haskell est une chose de mystérieux.