- Notifications
You must be signed in to change notification settings - Fork 5.2k
Closed
Labels
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 |