| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
This seems to be necessary to prevent readline being confused by our
SIGALRM handler.
|
| |
|
|
|
|
|
| |
The recent patch to free memory in hs_exit() on Win32 unfortunately broke
profiling, because it freed the memory slightly too early.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This gives some control over affinity, while we figure out the best
way to automatically schedule threads to make best use of the
available parallelism.
In addition to the primitive, there is also:
GHC.Conc.forkOnIO :: Int -> IO () -> IO ThreadId
where 'forkOnIO i m' creates a thread on Capability (i `rem` N), where
N is the number of available Capabilities set by +RTS -N.
Threads forked by forkOnIO do not automatically migrate when there are
free Capabilities, like normal threads do. Still, if you're using
forkOnIO exclusively, it's a good idea to do +RTS -qm to disable work
pushing anyway (work pushing takes too much time when the run queues
are large, this is something we need to fix).
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
There are two new options in the -threaded RTS:
-qm Don't automatically migrate threads between CPUs
-qw Migrate a thread to the current CPU when it is woken up
previously both of these were effectively off, i.e. threads were
migrated between CPUs willy-milly, and threads were always migrated to
the current CPU when woken up. This is the first step in tweaking the
scheduling for more effective work balancing, there will no doubt be
more to come.
|
|
|
|
|
|
|
| |
... again.
For now, I've added a TODO comment, but sooner or later this will have to
be made gcc-version-independent.
|
| |
|
| |
|
|
|
|
|
|
|
| |
We need to use GNUC3_ATTRIBUTE(used) to force gcc to keep the
definition of StgRunIsImplementedInAssembler() around. In some cases
we had already made this function external rather than static to get
around the problem, but GNUC3_ATTRIBUTE(used) is a better fix.
|
|
|
|
| |
addresses #492
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
fixes failures in yesterday's testsuite run
|
| |
|
|
|
|
|
|
| |
Yet another attempt at shutdown & interruption. This one appears to
work better; ^C is more responsive in multi threaded / SMP, and I
fixed one case where the runtime wasn't responding to ^C at all.
|
| |
|
| |
|
|
|
|
|
|
|
| |
This is just an assertion, in effect: we should never enter a PAP, but
for convenience we previously attached the PAP apply code to the PAP
info table. The problem with this was that it makes it harder to track
down bugs that result in entering a PAP...
|
| |
|
| |
|
| |
|
|
|
|
| |
Not sure why it was disabled, probably by accident.
|
| |
|
|
|
|
|
| |
Just to keep sanity checking happy, and so we don't need a completely
new closure type.
|
| |
|
|
|
|
|
| |
In the rare event that a .o file contains more than one flavour of a
[non]lazy pointers sections, resolve all of them, not just one.
|
| |
|
|
|
|
|
|
|
|
|
| |
This relates to the recent introduction of clean/dirty TSOs, and the
consqeuent write barriers required. We were missing some write
barriers in the takeMVar/putMVar family of primops, when performing
the take/put directly on another TSO.
Fixes #705, and probably some test failures.
|
|
|
|
|
|
|
| |
Now that we can handle using C argument registers as global registers,
extend the x86_64 register mapping. We now have 5 integer argument
registers, 4 float, and 2 double (all caller-saves). This results in a
reasonable speedup on x86_64.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We now have more stg_ap entry points: stg_ap_*_fast, which take
arguments in registers according to the platform calling convention.
This is faster if the function being called is evaluated and has the
right arity, which is the common case (see the eval/apply paper for
measurements).
We still need the stg_ap_*_info entry points for stack-based
application, such as an overflows when a function is applied to too
many argumnets. The stg_ap_*_fast functions actually just check for
an evaluated function, and if they don't find one, push the args on
the stack and invoke stg_ap_*_info. (this might be slightly slower in
some cases, but not the common case).
|
|
|
|
| |
fix one incorrect case, and made several more accurate
|
| |
|
| |
|
|
|
|
| |
The most likely cause is out-of-memory, not an RTS error.
|
| |
|
|
|
|
|
|
|
| |
We were searching the wrong part of the heap for dead objects, this
was broken by recent changes to the step structure: from-space is now
in step->old_blocks, not step->blocks. Fortunately some assertions in
ProfHeap picked up the problem.
|