Re: Linking in Dead Code

2011-05-16 Thread Simon Marlow

On 14/05/2011 19:10, Daniel Fischer wrote:

On Friday 13 May 2011 13:04:14, Guy wrote:

If only 1% of an imported module is used, GHC will link in the entire
module.


With split-objs, as far as I know, GHC only links in what you use (plus the
module initialiser).


FYI, in 7.2.1, the module initialiser is gone.

http://hackage.haskell.org/trac/ghc/changeset/a52ff7619e8b7d74a9d933d922eeea49f580bca8

Cheers,
Simon

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Linking in Dead Code

2011-05-16 Thread Guy

On 15/05/2011 22:28, B. Scott Michel wrote:

Cores don't necessarily help linking because it's I/O bound and very concrete 
sequential algo.


It's CPU-bound on my machine. ld uses 100% of one core with occasional disk activity. Pity that the other cores can't 
help, linking often seems like the slowest stage of compiling for me.



___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Linking in Dead Code

2011-05-15 Thread B. Scott Michel
Cores don't necessarily help linking because it's I/O bound and very concrete 
sequential algo.
Sent from my Verizon Wireless BlackBerry

-Original Message-
From: Guy guytsalmave...@yahoo.com
Sender: glasgow-haskell-users-boun...@haskell.org
Date: Sat, 14 May 2011 22:08:16 
To: glasgow-haskell-users@haskell.org
Subject: Re: Linking in Dead Code

On 14/05/2011 21:10, Daniel Fischer wrote:
 Linking still tends to use a lot of memory with ld, on the appropriate
 platforms you could try using gold as the linker, that's reported to use
 less memory (and be faster).

No gold for windows :-( Another problem with ld is that it's only single core.


___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Linking in Dead Code

2011-05-14 Thread Daniel Fischer
On Friday 13 May 2011 13:04:14, Guy wrote:
 If only 1% of an imported module is used, GHC will link in the entire
 module.

With split-objs, as far as I know, GHC only links in what you use (plus the 
module initialiser).

split-objs was disabled for some GHC/OS X combinations recently,
http://hackage.haskell.org/trac/ghc/ticket/4013 and 5008, maybe that 
applies to you, otherwise building GHC with object-splitting enabled and 
all libraries with split-objs should reduce code size significantly.

Linking still tends to use a lot of memory with ld, on the appropriate 
platforms you could try using gold as the linker, that's reported to use 
less memory (and be faster).

 Are there any plans, or at least some ideas, to rectify this?
 One severe example of this is qtHaskell, where importing the top-level
 module causes glacial compile (actually link) times and huge
 executables. Strip can fix the executable size (why does GHC not do
 this automatically?), but linking remains a problem.
 

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Linking in Dead Code

2011-05-14 Thread Guy

On 14/05/2011 21:12, Don Stewart wrote:

When compiled with split objs GHC makes it possible for the linker
to do dead code stripping. Make sure your GHC has split-objs on.


Thank you, I hadn't realised that the imported library could be built like this. How is this configured with cabal? (And 
do any packages actually do so?)



___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Linking in Dead Code

2011-05-14 Thread Guy

On 14/05/2011 21:10, Daniel Fischer wrote:

Linking still tends to use a lot of memory with ld, on the appropriate
platforms you could try using gold as the linker, that's reported to use
less memory (and be faster).


No gold for windows :-( Another problem with ld is that it's only single core.


___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Linking in Dead Code

2011-05-14 Thread Daniel Fischer
On Saturday 14 May 2011 21:06:50, Guy wrote:
 On 14/05/2011 21:12, Don Stewart wrote:
  When compiled with split objs GHC makes it possible for the linker
  to do dead code stripping. Make sure your GHC has split-objs on.
 
 Thank you, I hadn't realised that the imported library could be built
 like this. How is this configured with cabal?

In your ~/.cabal/config file (translate the path to Windows, I've no idea 
where the config goes there), there's a field for that, set

split-objs: True

And from then on cabal (install) passes the -split-objs flag (or was that 
--split-objs?) to GHC when installing packages. You'd have to rebuild the 
packages you already have.

 (And do any packages actually do so?)
 

It's something the user decides, not the package author.

___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Linking in Dead Code

2011-05-14 Thread Guy

On 14/05/2011 21:12, Don Stewart wrote:

When compiled with split objs GHC makes it possible for the linker
to do dead code stripping. Make sure your GHC has split-objs on.


In the case that split-objs wasn't used, is this a GHC limitation, or an ld limitation? The Delphi linker eliminates 
unused code from monolithic object files (if I remember correctly), so presumably this isn't an inherent limitation of 
linking.



___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users