DotNet Core Benchmarks Consistently Beat JVM

Te uiti prin codul din benchmark si vezi ca este folosit

        [DllImport("pcre2-8", EntryPoint = "pcre2_compile_8", CharSet = CharSet.Ansi)]
        extern static IntPtr PcreCompile(string pattern, long length, uint options,
            out int errorcode, out long erroroffset, IntPtr ccontext);

        [DllImport("pcre2-8", EntryPoint = "pcre2_jit_compile_8", CharSet = CharSet.Ansi)]
        extern static int PcreJitCompile(IntPtr code, uint options);

Iar in alte programe mai sunt si folosite lucrui specifice setului de intructiuni al procesorului.

https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/spectralnorm-csharpcore-5.html


        [MethodImpl(MethodImplOptions.AggressiveOptimization)]
        private static void mult_Av(double* v, double* outv, int n)
        {
            Parallel.For(0, n, i =>
            {
                var sum = Vector128<double>.Zero;
                for (var j = 0; j < n; j += 2)
                {
                    var b = Sse2.LoadVector128(v + j);
                    var a = Vector128.Create(A(i, j), A(i, j + 1));
                    sum = Sse2.Add(sum, Sse2.Divide(b, a));
                }

                var add = Sse3.HorizontalAdd(sum, sum);
                var value = Unsafe.As<Vector128<double>, double>(ref add);
                Unsafe.WriteUnaligned(outv + i, value);
            });
        }

Conform documentatiei, este ceva intrinsec care este optimizat pt hardware.

Probabil ceva echivalent pt java ar fi asta
https://openjdk.java.net/jeps/338

Nota:
Just common sense and googling. Daca este cineva care stie mai multe dspre aceste lucrui, este invitat sa scrie :slight_smile:

Incluisv Hotspot are anumite lucruri facute in asa fel incat sa aiba avantajul unuei executii mai rapide de catre hardware.
https://chriswhocodes.com/hotspot_intrinsics_jdk14.html

O alta discutie pe subiect

3 Likes