Physics engine history

Article: PhysX87: Software Deficiency
By: fvdbergh (, July 13, 2010 6:27 am
Room: Moderated Discussions
>>>Ralf ( on 7/8/10 wrote:

>>Our game, quite FP intensive as they normally are, gains only about 10% in performance
>>when compiled with SSE2 instructions (does not use intrinsics), and loses about
>>5% of current user base that has old (mostly AMD) CPUs >without SSE2.
>Thanks for the data point! Which compiler were you using? ICC?

Sure, PhysX is using x87 code exclusively. But do yourself a
favour: implement a simple program that could (potentially) benefit from automatic SSE-style vectorization. I chose a 4-tap FIR filter. Take an array of 1 million 32-bit floats. Each output value is the sum of four consecutive input values, multiplied by the corresponding filter weight (output is a separate array to avoid load/store dependencies). This should be a slam-dunk for SSE, since the innermost loop of four consecutive multiplies could be done in a single SSE instruction (the summation following that, however, will be sequential even on SSE, assuming SSE2 instructions).

Compile this with gcc-4.4.3 -O3, using the -fpmath=387 versus the -fpmath=sse -msse -msse2 options. Verify (with -S) that the compiler is generating 387 or SSE code. On a Core Duo, applying this filter 500 times took 5.75 seconds on SSE, and 6.2 seconds on 387. (Intel icc 10.1 -aXP compile took 5.9 seconds). Looks like a 7% improvement for SSE on this hardware.

I know that this way of implementing an FIR filter is not the most efficient, and hand-coded SSE can be used to get close to 4x speedup, but the argument is that a "simple recompile" of the code will not magically make SSE "work".
To maximise SSE performance, you have to carefully order your instructions to ensure that your register loads are not holding up the other instructions. This is unlikely to happen unless your data is already aligned and contiguous, something which may not have been a priority in the original Novodex code.

Futhermore, I have written applications using both ODE and PhysX. My tests (about a year ago) showed that PhysX only accelerates particle effects (e.g., water) using CUDA. More complex objects, such as convex polyhedra, were still processed on the CPU. This does not mean that NVIDIA developers are lazy, or uninformed. It merely reflects the fact that particle systems have simple geometries, but employ very large numbers of these objects. This makes them an ideal target for a CUDA-optimized implementation.

In short, your article speculates that non-CUDA performance is unoptimized (not threaded, not using SSE), but you lack any evidence that can make this kind of accusation stick.
< Previous Post in ThreadNext Post in Thread >
TopicPosted ByDate
A bit off baseJohn Mann2010/07/07 06:04 AM
  A bit off baseDavid Kanter2010/07/07 10:28 AM
    SSE vs x87Joel Hruska2010/07/07 11:53 AM
      SSE vs x87Michael S2010/07/07 12:07 PM
        SSE vs x87hobold2010/07/08 04:12 AM
      SSE vs x87David Kanter2010/07/07 01:55 PM
        SSE vs x87Andi Kleen2010/07/08 01:43 AM
          80 bit FPRicardo B2010/07/08 06:35 AM
            80 bit FPDavid Kanter2010/07/08 10:14 AM
              80 bit FPKevin G2010/07/08 01:12 PM
                80 bit FPIan Ollmann2010/07/18 11:49 PM
                  80 bit FPDavid Kanter2010/07/19 10:33 AM
                    80 bit FPAnil Maliyekkel2010/07/19 03:49 PM
                      80 bit FPrwessel2010/07/19 04:41 PM
                    80 bit FPMatt Waldhauer2010/07/21 10:11 AM
            80 bit FPEmil Briggs2010/07/22 08:06 AM
    A bit off baseJohn Mann2010/07/08 10:06 AM
      A bit off baseDavid Kanter2010/07/08 10:27 AM
        A bit off baseIan Ameline2010/07/09 09:10 AM
          A bit off baseMichael S2010/07/10 01:13 PM
            A bit off baseIan Ameline2010/07/11 06:51 AM
  A bit off baseDavid Kanter2010/07/07 08:46 PM
    A bit off baseAnon2010/07/07 11:47 PM
      A bit off baseanon2010/07/08 01:15 AM
        A bit off baseGabriele Svelto2010/07/08 03:11 AM
          Physics engine historyPeter Clare2010/07/08 03:49 AM
            Physics engine historyNull Pointer Exception2010/07/08 05:07 AM
              Physics engine historyRalf2010/07/08 02:09 PM
                Physics engine historyDavid Kanter2010/07/08 03:16 PM
                  Physics engine historysJ2010/07/08 10:36 PM
                    Physics engine historyGabriele Svelto2010/07/08 11:59 PM
                      Physics engine historysJ2010/07/13 05:35 AM
                    Physics engine historyDavid Kanter2010/07/09 08:25 AM
                      Physics engine historysJ2010/07/13 05:49 AM
                      Physics engine historyfvdbergh2010/07/13 06:27 AM
    A bit off baseJohn Mann2010/07/08 10:11 AM
      A bit off baseDavid Kanter2010/07/08 10:31 AM
        150 GFLOP/s measured?anon2010/07/08 06:10 PM
          150 GFLOP/s measured?David Kanter2010/07/08 06:53 PM
            150 GFLOP/s measured?Aaron Spink2010/07/08 08:05 PM
              150 GFLOP/s measured?anon2010/07/08 08:31 PM
                150 GFLOP/s measured?Aaron Spink2010/07/08 09:43 PM
                  150 GFLOP/s measured?David Kanter2010/07/08 10:27 PM
                    150 GFLOP/s measured?Ian Ollmann2010/07/19 12:14 AM
                      150 GFLOP/s measured?anon2010/07/19 05:39 AM
                        150 GFLOP/s measured?hobold2010/07/19 06:26 AM
                          Philosophy for achieving peakDavid Kanter2010/07/19 10:49 AM
                      150 GFLOP/s measured?Linus Torvalds2010/07/19 06:36 AM
                        150 GFLOP/s measured?Richard Cownie2010/07/19 07:42 AM
                          150 GFLOP/s measured?Aaron Spink2010/07/19 07:56 AM
                            150 GFLOP/s measured?hobold2010/07/19 08:30 AM
                              150 GFLOP/s measured?Groo2010/07/19 01:31 PM
                                150 GFLOP/s measured?hobold2010/07/19 03:17 PM
                                  150 GFLOP/s measured?Groo2010/07/19 05:18 PM
                              150 GFLOP/s measured?Anon2010/07/19 05:18 PM
                            150 GFLOP/s measured?Mark Roulo2010/07/19 10:47 AM
                              150 GFLOP/s measured?slacker2010/07/19 11:55 AM
                                150 GFLOP/s measured?Mark Roulo2010/07/19 12:00 PM
                              150 GFLOP/s measured?anonymous422010/07/25 11:31 AM
                            150 GFLOP/s measured?Richard Cownie2010/07/19 11:41 AM
                              150 GFLOP/s measured?Linus Torvalds2010/07/19 01:57 PM
                                150 GFLOP/s measured?Richard Cownie2010/07/19 03:10 PM
                                150 GFLOP/s measured?Richard Cownie2010/07/19 03:10 PM
                                  150 GFLOP/s measured?hobold2010/07/19 03:25 PM
                                  150 GFLOP/s measured?Linus Torvalds2010/07/19 03:31 PM
                                    150 GFLOP/s measured?Richard Cownie2010/07/20 05:04 AM
                                150 GFLOP/s measured?jrl2010/07/20 12:18 AM
                            150 GFLOP/s measured?anonymous422010/07/25 11:00 AM
                              150 GFLOP/s measured?David Kanter2010/07/25 11:52 AM
                          150 GFLOP/s measured?Anon2010/07/19 05:15 PM
                            150 GFLOP/s measured?Linus Torvalds2010/07/19 06:27 PM
                              150 GFLOP/s measured?Anon2010/07/19 08:54 PM
                                150 GFLOP/s measured?anon2010/07/19 10:45 PM
                        150 GFLOP/s measured?hobold2010/07/19 08:14 AM
                          150 GFLOP/s measured?Linus Torvalds2010/07/19 10:56 AM
                            150 GFLOP/s measured?a reader2010/07/21 07:16 PM
                              150 GFLOP/s measured?Linus Torvalds2010/07/21 08:05 PM
                                150 GFLOP/s measured?anon2010/07/22 01:09 AM
                                  150 GFLOP/s measured?a reader2010/07/22 06:53 PM
                                    150 GFLOP/s measured?gallier22010/07/23 04:58 AM
                                      150 GFLOP/s measured?a reader2010/07/25 07:35 AM
                                        150 GFLOP/s measured?David Kanter2010/07/25 10:49 AM
                                          150 GFLOP/s measured?a reader2010/07/26 06:03 PM
                                            150 GFLOP/s measured?Michael S2010/07/28 12:38 AM
                                              150 GFLOP/s measured?Gabriele Svelto2010/07/28 12:44 AM
                                    150 GFLOP/s measured?anon2010/07/23 03:55 PM
                                      150 GFLOP/s measured?slacker2010/07/23 11:48 PM
                                        150 GFLOP/s measured?anon2010/07/24 01:36 AM
                                    150 GFLOP/s measured?Vincent Diepeveen2010/07/27 04:37 PM
                                      150 GFLOP/s measured??2010/07/27 10:42 PM
                                        150 GFLOP/s measured?slacker2010/07/28 04:55 AM
                                      Intel's clock rate projectionsAM2010/07/28 01:03 AM
                                        nostalgia ain't what it used to besomeone2010/07/28 04:38 AM
                                          Intel's clock rate projectionsAM2010/07/28 09:12 PM
                        Separate the OoO-ness from speculative-ness?2010/07/20 06:19 AM
                          Separate the OoO-ness from speculative-nessMark Christiansen2010/07/20 01:26 PM
                          Separate the OoO-ness from speculative-nessslacker2010/07/20 05:04 PM
                            Separate the OoO-ness from speculative-nessMatt Sayler2010/07/20 05:10 PM
                              Separate the OoO-ness from speculative-nessslacker2010/07/20 08:37 PM
                                Separate the OoO-ness from speculative-ness?2010/07/20 10:51 PM
                                  Separate the OoO-ness from speculative-nessanon2010/07/21 01:16 AM
                                    Separate the OoO-ness from speculative-ness?2010/07/21 06:05 AM
                                      Software conventionsPaul A. Clayton2010/07/21 07:52 AM
                                        Software conventions?2010/07/22 04:43 AM
                                      SpeculationDavid Kanter2010/07/21 09:32 AM
                                        Pipelining affects the ISA?2010/07/22 09:58 PM
                                          Pipelining affects the ISA?2010/07/22 10:14 PM
                                          Pipelining affects the ISArwessel2010/07/22 11:03 PM
                                            Pipelining affects the ISA?2010/07/23 04:50 AM
                                            Pipelining affects the ISA?2010/07/23 05:10 AM
                                              Pipelining affects the ISAThiago Kurovski2010/07/23 01:59 PM
                                                Pipelining affects the ISAanon2010/07/24 06:35 AM
                                                  Pipelining affects the ISAThiago Kurovski2010/07/24 10:12 AM
                                          Pipelining affects the ISAGabriele Svelto2010/07/26 01:50 AM
                                            Pipelining affects the ISAIlleglWpns2010/07/26 04:14 AM
                                              Pipelining affects the ISAMichael S2010/07/26 02:33 PM
                                      Separate the OoO-ness from speculative-nessanon2010/07/21 04:53 PM
                                        Separate the OoO-ness from speculative-ness?2010/07/22 03:15 AM
                                          Separate the OoO-ness from speculative-nessanon2010/07/22 03:27 AM
                                      Separate the OoO-ness from speculative-nessslacker2010/07/21 06:45 PM
                                        Separate the OoO-ness from speculative-nessanon2010/07/22 12:57 AM
                                        Separate the OoO-ness from speculative-ness?2010/07/22 04:26 AM
                                          Separate the OoO-ness from speculative-nessDan Downs2010/07/22 07:14 AM
                                          Confusing and not very useful definitionDavid Kanter2010/07/22 11:41 AM
                                            Confusing and not very useful definition?2010/07/22 09:58 PM
                                              Confusing and not very useful definitionUngo2010/07/24 11:06 AM
                                                Confusing and not very useful definition?2010/07/25 09:23 PM
                            Separate the OoO-ness from speculative-nesssomeone2010/07/20 07:02 PM
                              Separate the OoO-ness from speculative-nessThiago Kurovski2010/07/21 03:13 PM
            You are just quoting SINGLE precision flops? OMG what planet do you live? Vincent Diepeveen2010/07/19 09:26 AM
              The prior poster was talking about SP (NT)David Kanter2010/07/19 10:34 AM
                All FFT's need double precisionVincent Diepeveen2010/07/19 01:02 PM
                  All FFT's need double precisionDavid Kanter2010/07/19 01:09 PM
                    All FFT's need double precisionVincent Diepeveen2010/07/19 03:06 PM
                  All FFT's need double precision - notMichael S2010/07/20 12:16 AM
                    All FFT's need double precision - notUngo2010/07/20 11:04 PM
                      All FFT's need double precision - notMichael S2010/07/21 01:35 PM
                      All FFT's need double precision - notEduardoS2010/07/21 01:52 PM
                        All FFT's need double precision - notAnon2010/07/21 04:23 PM
                          All FFT's need double precision - notRicardo B2010/07/26 06:46 AM
                        I'm on a boat!anon2010/07/22 10:42 AM
                        All FFT's need double precision - notVincent Diepeveen2010/07/24 10:39 PM
                          All FFT's need double precision - notslacker2010/07/25 02:27 AM
                            All FFT's need double precision - notRicardo B2010/07/26 06:40 AM
                          All FFT's need double precision - notEduardoS2010/07/25 07:37 AM
                            All FFT's need double precision - notMichael S2010/07/25 09:43 AM
                    All FFT's need double precision - notVincent Diepeveen2010/07/24 10:19 PM
      A bit off baseEduardoS2010/07/08 03:08 PM
        A bit off baseGroo2010/07/08 05:11 PM
          A bit off basejohn mann2010/07/08 05:58 PM
            All right...let's cool it...David Kanter2010/07/08 06:54 PM
    A bit off baseVincent Diepeveen2010/07/19 02:36 PM
Reply to this Topic
Body: No Text
How do you spell avocado?