/mobile Handheld Friendly website
x64 Ubuntu : Intel® Q6600® one core |
Each table row shows performance measurements for this C# Mono program with a particular command-line input value N.
| N | CPU secs | Elapsed secs | Memory KB | Code B | ≈ CPU Load |
|---|---|---|---|---|---|
| 500,000 | 0.31 | 0.32 | 840 | 1410 | 0% 3% 0% 100% |
| 5,000,000 | 2.33 | 2.33 | 14,592 | 1410 | 0% 1% 0% 100% |
| 50,000,000 | 22.48 | 22.49 | 14,596 | 1410 | 0% 0% 0% 100% |
Read the ↓ make, command line, and program output logs to see how this program was run.
Read n-body benchmark to see what this program should do.
Mono JIT compiler version 3.0.3 (tarball Tue Feb 12 21:22:20 PST 2013)
LLVM: yes(3.2svn-mono)
/* The Computer Language Benchmarks Game http://benchmarksgame.alioth.debian.org/ contributed by Isaac Gouy */ using System; class NBody { public static void Main(String[] args) { int n = 10000; if (args.Length > 0) n = Int32.Parse(args[0]); NBodySystem bodies = new NBodySystem(); Console.WriteLine("{0:f9}",bodies.Energy()); for (int i=0; i<n; i++) bodies.Advance(0.01); Console.WriteLine("{0:f9}",bodies.Energy()); } } class NBodySystem { private Body[] bodies; public NBodySystem() { bodies = new Body[]{ Body.Sun(), Body.Jupiter(), Body.Saturn(), Body.Uranus(), Body.Neptune() }; double px = 0.0; double py = 0.0; double pz = 0.0; foreach (Body body in bodies) { px += body.vx * body.mass; py += body.vy * body.mass; pz += body.vz * body.mass; } bodies[0].OffsetMomentum(px,py,pz); } public void Advance(double dt) { double dx, dy, dz, distance, mag; for (int i=0; i < bodies.Length; i++) { Body bodyi = bodies[i]; for (int j=i+1; j < bodies.Length; j++) { Body bodyj = bodies[j]; dx = bodyi.x - bodyj.x; dy = bodyi.y - bodyj.y; dz = bodyi.z - bodyj.z; distance = Math.Sqrt(dx*dx + dy*dy + dz*dz); mag = dt / (distance * distance * distance); bodyi.vx -= dx * bodyj.mass * mag; bodyi.vy -= dy * bodyj.mass * mag; bodyi.vz -= dz * bodyj.mass * mag; bodyj.vx += dx * bodyi.mass * mag; bodyj.vy += dy * bodyi.mass * mag; bodyj.vz += dz * bodyi.mass * mag; } } foreach (Body body in bodies) { body.x += dt * body.vx; body.y += dt * body.vy; body.z += dt * body.vz; } } public double Energy() { double dx, dy, dz, distance; double e = 0.0; for (int i=0; i < bodies.Length; i++) { Body bodyi = bodies[i]; e += 0.5 * bodyi.mass * ( bodyi.vx * bodyi.vx + bodyi.vy * bodyi.vy + bodyi.vz * bodyi.vz ); for (int j=i+1; j < bodies.Length; j++) { Body bodyj = bodies[j]; dx = bodyi.x - bodyj.x; dy = bodyi.y - bodyj.y; dz = bodyi.z - bodyj.z; distance = Math.Sqrt(dx*dx + dy*dy + dz*dz); e -= (bodyi.mass * bodyj.mass) / distance; } } return e; } } class Body { const double PI = 3.141592653589793; const double SOLAR_MASS = 4 * PI * PI; const double DAYS_PER_YEAR = 365.24; public double x, y, z, vx, vy, vz, mass; public Body(){} internal static Body Jupiter() { Body p = new Body(); p.x = 4.84143144246472090e+00; p.y = -1.16032004402742839e+00; p.z = -1.03622044471123109e-01; p.vx = 1.66007664274403694e-03 * DAYS_PER_YEAR; p.vy = 7.69901118419740425e-03 * DAYS_PER_YEAR; p.vz = -6.90460016972063023e-05 * DAYS_PER_YEAR; p.mass = 9.54791938424326609e-04 * SOLAR_MASS; return p; } internal static Body Saturn() { Body p = new Body(); p.x = 8.34336671824457987e+00; p.y = 4.12479856412430479e+00; p.z = -4.03523417114321381e-01; p.vx = -2.76742510726862411e-03 * DAYS_PER_YEAR; p.vy = 4.99852801234917238e-03 * DAYS_PER_YEAR; p.vz = 2.30417297573763929e-05 * DAYS_PER_YEAR; p.mass = 2.85885980666130812e-04 * SOLAR_MASS; return p; } internal static Body Uranus() { Body p = new Body(); p.x = 1.28943695621391310e+01; p.y = -1.51111514016986312e+01; p.z = -2.23307578892655734e-01; p.vx = 2.96460137564761618e-03 * DAYS_PER_YEAR; p.vy = 2.37847173959480950e-03 * DAYS_PER_YEAR; p.vz = -2.96589568540237556e-05 * DAYS_PER_YEAR; p.mass = 4.36624404335156298e-05 * SOLAR_MASS; return p; } internal static Body Neptune() { Body p = new Body(); p.x = 1.53796971148509165e+01; p.y = -2.59193146099879641e+01; p.z = 1.79258772950371181e-01; p.vx = 2.68067772490389322e-03 * DAYS_PER_YEAR; p.vy = 1.62824170038242295e-03 * DAYS_PER_YEAR; p.vz = -9.51592254519715870e-05 * DAYS_PER_YEAR; p.mass = 5.15138902046611451e-05 * SOLAR_MASS; return p; } internal static Body Sun() { Body p = new Body(); p.mass = SOLAR_MASS; return p; } internal Body OffsetMomentum(double px, double py, double pz) { vx = -px / SOLAR_MASS; vy = -py / SOLAR_MASS; vz = -pz / SOLAR_MASS; return this; } }
Wed, 13 Feb 2013 11:34:57 GMT MAKE: mv nbody.csharp-2.csharp nbody.csharp-2.cs /usr/local/bin/mcs -r:/usr/local/lib/mono/4.5/Mono.Simd.dll -optimize+ -platform:x64 -out:nbody.csharp-2.csharp_run nbody.csharp-2.cs rm nbody.csharp-2.cs 0.22s to complete and log all make actions COMMAND LINE: /usr/local/bin/mono --llvm -O=unsafe nbody.csharp-2.csharp_run 50000000 PROGRAM OUTPUT: -0.169075164 -0.169059907 <premain>: CommandLine Error: Argument 'misched' defined more than once! <premain>: CommandLine Error: Argument 'print-machineinstrs' defined more than once! -simplifycfg: CommandLine Error: Argument 'misched' defined more than once! -simplifycfg: CommandLine Error: Argument 'print-machineinstrs' defined more than once!