3 ms·
Too bad it doesn't include C# by default :) https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/go-csharpcore.html https://benchmarksgame-team.
by neonsunset 3y ago
Too bad it doesn't include C# by default :)
https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/go-csharpcore.html https://benchmarksgame-team.pages.debian.net/benchmarksgame/...
(it also keeps AOT[0] a specialized workload so you can't directly compare, which brings down the baseline RAM usage from 30 to 19MiB[1], though that is also problematic as the benchmark suite compiles AOT to x86-x64-v1 aka SSE2 (!) which would not run code with SSE4 or AVX2 SIMD implementations, and runs much slower for implementations expecting vectorization in general)
https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/csharpcore-csharpaot.html https://benchmarksgame-team.pages.debian.net/benchmarksgame/...
[1] I have no idea where 30MiB for most cases comes from, make a simple program and run it today and you'll see the RAM use will be below 10 MiB as you launch it (2-4MiB for AOT). The usage gets higher as you start loading dlls/dylibs/so's but those pages can be de-duplicated by OS so not much of an issue
- igouy 3y agoPlease provide example C# AOT compilation (Intel® SSE4.1, Intel® SSE4.2, Intel® AVX) [0] https://benchmarksgame-team.pages.debian.net/benchmarksgame/measurements/csharpaot.html https://benchmarksgame-team.pages.debian.net/benchmarksgame/... https://benchmarksgame-team.pages.debian.net/benchmarksgame/measurements/go.html https://benchmarksgame-team.pages.debian.net/benchmarksgame/... [1] rusage, maximum resident set size
- neonsunset 3y agoNativeAOT defaults to x86-x64 (sans v2) unless specified otherwise. If we compare to C and C++ submissions, they mostly use -march=ivybridge with -O3 optimization level. In order to make such comparison fair, you could use the following build options in .NET: <OptimizationPreference>Speed</OptimizationPreference> <IlcInstructionSet>x86-x64-v2</IlcInstructionSet> // (or 'native', to match march=native) These can also be passed as arguments to `dotnet publish` if necessary. Reference: - https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/optimizing https://learn.microsoft.com/en-us/dotnet/core/deploying/nati... - https://github.com/dotnet/runtime/blob/main/src/coreclr/nativeaot/docs/optimizing.md#options-related-to-code-generation https://github.com/dotnet/runtime/blob/main/src/coreclr/nati... -https://github.com/dotnet/runtime/blob/5b4e770daa190ce69f402c1cf92f388b07d3e144/src/coreclr/tools/Common/JitInterface/ThunkGenerator/InstructionSetDesc.txt https://github.com/dotnet/runtime/blob/5b4e770daa190ce69f402... (full list of recognized keys for IlcInstructionSet)
- igouy 3y agoDone but just + - not a difference.
- neonsunset 3y agoThanks a lot! Now the numbers are much more in line with what is expected from startup cost sensitive benchmarks: https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/csharpcore-csharpaot.html https://benchmarksgame-team.pages.debian.net/benchmarksgame/... and supposedly certain AVX-dependent (AVX1 that is, the only kind supported by ivy bridge) implementations no longer fail. If only there was an option to add side-by-side arbitrary options (e.g. Go vs C# AOT), but I suppose that's what contributions are for :)
- igouy 3y ago4 broken programs are shown, if you can fix ‘em that’s what contributions are for :)
- igouy 3y agoI'll just show the measurements that are available and leave you to choose what to do with them. https://benchmarksgame-team.pages.debian.net/benchmarksgame/#measurements https://benchmarksgame-team.pages.debian.net/benchmarksgame/...