[Mono-list] mono performance, 20x differential with Java (what am i doing wrong)
Diego Frata
diego.frata at gmail.com
Thu Jan 28 22:33:17 EST 2010
Hello Jonathan,
I'm working on a computer that has a Intel Core 2 Duo CPU T5250 1.5 GHz (way
slower than yours). I've tried the code below on .NET 4 Beta 2 (shame on me,
my other computer died some days ago and I didn't install Mono) and I got
worst results than you at a very first moment.
My first setup was the default one for VS2010. Release x86
starting performance test on 1000 iterations
ending performance test on 1000 iterations, time: 43:733
result: 2729781599,99818
Oops, I'm running a 64 bit OS, so I've compiled my application again
targeting Release x64
starting performance test on 1000 iterations
ending performance test on 1000 iterations, time: 10:813
result: 2729781599,99818
That's a lot better, but I can speed up things a little bit introducing some
unsafeness into the code:
*public unsafe static double test1(double* vec, int size)*
{
double sum = 0;
for (int i = 8; i < *size*; i++)
{
vec[i] = 2 * vec[i] - vec[i - 1];
for (int j = 1; j < 8; j++)
sum += 1.3 * vec[j - 1];
}
return sum;
}
public static void Main(string[] argv)
{
int iterations = argv.Length > 0 ? int.Parse(argv[0]) : 1000;
unsafe
{
* int size = 100000;*
* double* vec = stackalloc double[size];*
for (int i = 0; i < size; i++)
vec[i] = i;
DateTime Tstart = DateTime.Now;
Console.WriteLine("starting performance test on " +
iterations + " iterations");
double sum = 0;
for (int i = 0; i < iterations; i++)
* sum += test1(vec, size);*
DateTime Tend = DateTime.Now;
TimeSpan Tspan = Tend - Tstart;
Console.WriteLine("ending performance test on " + iterations
+ " iterations, time: " + Tspan.Seconds + ":" + Tspan.Milliseconds);
Console.WriteLine("result: " + sum);
Console.Read();
}
}
starting performance test on 1000 iterations
ending performance test on 1000 iterations, time: 5:571
result: 2729781599,99818
That's the best I could extract from a single threaded computation without
changing your logic.
Try take a look at these things, maybe Mono is presenting the same behavior
as .NET.
Sorry if all this was unhelpful and off-topic ;)
Diego Frata
diego.frata at gmail.com
On Fri, Jan 29, 2010 at 12:00 AM, Jonathan Shore
<jonathan.shore at gmail.com>wrote:
> Hi,
>
> I'm quite familiar with both the .NET and Java development environments,
> but only recently have begun to experiment with mono, so forgive me if I'm
> not clued-in.
>
> I specialize in numerical work that often involves a lot large-scale array
> manipulation for linear algebra, timeseries, etc. My main production
> platforms are OSX and Linux. I've been doing most of my work on the JVM
> over the past few years, though spent a couple of years with .NET when it
> was pre-release / pre-1.0.
>
> My main interest is in Ocaml, particularly the F# variant as the basis for
> my numerical work.
>
> One of the first things I do when considering a platform is run benchmarks,
> as performance is critical for what I do. Starting with C# I wrote a test
> to gauge the array-access overhead associated with the platform. Without
> knowing how to tweak the mono runtime to turn on any particular
> optimisations, the results were quite poor for this specific test (see code
> at the end of this posting).
>
>
> The test on my MacPro 2.6 Ghz / Snow Leopard with mono 2.6.1 gave the
> result of:
>
> 16 sec, 130 ms for 1000 iterations
>
> the same code, modified just for IO, etc on the Java VM (without -server)
> gave a runtime of:
>
> 0 sec, 831 ms
>
> changing the # of iterations to higher amounts did nothing to improve the
> ratio. Java is 20x faster in this benchmark.
>
> I could not find any documentation concerning settings for the -optimize
> flag on the mono VM, so perhaps there is a setting I should be using.
>
> Secondly, I saw the posting concerning the optional use of LLVM. I have
> not been able to build mono on OSX as am having problems building glib. I'm
> wondering whether anyone has a packaged up version of glib or better a
> packaged up version of mono with LLVM enabled.
>
> I have heard only good things about LLVM performance, so hoping that this
> will help address this gap. Hopefully I am doing something wrong here and
> the performance is much closer. Test code below ...
>
> regards
>
> Jonathan
> --
> http://tr8dr.wordpress.com/
>
>
> using System;
>
> namespace Performance
> {
>
> public class ArrayTest
> {
> public static double test1 (double[] vec)
> {
> double sum = 0;
> for (int i = 8 ; i < vec.Length ; i++)
> {
> vec[i] = 2*vec[i] - vec[i-1];
> for (int j = 1 ; j < 8 ; j++)
> sum += 1.3 * vec[j-1];
> }
> return sum;
> }
>
> public static void Main (string[] argv)
> {
> int iterations = argv.Length > 0 ? int.Parse(argv[0]) : 1000;
> double[] vec = new double[100000];
> for (int i = 0 ; i < vec.Length ; i++)
> vec[i] = i;
> DateTime Tstart = DateTime.Now;
> Console.WriteLine ("starting performance test on " + iterations + "
> iterations");
> double sum = 0;
> for (int i = 0 ; i < iterations ; i++)
> sum += test1 (vec);
> DateTime Tend = DateTime.Now;
> TimeSpan Tspan = Tend - Tstart;
> Console.WriteLine ("ending performance test on " + iterations + "
> iterations, time: " + Tspan.Seconds + ":" + Tspan.Milliseconds);
>
> Console.WriteLine ("result: " + sum);
> }
> }
> }
>
>
>
>
>
> _______________________________________________
> Mono-list maillist - Mono-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-list
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/mono-list/attachments/20100129/a4d3ebd7/attachment.html
More information about the Mono-list
mailing list