Announcement

Collapse
No announcement yet.

Benchmarks developers (probably) care about

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Benchmarks developers (probably) care about

    Good time-of-day, everyone!

    The vast majority of benchmarks published these days, in the mainstream, focuses
    on pretty degenerate cases that most people won't even care about, most of the
    time. Although, said media goes somewhat far enough on the success metric towards
    convincing the public that's all the rage.

    The problem is, the benchmarks published on the forefront (with notable exception
    of games) are all quite scalable (sometimes perfectly), and one could say, almost
    carefully oriented towards highlighting the strong side of very-many-core CPUs.

    One could say -- hey, that's a good thing -- we now have proper competition (even
    if those highly scalable benchmarks are at least somewhat misleading) -- and that
    benefits all of the developers, too!

    Well, if you look at the numbers for the staple of programmer's sustenance, the
    venerable C family of languages -- most prominently the Linux kernel and Clang
    compilation benchmarks, then indeed, that's hard to dispute. Even Linus himself
    switched to a ridiculously multi-core Ryzen machine recently, and I'm sure it
    wasn't on impulse.

    However, as much fun as that is (and hey, developers love fun!), the C language
    family isn't particularly, well, forward-looking, in terms of progress.

    A number of different modes of linguistic expression exist, all spanning different
    parts of the multi-dimensional spectrum between performance, interactivity and,
    importantly, assurance.

    A particular feature of "grown-up" languages, that are also not hard-core
    system-oriented, is relieving programmers from manual memory management -- that is
    use of automatic garbage collection. Mature implementations, of course, have
    highly optimised, parallel, cache-friendly, low-latency and otherwise many
    different forms of those garbage collectors.

    And that appears to open a whole new can of worms, when it comes to benchmarking
    modern systems for their ability to cater to the developer needs.

    So, there -- we live in a world, where there is a number of widely-used
    higher-level languages, that have memory usage patterns nontrivially-different
    from traditional C-based languages -- and that difference translates to rather
    surprising compiler performance characteristics.

    What is important, though, is that's where the developer world moves to: Java, C#
    (or, rather, JVM and CLR -- with their plethora of languages) and yes, even such
    odd things like Haskell. Indeed C and C++ are losing their relevance in many ways
    because of them (although that's also partly driven by Rust, a non-GC language).

    Oh boy, was that a long introduction! The purpose, though, was to motivate a
    certain rethinking of compilation benchmarking -- to better reflect what the
    non-C-based developer demographics might be interested in.

    So, long story short -- despite the fairly obvious (and tremendous) improvement
    that the new wave of highly-cored offerings bring to compilation of C/C++
    projects, the same improvement doesn't necessarily translate to compilation of
    GC-based languages.

    Currently, we don't have very many such benchmarks on Openbenchmarking.org: we
    used to have one for the Java Gradle build, and we have recently gained the
    Haskell/GHC-based compilation of the clash-lang.org's Haskell-to-VHDL compiler
    (heh).

    The story, so far, seems to be that the high core counts don't translate to
    performance gains all that well -- instead, we see much better correlation with
    lower memory latencies and higher core frequencies.

    A particularly enlightening synthetic benchmark in this respect is Google's
    multichase: https://openbenchmarking.org/test/pts/multichase. As can be seen in
    the second set of results, i9-10900K is reigning supreme.

    The results translate pretty well to both the Java Gradle build and the Haskell/GHC
    'clash-lang' benchmark:

    - https://openbenchmarking.org/showdow...va-gradle-perf
    - https://openbenchmarking.org/test/pts/build-clash-1.0.0

    So, what are the conclusions?

    Maybe the extreme multi-core isn't the be-all, end-all we sought for, even for
    people who we thought would traditionally gain from high parallelism --
    developers. And especially so, developers using more modern, higher-level
    languages with automatic memory management.

    First is -- it'd be nice to see more non-C/C++ compilation benchmarks for common
    GC-based languages. That's pretty much a given.

    Second, as much as that's counterintuitive in today's IT landscape, it'd be still
    interesting to see performance reviews for some Intel CPU's as well.

    For instance, there's the Xeon E-2288G (which is a tuned version of i9-9900K) and
    seems to do quite well on the Java Gradle build benchmark, and the upcoming
    i9-10900K-derived Xeon W-1290P, which is already being made available for
    preordering.

    And, of course, the upcoming Zen 3!
    Last edited by deepfire; 07 June 2020, 08:33 PM.

  • #2
    The results here are strange to me, how does the ryzen 3 3300x beat the ryzen 9 3950x, it's got less cores, cache, sustained boost etc.

    Comment

    Working...
    X