Hi again!

I need some help with this.

2010/3/17 Simon Marlow <marlo...@gmail.com>:
> On 16/03/2010 19:34, Henrique Ferreiro wrote:
>>
>> Hello!
>>
>> I am trying to make cost centre profiling work in the threaded rts
>> build in order to use that information to better understand parallel
>> behaviour.
>>
>> Currently I am learning about the internals of GHC and I am thinking
>> about how this could be done. The main blocker is that the current
>> cost centre stack is a shared global variable. The simplest solution I
>> came up with is to convert it to a thread local variable. The problem
>> would be how to access it from the global timer.
>
> Yes, basically what you want to do is put CCCS into the StgRegs structure,
> which will make it thread-local.  In the timer signal you want to bump the
> counters for the CCCS on each Capability - so just iterate through the array
> of Capabilities and bump each one.

I tried adding a new register CCCS to StgRegTable in stg/Regs.h but
there is too much hidden knowledge in the code and it isn't working.

I got to the point where I have changed every reference to the global
variable to this register. The problem is that it isn't getting
updated. Debugging a bit it seems that the register is used as it
should (the calls to PushCostCentre and AppendCCS from the generated
code use the correct value in CCCS) but it isn't getting stored in the
register table because every time the timer is called, the value
stored is CCS_SYSTEM, the one used in initialization.

I tried to mimic how the other registers are implemented but there is
no documentation at all so I wasn't sure what was exactly required.

Could someone tell where exactly I have to change things or should I
post my changes and ask about specific details?

_______________________________________________
Cvs-ghc mailing list
Cvs-ghc@haskell.org
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to