<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Oct 3, 2012, at 2:57 PM, Rodrigo Kumpera wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><br><br><div class="gmail_quote">On Wed, Oct 3, 2012 at 1:59 PM, sebastian <span dir="ltr"><<a href="mailto:sebastian@palladiumconsulting.com" target="_blank">sebastian@palladiumconsulting.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br></blockquote><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>Finally, we may want to tweak the parameters sent to the LLVM compiler to optimize for runtime speed, even at the cost of very slow compilation.</div>
</blockquote><div><br></div><div>Tweaking llvm parameters require changing mono's source code and pretty much voids any guarantees that the resulting code will work.</div><div>A lot of LLVM optimizations for some reasons produce bad code when used with mono. Zoltan can better explain this, I guess.</div></div></blockquote><div><br></div><div>I am very interested in this topic as well.   Squeezing the most performance I can for numerical work is important for my application. </div><div><br></div><div>Sebastian, I am not sure what sorts of algorithms you are running, but there are a number of flags one can use, such as -O=unsafe and inlining directives that get mono --llvm very close to GCC compiled C / C++ code for numerical algorithms.   I've found that with careful structuring get within 5-10% of C speed.</div><div><br></div><div>However, Mono (and the MS VM, I believe) are not all that aggressive with inlining.   Many of the situations that would like to inline are somewhat complex to detect / guard.   Mono (and I believe the MS .NET runtime) will not attempt to inline calls in various settings, such as if is virtual.   There would have to be conditional code generated for the situations where a call would need to be virtual and where it could be known to be a concrete terminal type.  </div><div><br></div><div>A more general question to the Mono team, does the mono-llvm fork pull in new functionality from the LLVM project from time to time?  Should we expect to be able to take advantage of the new optimisations (for example the deeper vectorization work in progress) when they become available?    I recall that there were a number of deficiencies with the LLVM that required a lot of scaffolding in order to interoperate with the mono runtime.   Curious whether the LLVM foks have thought to address these so that could make more direct use of core LLVM in the future?</div></div><br></body></html>