[GHC] #910: --make should have a -j flag for parallel building

GHC ghc-devs at haskell.org
Mon Aug 26 22:00:45 UTC 2013


#910: --make should have a -j flag for parallel building
-------------------------------------+------------------------------------
        Reporter:  igloo             |            Owner:
            Type:  feature request   |           Status:  patch
        Priority:  normal            |        Milestone:  _|_
       Component:  Compiler          |          Version:  6.4.2
      Resolution:                    |         Keywords:
Operating System:  Unknown/Multiple  |     Architecture:  Unknown/Multiple
 Type of failure:  None/Unknown      |       Difficulty:  Unknown
       Test Case:  N/A               |       Blocked By:
        Blocking:                    |  Related Tickets:
-------------------------------------+------------------------------------

Comment (by parcs):

 nh2: That's an interesting idea. We would just have to persist the timing
 information somehow (through the interface file maybe) and implement a
 smart semaphore (replacing QSem) that wakes up the module that would
 result in the shortest compile time. It certainly ''sounds'' possible, at
 least.

 Simon: Import loops were indeed not handled correctly. I managed to work
 out a solution that I hope is understandable. It involves augmenting a
 module's explicit textual dependencies with the implicit dependencies that
 arise from module loops. Let me know what you think.

 Other changes I made:

 1. removed the `BinIO` constructor as suggested
 2. more thoroughly commented the `FastString` implementation, as
 suggested.
 3. revised one of the thread-safety changes: originally, I changed
 `newUnique` and `newUniqueSupply` to atomically update the `env_us` var.
 But the only reason this was necessary is because the `env_us` var was
 shared among interleaved threads created by `forkM`. So instead of making
 sure to atomically update this var, I think it is more sensible to not
 share the `env_us` var among interleaved threads. This solution should be
 in theory more efficient as well, as multiple threads are no longer
 potentially contending on the same `env_us` var.
 4. and I enabled buffering of stdout/stderr when compiling modules via
 GHCi

 Please perform a second pass on all the commits, as I did a lot of
 rebasings and fixups etc and I might have missed something stupid.

 I have not yet fixed the IO manager bug.

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/910#comment:31>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler




More information about the ghc-tickets mailing list