EgorBot / runtime-utils

MIT License
0 stars 1 forks source link

EgorBot for EgorBo in #78 #79

Open EgorBot opened 1 week ago

EgorBot commented 1 week ago

Processing https://github.com/EgorBot/runtime-utils/issues/78#issuecomment-2332091805 command:

Command -awsamd -commit 72f9ee0d26c23b3c58ec5af8aeea316095761646 vs 767e4165641583c73918168a920a10513000572c -profiler --envvars DOTNET_JitDisasm:TrailingZeroCount_ulong ```cs using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Running; using System.Numerics; using System.Runtime.CompilerServices; public class Perf_BitOperations { static T[] Array(int count, int? seed = null) { var result = new T[count]; var random = new Random(42); if (typeof(T) == typeof(byte) || typeof(T) == typeof(sbyte)) random.NextBytes(Unsafe.As(result)); else for (int i = 0; i < result.Length; i++) result[i] = GenerateValue(random); return result; } static T GenerateValue(Random random) { if (typeof(T) == typeof(uint)) return (T)(object)(uint)random.Next(); if (typeof(T) == typeof(ulong)) return (T)(object)(ulong)random.Next(); throw new NotImplementedException(); } static uint[] input_uint = Array(1000); static ulong[] input_ulong = Array(1000); [Benchmark] public int TrailingZeroCount_ulong() { int sum = 0; ulong[] input = input_ulong; for (int i = 0; i < input.Length; i++) { sum += BitOperations.TrailingZeroCount(input[i]); } return sum; } } ```

(EgorBot will reply in this issue)

EgorBot commented 1 week ago

Benchmark results on c7a_4xlarge

BenchmarkDotNet v0.14.0, Ubuntu 24.04 LTS (Noble Numbat)
AMD EPYC 9R14, 1 CPU, 16 logical and 16 physical cores
  Job-UEJUYI : .NET 9.0.0 (42.42.42.42424), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
  Job-KVCNUJ : .NET 9.0.0 (42.42.42.42424), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
EnvironmentVariables=DOTNET_JitDisasm=TrailingZeroCount_ulong
Method Toolchain Mean Error Ratio
TrailingZeroCount_ulong Before 281.9 ns 0.14 ns 1.00
TrailingZeroCount_ulong After 280.1 ns 0.34 ns 0.99

BDN_Artifacts.zip

Flame graphs: Main vs PR 🔥 Hot asm: Main vs PR Hot functions: Main vs PR Counters: Main vs PR

For clean perf results, make sure you have just one [Benchmark] in your app.

EgorBot commented 1 week ago

cc @EgorBo (logs)