GithubHelp home page GithubHelp logo

alexxnica / bench2d Goto Github PK

View Code? Open in Web Editor NEW

This project forked from joelgwebber/bench2d

0.0 1.0 0.0 78.59 MB

Benchmarks of various systems using Box2D

HTML 0.27% ActionScript 12.09% Shell 0.02% C++ 15.70% C 57.58% CMake 0.83% Objective-C 1.36% M 0.06% Lua 0.03% Makefile 4.17% Python 0.28% Dart 0.09% JavaScript 7.44% Java 0.06%

bench2d's Introduction

What is this?

A simple VM performance benchmark suite that attempts to guage the performance of various VMs on a real-world workload using the Box2D (http://box2d.org/) physics library. This library is particularly suited to benchmarking VM performance because it's compute-intensive, often a real-world performance bottleneck in games, and has been ported to many languages. You can find more background here, here, and here.

Current results (as of 5 June 2016):

ms/frame 5th %ile 95th %ile Ratio to C
C (clang-500.2.79) 2.05 1.80 2.30 1.00
pNaCl 2.32 1.99 2.70 1.13
asm.js (Firefox 46) 2.63 2.00 3.00 1.28
Java (1.8) 3.31 3.00 4.00 1.62
asm.js (Chrome 51) 3.47 3.00 4.00 1.69
asm.js (Safari 9.1) 3.94 3.00 5.00 1.92
asm.js (MS Edge) (*) 4.18 3.00 5.00 2.03
Dart VM (1.16) 5.04 4.00 7.00 2.46
Box2dWeb (Chrome 51) 5.68 5.00 7.00 2.77
Box2dWeb (Firefox 46) 6.75 6.00 8.00 3.29
Box2dWeb (MS Edge) (*) 7.72 6.00 9.00 3.77
Box2dWeb (Safari 9.1) 8.20 7.00 10.0 4.00
AS3 9.95 9.00 12.0 4.85
Dart2js (Chrome 51) 11.1 10.0 14.0 5.42

[Test platform: MacBook Pro, 2.3 GHz i7, 16G memory, Mac OS X 10.11.5, Windows 10. All platform and compiler versions are latest unless otherwise specified.]

(*) I don't have any easy way to run Windows natively on my Mac (I'm not going to setup dual boot partitions just for this benchmark), so I had to try and back out IE10 numbers using Parallels. I calculated a performance penalty ratio by running the Javascript benchmarks on Chrome/Mac and Chrome/Win (VM) (7.73ms / 5.68ms = 1.36x), then used that to adjust the MS Edge numbers. There are all sorts of things that could be wrong with this, but I expect it at least gives us a rough idea.

![](graph.png)

Scaled to multiples of native performance. The white line denotes the mean, and the edges of the box denote the 5th and 95th %iles.

Notes since last time

  • Update C code to Box2D_2.3.1.
  • Removed Crossbridge, as it's getting kind of long in the tooth and I don't really feel like building it.
  • Removed the asm.js build in /c, because there's a maintained js port available that's already compiled.
  • Removed Dartium, as it no longer exists (the Dart VM fills this role now).
  • AS3 is a bit slower (on Chrome) than last time, possibly because it's been changed from an NPAPI plugin to Pepper.
  • Added box2d-html5 (https://github.com/mvasilkov/box2d-html5) to the js benchmarks, but it's significantly slower than the old one, so I didn't bother adding it to the benchmarks.

Old Results:

5 July 2013 15 March 2014

Mini FAQ:

  • But physics library (X) outperforms Box2D on platform (Y)!
    • That's not the point. The point is to test VM performance by using a similar code base on different platforms.
  • But Box2dweb is a crappy port of Flash code!
    • Feel free to improve it, or hand-port your own. I'll happily accept the patch. That said, the code's fairly straightforward, and I'd be surprised if manual tweaking of it made much of a difference.
  • Why haven't you updated to Box2D 2.3?
    • Because there do not appear to be updated versions of Box2dWeb, the Flash port, and the Dart port. One of the real benefits of using Box2d for this benchmark is that the ports are pretty structurally similar to the original C++ version.

Test platforms:

  • Mac OS X: I'm using this. It works well.
  • Linux: Others use this. It seems to work, but I don't personally test it.
  • Windows: Can probably be cajoled into working, but will likely take a lot of manual labor. I prefer to build on my Mac then use the output files directly on a Windows box without building them there.

Required tools:

Environment variables (largely to locate the above tools):

  • $FLEX_SDK: Flex SDK directory (e.g., /opt/flex_sdk_4.6)
  • $NACL_SDK_ROOT: Directory containing the NaCl SDK version you want to use (e.g., /opt/nacl_sdk/pepper_49)

Targets:

  • /c:
  • /java:
    • ant run
  • /js:
    • run-d8 (if you have V8's standalone shell)
    • Or open bench2d_run.html in your favorite browser
  • /as3:
    • ./build (open Bench2d.html in your favorite browser, or Bench2d.swf in the standalone Flash Player)
    • (There's also a version that uses the "Nape" physics library, but this is not relevent to VM benchmarking)
  • /dart:
    • pub update; dart bench2d.dart
  • /dart (dart2js):
    • pub serve; open http://localhost:8080/bench2d.html
  • /nodejs
    • npm install; node index.js (NOTE: This isn't working at the moment, but isn't directly relevant to benchmarking)

Future work

  • Find or build a better Javascript port of Box2D.
  • Find a way to automate the benchmarks.
  • Make the timer resolution less bad.
  • Benchmark .NET, Android's Java VM

bench2d's People

Contributors

joelgwebber avatar kevmoo avatar slightlyoff avatar jonkirkman avatar huningxin avatar zuker avatar kripken avatar deltaluca avatar nathanhammond avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.