Skip to content

Commit

Permalink
bench/vectors: add instructions on how to run the C# original code wi…
Browse files Browse the repository at this point in the history
…th `dotnet run`, format vectors.cs with `dotnet format`
  • Loading branch information
spytheman committed Sep 6, 2023
1 parent c44a896 commit 88cac9b
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 21 deletions.
19 changes: 19 additions & 0 deletions 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]
Expand Down
46 changes: 25 additions & 21 deletions bench/vectors/vectors.cs
@@ -1,3 +1,5 @@
using System;

internal readonly struct Vector
{
public readonly double X;
Expand All @@ -10,26 +12,27 @@ public Vector(double x, double y, double z)
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(
Expand All @@ -38,30 +41,30 @@ public static void Main()
z: random.NextDouble() * maxCoordinate
);
}

const double cohesionDistance = 10.0;
const double separationDistance = 5.0;

var closeBoids = new List<int>();

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;
Expand Down Expand Up @@ -112,20 +115,20 @@ public static void Main()
}

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,
Expand All @@ -140,15 +143,15 @@ public static void Main()
separation.Z / separationCount
);
}

alignment = new Vector(
alignment.X / closeBoids.Count,
alignment.Y / closeBoids.Count,
alignment.Z / closeBoids.Count
);

var currentVelocity = velocities[boidIndex];

velocities[boidIndex] = new Vector(
currentVelocity.X + cohesionForce.X + separation.X + alignment.X,
currentVelocity.Y + cohesionForce.Y + separation.Y + alignment.Y,
Expand All @@ -158,32 +161,33 @@ public static void Main()

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());
}
}

14 changes: 14 additions & 0 deletions bench/vectors/vectors.csproj
@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<PublishSingleFile>true</PublishSingleFile>
<SelfContained>true</SelfContained>

<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<OutputType>Exe</OutputType>
</PropertyGroup>

</Project>
1 change: 1 addition & 0 deletions bench/vectors/vectors.runtimeconfig.json
@@ -0,0 +1 @@
{"runtimeOptions":{"framework":{"name":"Microsoft.NETCore.App","version":"7.0.10"}}}

0 comments on commit 88cac9b

Please sign in to comment.