
Box2d Revisited - mmastrac
http://j15r.com/blog/2013/04/25/Box2d_Revisited
======
evmar
I'm curious whether the performance varies if you used a C compiler from the
last five years -- GCC 4.2.1 was released in July 2007. (I'm not claimed the
author of the post is unfairly biasing the results, I'm just honestly
curious.)

~~~
evmar
To answer my own question, I got:

    
    
      gcc 4.6.3: 3.554688 +/- 4.786550
      clang trunk: 3.593750 +/- 4.798172  
      Chrome: 41.03515625 +/- 9.331709130062185
    

Which puts Chrome at about 11x these native compilers, consistent with the
blog post.

~~~
dmm

        gcc 4.8.0: 1.640625 +/- 3.703323
        clang 3.2: 1.718750 +/- 3.772718
        chrome   : 23.28515625 +/- 3.636932727324763
    

So chrome is about ~14x the native compilers.

Changing gcc to use -O2 instead of -O3 gets: 1.562500 +/- 3.630922.

~~~
gillianseed
What about -Ofast which enables -ffast-math?

~~~
dmm
The makefile supplied with the repo specifies -ffast-math. It uses these
CFLAGS:

    
    
        CFLAGS=-s -O3 -msse -mfpmath=sse -ffast-math -fomit-frame-pointer -IBox2D_v2.2.1 -DNDEBUG=1
    

Using -Ofast gets the same results as -O2.

~~~
gillianseed
Thanks for the info, I should have guessed that he enabled -ffast-math
manually.

------
nezza-_-
I can't zoom on this page with my phone and, due to that, can't read it at all
except with the "Reader" function.

~~~
nitrogen
That enormous position:fixed header makes it difficult to read even on a
desktop.

------
mrmiller
Interesting how JS still doesn't live up to AS3. Everyone always discredits
Flash... but if you're trying to make a Physics-based browser game, it still
seems appropriate!

~~~
azakai
Well, the asm.js version of the benchmark is JS, and it outperformed AS3.
Although as cpleppert said, perhaps an alchemy version for Flash would be
faster than AS3, that would be interesting to see.

But, I'm not aware of an alchemy version of Box2D for Flash that is convenient
to use from normal Flash (what presumably the rest of the game is written in),
while for asm.js there is such a version (that is easily usable from normal
JS), here's a demo

<http://kripken.github.io/box2d.js/webgl_demo/box2d.html>

So comparing currently usable versions of Box2D, the fastest JS one (the
asm.js one) is faster than the fastest Flash one.

------
ne0phyte
Please revisit your web design.

<http://imgur.com/fBZZXYY.png>

~~~
joelgwebber
I might be able to do that more effectively if you'd point out what browser
you're running.

~~~
ne0phyte
That was the Hacker News app which uses the Android browser. I am running
Android 4.2.2.

------
niggler
Interesting that NaCl is far closer to native performance than asm.js. Can
that performance gap be closed?

~~~
jlongster
I'm not sure I'd call that "far" different, but asm.js is certainly in early
stages so it probably will get faster.

~~~
niggler

        C (gcc 4.2.1)	2.62 +/- 0.24	1.0x
        NaCl (x86-32)	3.39 +/- 0.25	1.3x
        asm.js (Firefox Nightly)	5.12 +/- 0.59	1.9x
    

NaCl is 30% slower, asm.js is 90% slower.

~~~
lutusp
Your conclusion doesn't follow from your data. 5.12 is not 90% slower than
2.62, it's 51% slower.

~~~
chr1
He says NaCl is 30% slower than _c++_, asm.js is 90% slower than _c++_ which
is correct.

~~~
lutusp
For asm.js to be 90% slower than c++, it would have to run at 10% the speed of
c++, not 51% of its speed, which is what the data shows. 100% slower is not
1/2 the speed, it's no speed at all.

Take some speed x. Increasing it by 100% gives 2x. Decreasing it by 100% gives
zero.

Expressed another way, 100% of x is x. Add 100% = 2x, Subtract 100% = zero.
The original claim is "90% slower." Clearly the OP either meant 51% slower or
49% slower, depending on how one reads it.

a = 2.62

b = 5.19

a / b = 0.5048, or 50.48%: "b has 50.48 percent the speed of a".

EDIT: wow, once again downvoted for being right and proving it.

~~~
jules
English conventions are inconsistent. "X is 2x slower than Y" usually means
that Y runs at twice the speed of X. Since 90% = 0.9, "X is 90% slower than Y"
would mean that X is actually faster than Y. Therefore it's better to state it
in an unambiguous way, e.g. X took 2x as much time as Y, or just look at the
numbers directly.

~~~
lutusp
> English conventions are inconsistent.

Yes, and it's an argument for expressing these ideas with mathematics instead
of words.

> Therefore it's better to state it in an unambiguous way, e.g. X took 2x as
> much time as Y, or just look at the numbers directly.

Complete agreement.

------
furyofantares
I'd love to see the numbers for the asm.js version running in Safari and
Chrome

~~~
azakai
You can grab his repo and try it yourself, but as I commented on the blogpost,
on my machine I see firefox without asm.js optimizations and chrome as being
about the same speed, both of them are half the speed of firefox with asm.js
optimizations. (I don't have a machine with safari to test on.)

Which means the asm.js version is faster than other JS versions, even without
specific asm.js optimizations.

~~~
furyofantares
Thanks. I didn't do it myself because I wasn't able to find the asm.js version
version, I must be blind.

------
CmonNoReg
Not too useful as does not include one of the very popular ports and an
additional major platform:

<http://farseerphysics.codeplex.com/>

:(

~~~
mambodog
It's perfectly useful as comparison of browser-based Box2d ports, and how they
perform relative to the original C library.

~~~
Stranger2013
Farseer can run in browser using Silverlight.

