forked from mirror/DotRecast
Compare commits
No commits in common. "3ae7582043d9a4acf327397253a40c2291ed5eff" and "97777511a7e82f679942b22745c22916cc37a376" have entirely different histories.
3ae7582043
...
97777511a7
|
@ -1,22 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
|
|
||||||
namespace DotRecast.Core
|
|
||||||
{
|
|
||||||
public static class RcSpans
|
|
||||||
{
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
||||||
public static void Copy<T>(Span<T> source, Span<T> destination)
|
|
||||||
{
|
|
||||||
Copy(source, 0, destination, 0, source.Length);
|
|
||||||
}
|
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
||||||
public static void Copy<T>(Span<T> source, int sourceIdx, Span<T> destination, int destinationIdx, int length)
|
|
||||||
{
|
|
||||||
var src = source.Slice(sourceIdx, length);
|
|
||||||
var dst = destination.Slice(destinationIdx);
|
|
||||||
src.CopyTo(dst);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -11,7 +11,7 @@
|
||||||
<PackageReference Include="Moq" Version="4.20.70" />
|
<PackageReference Include="Moq" Version="4.20.70" />
|
||||||
<PackageReference Include="NUnit" Version="4.1.0" />
|
<PackageReference Include="NUnit" Version="4.1.0" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0"/>
|
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0"/>
|
||||||
<PackageReference Include="NUnit.Analyzers" Version="4.2.0">
|
<PackageReference Include="NUnit.Analyzers" Version="4.1.0">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Buffers;
|
using System.Buffers;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Net.Sockets;
|
|
||||||
using DotRecast.Core.Buffers;
|
using DotRecast.Core.Buffers;
|
||||||
using DotRecast.Core.Collections;
|
using DotRecast.Core.Collections;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
@ -85,73 +84,18 @@ public class RcArrayBenchmarkTests
|
||||||
[Test]
|
[Test]
|
||||||
public void TestBenchmarkArrays()
|
public void TestBenchmarkArrays()
|
||||||
{
|
{
|
||||||
var results = new List<(string title, long ticks)>();
|
var list = new List<(string title, long ticks)>();
|
||||||
results.Add(Bench("new int[len]", RoundForArray));
|
list.Add(Bench("new int[len]", RoundForArray));
|
||||||
results.Add(Bench("ArrayPool<int>.Shared.Rent(len)", RoundForPureRentArray));
|
list.Add(Bench("ArrayPool<int>.Shared.Rent(len)", RoundForPureRentArray));
|
||||||
results.Add(Bench("RcRentedArray.Rent<int>(len)", RoundForRcRentedArray));
|
list.Add(Bench("RcRentedArray.Rent<int>(len)", RoundForRcRentedArray));
|
||||||
results.Add(Bench("new RcStackArray512<int>()", RoundForRcStackArray));
|
list.Add(Bench("new RcStackArray512<int>()", RoundForRcStackArray));
|
||||||
results.Add(Bench("stackalloc int[len]", RoundForStackalloc));
|
list.Add(Bench("stackalloc int[len]", RoundForStackalloc));
|
||||||
|
|
||||||
results.Sort((x, y) => x.ticks.CompareTo(y.ticks));
|
list.Sort((x, y) => x.ticks.CompareTo(y.ticks));
|
||||||
|
|
||||||
foreach (var t in results)
|
foreach (var t in list)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"{t.title} {t.ticks / (double)TimeSpan.TicksPerMillisecond} ms");
|
Console.WriteLine($"{t.title} {t.ticks / (double)TimeSpan.TicksPerMillisecond} ms");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void TestSpanVsArray()
|
|
||||||
{
|
|
||||||
var r = new RcRand();
|
|
||||||
var list = new List<(long[] src, long[] dest)>();
|
|
||||||
for (int i = 0; i < 14; ++i)
|
|
||||||
{
|
|
||||||
var s = new long[(int)Math.Pow(2, i + 1)];
|
|
||||||
var d = new long[(int)Math.Pow(2, i + 1)];
|
|
||||||
for (int ii = 0; ii < s.Length; ++ii)
|
|
||||||
{
|
|
||||||
s[ii] = r.NextInt32();
|
|
||||||
}
|
|
||||||
|
|
||||||
list.Add((s, d));
|
|
||||||
}
|
|
||||||
|
|
||||||
var results = new List<(string title, long ticks)>();
|
|
||||||
for (int i = 0; i < list.Count; ++i)
|
|
||||||
{
|
|
||||||
var seq = i;
|
|
||||||
|
|
||||||
Array.Fill(list[seq].dest, 0);
|
|
||||||
var resultLong = Bench($"long[{list[seq].src.Length}]", _ =>
|
|
||||||
{
|
|
||||||
var v = list[seq];
|
|
||||||
RcArrays.Copy(v.src, 0, v.dest, 0, v.src.Length);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
Array.Fill(list[seq].dest, 0);
|
|
||||||
var resultSpan = Bench($"Span<long[], {list[seq].src.Length}>", _ =>
|
|
||||||
{
|
|
||||||
var v = list[seq];
|
|
||||||
RcSpans.Copy<long>(v.src, 0, v.dest, 0, v.src.Length);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
results.Add(resultLong);
|
|
||||||
results.Add(resultSpan);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int newLine = 0;
|
|
||||||
foreach (var t in results)
|
|
||||||
{
|
|
||||||
Console.WriteLine($"{t.title}: {t.ticks / (double)TimeSpan.TicksPerMillisecond} ms");
|
|
||||||
newLine += 1;
|
|
||||||
if (0 == (newLine % 2))
|
|
||||||
{
|
|
||||||
Console.WriteLine("");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -11,7 +11,7 @@
|
||||||
<PackageReference Include="Moq" Version="4.20.70" />
|
<PackageReference Include="Moq" Version="4.20.70" />
|
||||||
<PackageReference Include="NUnit" Version="4.1.0" />
|
<PackageReference Include="NUnit" Version="4.1.0" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0"/>
|
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0"/>
|
||||||
<PackageReference Include="NUnit.Analyzers" Version="4.2.0">
|
<PackageReference Include="NUnit.Analyzers" Version="4.1.0">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<PackageReference Include="Moq" Version="4.20.70" />
|
<PackageReference Include="Moq" Version="4.20.70" />
|
||||||
<PackageReference Include="NUnit" Version="4.1.0" />
|
<PackageReference Include="NUnit" Version="4.1.0" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0"/>
|
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0"/>
|
||||||
<PackageReference Include="NUnit.Analyzers" Version="4.2.0">
|
<PackageReference Include="NUnit.Analyzers" Version="4.1.0">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<PackageReference Include="Moq" Version="4.20.70" />
|
<PackageReference Include="Moq" Version="4.20.70" />
|
||||||
<PackageReference Include="NUnit" Version="4.1.0" />
|
<PackageReference Include="NUnit" Version="4.1.0" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0"/>
|
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0"/>
|
||||||
<PackageReference Include="NUnit.Analyzers" Version="4.2.0">
|
<PackageReference Include="NUnit.Analyzers" Version="4.1.0">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<PackageReference Include="Moq" Version="4.20.70" />
|
<PackageReference Include="Moq" Version="4.20.70" />
|
||||||
<PackageReference Include="NUnit" Version="4.1.0" />
|
<PackageReference Include="NUnit" Version="4.1.0" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0"/>
|
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0"/>
|
||||||
<PackageReference Include="NUnit.Analyzers" Version="4.2.0">
|
<PackageReference Include="NUnit.Analyzers" Version="4.1.0">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<PackageReference Include="Moq" Version="4.20.70" />
|
<PackageReference Include="Moq" Version="4.20.70" />
|
||||||
<PackageReference Include="NUnit" Version="4.1.0" />
|
<PackageReference Include="NUnit" Version="4.1.0" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0"/>
|
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0"/>
|
||||||
<PackageReference Include="NUnit.Analyzers" Version="4.2.0">
|
<PackageReference Include="NUnit.Analyzers" Version="4.1.0">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<PackageReference Include="Moq" Version="4.20.70" />
|
<PackageReference Include="Moq" Version="4.20.70" />
|
||||||
<PackageReference Include="NUnit" Version="4.1.0" />
|
<PackageReference Include="NUnit" Version="4.1.0" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0"/>
|
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0"/>
|
||||||
<PackageReference Include="NUnit.Analyzers" Version="4.2.0">
|
<PackageReference Include="NUnit.Analyzers" Version="4.1.0">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|
Loading…
Reference in New Issue