Haskell:分析器输出不完整?

时间:2015-09-27 15:00:03

标签: haskell profiling

我正在构建一个将单词存储到字典中的项目(使用库TableColumn),当使用-fprof-auto编译时,分析器并没有告诉我大部分的时间花在来自dawg模块的函数和CAF上。

代码(也使用管道,但它非常简单)是:

dawg

使用+ RTS -p运行显示我大部分时间花在insertEntry上(这是正常的):

import Data.DAWG.Static as D
import qualified Data.DAWG.Dynamic as DD
import Conduit
import qualified Data.Conduit.Combinators as C
import qualified Data.Text as T
import Data.List (isSuffixOf)
import Control.Monad


insertEntry dawg word =
  DD.insertWith (+) (T.unpack word) 1 dawg

isWhitespace x = x `elem` [' ', '.', '\n', '\'']

appendFileToDDAWG dawg fp =
  C.sourceFile fp $= C.decodeUtf8
  $= C.splitOnUnboundedE isWhitespace
  $$ C.foldl insertEntry dawg 

loadDirToDAWG :: FilePath -> IO (DAWG Char () Int)
loadDirToDAWG dir = runResourceT $ do
  d <- C.sourceDirectoryDeep True dir
       $= C.filter (".txt" `isSuffixOf`)
       $$ C.foldM appendFileToDDAWG DD.empty
  return $ D.freeze d

main = do d <- loadDirToDAWG some_directory
          mapM_ print $ D.assocs d

但它并没有告诉我时间实际上花在了COST CENTRE MODULE no. entries %time %alloc %time %alloc MAIN MAIN 211 0 0.0 0.0 100.0 100.0 main Main 423 0 2.3 1.7 99.9 100.0 loadDirToDAWG Mymodule.BuildDAWG 425 0 1.9 1.0 97.6 98.2 appendFileToDDAWG Mymodule.BuildDAWG 427 74 8.0 5.1 95.7 97.2 insertEntry Mymodule.BuildDAWG 430 71366 86.5 92.1 86.5 92.1 [...] CAF Data.DAWG.Static 418 0 0.1 0.0 0.1 0.0 CAF Data.DAWG.Trans.Map 412 0 0.0 0.0 0.0 0.0 模块中。这很奇怪,因为它显示了Data.DAWG.Dynamic模块,因此它能够“检测”#34;来自dawg的一些模块,但不是所有模块,尤其不是完成大部分工作的模块。

下载dawg后,修改其.cabal文件,使其编译为Data.DAWG.Static,并重建所有内容,我得到一个更大的探查器输出,显示-fprof-auto-top的所有内部函数,似乎没问题。但是我不想要完整的细节(我没有分析dawg,只是我的代码)而我只是想确保花费时间花在dawg而不是代码中(或者它意味着我的代码)代码有问题。)

那么为什么在第一种情况下Data.DAWG.Dynamic模块没有显示? 关于GHC如何处理分析,我有什么遗漏吗?

0 个答案:

没有答案