[Mono-list] Optimize code for Mono / execution speed

Tom Fransen t.fransen@mailned.nl
Tue, 3 Sep 2002 20:01:23 +0100


This is a multi-part message in MIME format.

------=_NextPart_000_0010_01C25384.AD8CA7A0
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: 7bit

Paolo,

so there is no compiler option I overlooked. Attached you find the source
code, feel free to take a look.

I'm also using a MP3 converter that is ported from Java to C#. I can give
you the results on this later.

regards,
Tom

-----Original Message-----
From: mono-list-admin@ximian.com [mailto:mono-list-admin@ximian.com]On
Behalf Of Paolo Molaro
Sent: Tuesday, September 03, 2002 2:54 PM
To: mono-list@ximian.com
Subject: Re: [Mono-list] Optimize code for Mono / execution speed


On 09/02/02 Tom Fransen wrote:
> I wrote a few small benchmark that a ran on Mono and on MS .NET (I also
used
> C++). I looked at the man pages for MCS and Mono but I found no option for
> optimizing the code (the CSC compiler however has such an option). Did I
> miss something, is there a way to speedup things?
[...]
> Yes, I know these are just micro-benchmark so it is not an absolute truth
> but it give some indication. I haven studied the details or tried to
analyse
> why things are fast or slow.

We could do that if you provided the sources of your benchmarks...
The speed difference versus the MS JIT with tight code may be about two
times slower (though usually it's less than 50%) with the current JIT.
There are a couple of your test results that may be explained with the
fact that our corlib has not been optimized yet, but benchmarks without
source are useless to us.

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

------=_NextPart_000_0010_01C25384.AD8CA7A0
Content-Type: application/x-zip-compressed;
	name="source.zip.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="source.zip.zip"

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
BgAAAAANAA0A2gIAAKYfAAAAAA==

------=_NextPart_000_0010_01C25384.AD8CA7A0--