<br><br><div class="gmail_quote">On Mon, Jan 23, 2012 at 12:18 PM, Jonathan Shore <span dir="ltr"><<a href="mailto:jonathan.shore@gmail.com">jonathan.shore@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word"><br><div><div class="im"><div>On Jan 23, 2012, at 7:27 AM, Rodrigo Kumpera wrote:</div><br><blockquote type="cite">Mono os OSX has some performance issues due to multiple factors, some Reimer pointed out, but it's hard to tell without a good profiler run.<div>
<br></div><div>Boehm doesn't support the fast memory allocator on OSX.</div>
<div>The lack of compiler support for fast TLS is another pain point, this has been mostly addressed on trunk so 2.12 will be closer.</div><div>Another issue is that OSX primitives are much worse than linux's. Things like mutex'es and semephores perform much worse.</div>

<div>Finally, the 32 x 64 bits issue can make a huge difference depending on your code. If you're doing a lot of 64bits math or your</div><div>code is register happy, 32bits will be slower.</div><div><br></div></blockquote>
<div><br></div></div><div>I see.  I am using a SpinLock around every (very short lived) transaction.   Perhaps the primitives used in SpinWait have a different performance profile on OSX vs Linux?   Also, all of the transactions involve longs and doubles {comparisons, load/store, some arithmetic).   I am not at all clear on how longs and doubles would be rendered differently in terms of instructions on 32bit vs 64bit.    I thought even in the 32bit world, intel CPUs had a 64bit pipeline for doubles, though probably not for longs.   </div>
</div></div></blockquote><div><br></div><div>doubles have hardware support on 32 and 64bits. longs don't have any under 32bits and things like division are done in software.</div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word"><div><div><br></div><div>What sort of instrumentation would be useful? </div></div></div></blockquote><div><br></div><div>Nothing fancy, high frequency sampling to see what runtime code shows up. On instruments this the template under: Mac OS X -> CPU -> Timer Profiler.</div>
<div>Then customize it from a sample every 1ms to every 100 us.</div><div><br></div><div><br></div><div><br></div><div><br></div></div>