[Mono-list] mcs compiles on linux. Now what?

Bob Smith bob@thestuff.net
Fri, 8 Mar 2002 15:24:10 -0500 (EST)


Hmm. And such huge useless loops could be used by Microsoft to produce
binaries that run slowly on any .Net JITer/interpriter that dont optomize
it away. It could be used to clame that .Net is faster then mono. Should
watch out for this. :)

On Fri, 8 Mar 2002, Paolo Molaro wrote:

> On 03/08/02 Martin Baulig wrote:
> > if we're talking about optimizations, won't it make more sense to
> > do the optimization based on profiling data from mcs run with mono,
> > not with mint ?
>
> This is a good point, but we work with the data we have :-)
> It would be excellent if someone contributed a profiler for the
> code generatd by the jit. I already posted some time ago profile data
> for the JIT itself.
>
> > If we start optimizing based on profiling data from mint, we may end
> > up trying to "optimize away" small functions which are inlined by
> > the runtime, but which need a function call in mint.
> [...]
> > If I understand this correctly, this'll result in one million function
> > calls when run with mint, but will look more like
> >
> > ====
> >         public static void TestIt ()
> >         {
> >                 long result = 0;
> >
> >                 for (long count = 0; count < 1000000; count++)
> >                         result++;
> >         }
> > ====
> >
> > when run with mono, so it won't make much sense to optimize this.
>
> There is hope this can result in the following code with an optimizing
> JIT:
>
>          public static void TestIt ()
>          {
>          }
>
> ;-)
> Note that the interpreter could start inlining some methods as well,
> so I don't think there will be a huge difference in the profile data.
>
> > Same in the Array.Copy implementation, the code currently does
> > something like
> >
> >         for (int i = 0; i < count; i++)
> >         {
> >                 object value = array.GetValue (i);
> >                 array.SetValue (value, i);
> >         }
> >
> > which are 2*count function calls in mint, but the same than implementing
> > this function in C when run in mono.
>
> This is a perfect reason for avoiding internalcalls that do the checks:
> if you have the check in C# code, the jit will use the generic code to
> optimize them away, but if you hide the checks in the internalcall
> the jit will either have to hand-craft the checks or suffer them even if
> they are not needed.
>
> > Btw. does mcs already run with mono, or what needs to be done to make
> > it run with it ?
>
> >From my tests mono works with mcs just as well as mint, but it doesn't
> work with garbage collection enabled and that prevents it's use in
> compiling large programs.
>
> lupus
>
> --
> -----------------------------------------------------------------
> lupus@debian.org                                     debian/rules
> lupus@ximian.com                             Monkeys do it better
>
> _______________________________________________
> Mono-list maillist  -  Mono-list@ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-list
>