Closed
Description
Performance of some UTF8 string methods seems to have regressed in a major way on AMD platforms in .NET Core 3.1. Others may be affected as well.
Test:
[SimpleJob(BenchmarkDotNet.Jobs.RuntimeMoniker.NetCoreApp21)]
[SimpleJob(BenchmarkDotNet.Jobs.RuntimeMoniker.NetCoreApp31)]
public class Benchmark
{
const string testString = "hello world";
private static readonly Encoding Utf8NoBom = new UTF8Encoding(false);
private readonly byte[] writeBuffer = new byte[1024];
private readonly byte[] readBuffer = Utf8NoBom.GetBytes(testString);
[Benchmark]
public void WriteString()
{
Utf8NoBom.GetBytes(testString.AsSpan(), this.writeBuffer.AsSpan());
}
[Benchmark]
public void ReadString()
{
Utf8NoBom.GetString(this.readBuffer.AsSpan());
}
static void Main(string[] args)
{
BenchmarkRunner.Run<Benchmark>();
}
}
AMD system results:
BenchmarkDotNet=v0.12.0, OS=Windows 10.0.18363
AMD Ryzen 9 3900X, 1 CPU, 24 logical and 12 physical cores
.NET Core SDK=3.1.101
[Host] : .NET Core 3.1.1 (CoreCLR 4.700.19.60701, CoreFX 4.700.19.60801), X64 RyuJIT
Job-RNGYVQ : .NET Core 2.1.15 (CoreCLR 4.6.28325.01, CoreFX 4.6.28327.02), X64 RyuJIT
Job-ILXJIL : .NET Core 3.1.1 (CoreCLR 4.700.19.60701, CoreFX 4.700.19.60801), X64 RyuJIT
| Method | Runtime | Mean | Error | StdDev |
|------------ |-------------- |---------:|---------:|---------:|
| WriteString | .NET Core 2.1 | 24.68 ns | 0.187 ns | 0.175 ns |
| ReadString | .NET Core 2.1 | 23.33 ns | 0.373 ns | 0.349 ns |
| WriteString | .NET Core 3.1 | 70.51 ns | 0.787 ns | 0.736 ns |
| ReadString | .NET Core 3.1 | 86.46 ns | 0.153 ns | 0.143 ns |
Intel system results:
BenchmarkDotNet=v0.12.0, OS=Windows 10.0.18363
Intel Xeon CPU E5-1650 v4 3.60GHz, 1 CPU, 12 logical and 6 physical cores
.NET Core SDK=3.1.101
[Host] : .NET Core 3.1.1 (CoreCLR 4.700.19.60701, CoreFX 4.700.19.60801), X64 RyuJIT
Job-POUEZF : .NET Core 2.1.15 (CoreCLR 4.6.28325.01, CoreFX 4.6.28327.02), X64 RyuJIT
Job-JZNDHJ : .NET Core 3.1.1 (CoreCLR 4.700.19.60701, CoreFX 4.700.19.60801), X64 RyuJIT
| Method | Runtime | Mean | Error | StdDev |
|------------ |-------------- |---------:|---------:|---------:|
| WriteString | .NET Core 2.1 | 34.38 ns | 0.709 ns | 1.204 ns |
| ReadString | .NET Core 2.1 | 31.24 ns | 0.652 ns | 1.376 ns |
| WriteString | .NET Core 3.1 | 13.61 ns | 0.301 ns | 0.519 ns |
| ReadString | .NET Core 3.1 | 29.86 ns | 0.623 ns | 1.340 ns |
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment