Difference between revisions of "How to profile a Haskell program"

From HaskellWiki
Jump to navigation Jump to search
m
Line 9: Line 9:
 
== Setting things up ==
 
== Setting things up ==
   
  +
=== Enable profiling on libraries ===
Get profiling versions of your libraries. For example, my script uses HaXmL, which uses a library called polyparse:
 
  +
 
For example, my script uses HaXmL, which uses a library called polyparse:
 
cd polyparse
 
cd polyparse
 
runhaskell Setup.hs configure --enable-library-profiling
 
runhaskell Setup.hs configure --enable-library-profiling
Line 19: Line 21:
 
runhaskell Setup.hs configure --enable-library-profiling
 
runhaskell Setup.hs configure --enable-library-profiling
 
runhaskell Setup.hs build
 
runhaskell Setup.hs build
sudo runhaskell Setup.hs install</pre>
+
sudo runhaskell Setup.hs install
  +
  +
=== Enable profiling on your stuff ===
  +
  +
Note that I assume you are using Cabal. If not, see [[How to write a Haskell program]]. It's super easy, and you'll be happy you did it.

Revision as of 11:57, 20 March 2007


Just jotting down my notes whilst profiling one of my helper scripts. It would be great if the community could transform this into a tutorial

The case study

I have a script that converts from an XML format to some pickled data structures via Data.Binary. The XML part is generated by HaXml's DtdToHaskell. On a 54M XML file, the thing swaps like crazy and takes several hours. I would like to improve the situation.

Setting things up

Enable profiling on libraries

For example, my script uses HaXmL, which uses a library called polyparse:

cd polyparse
runhaskell Setup.hs configure --enable-library-profiling
runhaskell Setup.hs build
sudo runhaskell Setup.hs install
cd ..
cd HaXml
runhaskell Setup.hs configure --enable-library-profiling
runhaskell Setup.hs build
sudo runhaskell Setup.hs install

Enable profiling on your stuff

Note that I assume you are using Cabal. If not, see How to write a Haskell program. It's super easy, and you'll be happy you did it.