From 88cac9bdf4497ead6f199967dedaa530924fedb6 Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Wed, 6 Sep 2023 13:15:46 +0300 Subject: [PATCH] bench/vectors: add instructions on how to run the C# original code with `dotnet run`, format vectors.cs with `dotnet format` --- bench/vectors/README.md | 19 ++++++++++ bench/vectors/vectors.cs | 46 +++++++++++++----------- bench/vectors/vectors.csproj | 14 ++++++++ bench/vectors/vectors.runtimeconfig.json | 1 + 4 files changed, 59 insertions(+), 21 deletions(-) create mode 100644 bench/vectors/vectors.csproj create mode 100644 bench/vectors/vectors.runtimeconfig.json diff --git a/bench/vectors/README.md b/bench/vectors/README.md index 8cb9cd0c73..7ac830027c 100644 --- a/bench/vectors/README.md +++ b/bench/vectors/README.md @@ -1,3 +1,22 @@ +Running the C# example: +``` +dotnet run +``` + +Running the V program: +``` +v crun vectors.v +``` + +Running the V program, compiled with -prod: +``` +v -prod crun vectors.v +``` + +Note: the `crun` will make sure that the compilation will happen just +once at the start, and then the executable will be just reused by the +subsequent commands with identical options. + ```bash Benchmark 1: ./boids_test/bin/Release/net7.0/linux-x64/publish/boids_test Time (mean ± σ): 262.2 ms ± 5.7 ms [User: 231.6 ms, System: 14.1 ms] diff --git a/bench/vectors/vectors.cs b/bench/vectors/vectors.cs index 40a49cc1b5..a2801b9fa8 100644 --- a/bench/vectors/vectors.cs +++ b/bench/vectors/vectors.cs @@ -1,3 +1,5 @@ +using System; + internal readonly struct Vector { public readonly double X; @@ -10,26 +12,27 @@ internal readonly struct Vector Y = y; Z = z; } - + public override string ToString() { return $"({X}, {Y}, {Z})"; } } -internal static class Program + +class Program { - public static void Main() + static void Main(string[] args) { const int boidsCount = 10000; - + var positions = new Vector[boidsCount]; var velocities = new Vector[boidsCount]; const double maxCoordinate = 10000.0; var random = new Random(); - + for (var positionIndex = 0; positionIndex < positions.Length; positionIndex++) { positions[positionIndex] = new Vector( @@ -38,30 +41,30 @@ internal static class Program z: random.NextDouble() * maxCoordinate ); } - + const double cohesionDistance = 10.0; const double separationDistance = 5.0; var closeBoids = new List(); - + for (var boidIndex = 0; boidIndex < positions.Length; boidIndex++) { var position = positions[boidIndex]; closeBoids.Clear(); - + for (var otherBoidIndex = 0; otherBoidIndex < positions.Length; otherBoidIndex++) { if (boidIndex == otherBoidIndex) { continue; } - + var otherPosition = positions[otherBoidIndex]; - + var differenceX = position.X - otherPosition.X; var differenceY = position.Y - otherPosition.Y; var differenceZ = position.Z - otherPosition.Z; - + var distance = differenceX * differenceX + differenceY * differenceY + differenceZ * differenceZ; @@ -112,20 +115,20 @@ internal static class Program } var closeBoidVelocity = velocities[closeBoidIndex]; - + alignment = new Vector( alignment.X + closeBoidVelocity.X, alignment.Y + closeBoidVelocity.Y, alignment.Z + closeBoidVelocity.Z ); } - + cohesion = new Vector( cohesion.X / closeBoids.Count, cohesion.Y / closeBoids.Count, cohesion.Z / closeBoids.Count ); - + var cohesionForce = new Vector( cohesion.X - position.X, cohesion.Y - position.Y, @@ -140,7 +143,7 @@ internal static class Program separation.Z / separationCount ); } - + alignment = new Vector( alignment.X / closeBoids.Count, alignment.Y / closeBoids.Count, @@ -148,7 +151,7 @@ internal static class Program ); var currentVelocity = velocities[boidIndex]; - + velocities[boidIndex] = new Vector( currentVelocity.X + cohesionForce.X + separation.X + alignment.X, currentVelocity.Y + cohesionForce.Y + separation.Y + alignment.Y, @@ -158,32 +161,33 @@ internal static class Program var positionSum = new Vector(0.0, 0.0, 0.0); var velocitySum = new Vector(0.0, 0.0, 0.0); - + for (var boidIndex = 0; boidIndex < positions.Length; boidIndex++) { var position = positions[boidIndex]; var velocity = velocities[boidIndex]; - + positions[boidIndex] = new Vector( position.X + velocity.X, position.Y + velocity.Y, position.Z + velocity.Z ); - + positionSum = new Vector( positionSum.X + position.X, positionSum.Y + position.Y, positionSum.Z + position.Z ); - + velocitySum = new Vector( velocitySum.X + velocity.X, velocitySum.Y + velocity.Y, velocitySum.Z + velocity.Z ); } - + Console.WriteLine(positionSum.ToString()); Console.WriteLine(velocitySum.ToString()); } } + diff --git a/bench/vectors/vectors.csproj b/bench/vectors/vectors.csproj new file mode 100644 index 0000000000..738e29d959 --- /dev/null +++ b/bench/vectors/vectors.csproj @@ -0,0 +1,14 @@ + + + + Exe + true + true + + net7.0 + enable + enable + Exe + + + diff --git a/bench/vectors/vectors.runtimeconfig.json b/bench/vectors/vectors.runtimeconfig.json new file mode 100644 index 0000000000..74185c74fb --- /dev/null +++ b/bench/vectors/vectors.runtimeconfig.json @@ -0,0 +1 @@ +{"runtimeOptions":{"framework":{"name":"Microsoft.NETCore.App","version":"7.0.10"}}}