[Mono-dev] floating point on arm

FALE(Leopold Faschalek) FALE at skidata.com
Fri Oct 14 09:54:03 EDT 2005


Hi,

sorry for the 2nd post but the first had bad formatting ...

I wrote a simple benchmark to test my mono arm (v1.1.9.2) and got 
wrong results for float and double values

under windows I got following:
D:\test\nbench\nbench\bin\Debug>nbench.exe 1
int loop 00:00:00 1 7 
float loop 00:00:00 1 0,0001
double loop 00:00:00 1 1E-07

under linux I got:
/var # mono nbench.exe 1
int loop 00:00:00.2826320 1 7
float loop 00:00:00.0003050 1 -2.681562E+154
double loop 00:00:00.0002740 1 -6.9127818972463E-180

<source>
using System;

namespace nbench
{
	/// <summary>
	/// Summary description for Class1.
	/// </summary>
	class Class1
	{
		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		static void Main(string[] args)
		{
			//
			// TODO: Add code to start application here
			//
			int i;
			int count = 1000000;
			DateTime startTime;
			DateTime endTime;
			if (args.Length > 0)
				count = Int32.Parse(args[0]);
			int a = 3;
			int b = 7;
			int s = 0;
			startTime = DateTime.Now;
			for (i=0; i<count; i++)
			{
				s = s * a + b;
			}
			endTime = DateTime.Now;
			System.Console.WriteLine("int loop {0} {1} {2}",endTime-startTime,count,s);

			float fa = 1.0001F;
			float fb = 0.0001F;
			float fs = 0;
			startTime = DateTime.Now;
			for (i=0; i<count; i++)
			{
				fs = fs * fa + fb;
			}
			endTime = DateTime.Now;
			System.Console.WriteLine("float loop {0} {1} {2}",endTime-startTime,count,fs);

			double da = 1.0000001;
			double db = 0.0000001;
			double ds = 0;
			startTime = DateTime.Now;
			for (i=0; i<count; i++)
			{
				ds = ds * da + db;
			}
			endTime = DateTime.Now;
			System.Console.WriteLine("double loop {0} {1} {2}",endTime-startTime,count,ds);
		}
	}
}
</source>
the mono build system is linux 2.4.21-99 SUSE with scratchbox 1.0.1 
and the target system is Arm9tdmi (v4t) little endian with linux 2.4.27 
and mono 1.1.9.2 I compiled mono with 'make -k CFLAGS=-g' 
according to lupus, but saw also the -O2 option is set

Any idea what went wrong?

PS: the timings for 10^8 loops int computation are:
.NET 1.1	P4 	2.6GHz/5200BogoMips	0,62 	seconds
Mono		ARM9 	180MHz/89,7BogoMips	9,2	seconds
Mono		P3	500MHz/985 BogoMips	2,2	seconds

greetings
Leopold Faschalek
-------------------------
Research & Development / Senior Software Developer

SKIDATA AG
Untersbergstraße 40
A-5083 Gartenau
[P] +43(0)6246/888-0
[F] +43(0)6246/888-7
[e] Leo.Faschalek at skidata.com
[w] www.skidata.com







More information about the Mono-devel-list mailing list