[PhysX FluidMark] How to Get your Multi-core CPU Busy at 100% ?

Core i7 and 100% CPU usage
Core i7 with all cores busy at 100% with PhysX FluidMark

The new version of FluidMark comes with a cool feature: the multi-core CPU support.

What does it really mean ? Simply that you can run the whole PhysX fluid simulation on the CPU in a 100% software mode AND the fluid simulation is spread over all CPU cores in order to speed up computations.

I added two modes when multi-core PhysX is used:
1 – Synchronous mode (default)
2 – Asynchronous mode (Async mode)

Both modes are controlled by the Async mode checkbox:

FluidMark - GPU PhysX

In both modes, and when Force PhysX CPU is checked, one or several threads are used for the fluid simulation. The number of threads is actually drived by the number of emitters.

In synchronous mode, all PhysX threads are synchronized with the rendering thread. That’s why the number of FPS (frames per second – rendering) is the same than the number of SPS (simulations per second – physics). You discover the term SPS for the first time ? Normal, I created it during the dev of FluidMark to differentiate the speed of graphics rendering to the speed of physics simulation. In synchronous mode you’ll never get a 100% CPU usage because the synchronization introduces a kind of wait state every frame.

On a 4-core CPU with 3 emitters, you should get a CPU usage of around 80%. I get a 84% CPU usage on my Core i7 with 120’000 particles and 7 emitters:

PhysX FluidMark: 8-core CPU and CPU usage

In asynchronous mode, the PhysX threads are decoupled from the rendering thread and there is no longer synchronization between graphics and physics threads. This mode allows a 100% CPU usage if the amount of particles in the fluids is enough large. In my case, I have the 8 cores of my Core i7 busy at 100% with 120’000 particles:

PhysX FluidMark: 8-core CPU and 100% CPU usage

In synchronous mode, even if you select more emitters than the number of CPU cores-1, the fluid simulation will run without problem (if the number of particle is large, it simulation will be slow). On the other hand, in asynchronous mode, you’ll have some troubles if the number of emitters exceeds the number of COU cores -1.

Currently I don’t know if the problem comes from my multithreading code or from Windows. When a lrage number of particles is set, PhysX threads are quite heavy and I read somewhere that Windows has some problems with really intensive threads especially when the number of intensive threads is greater than the number of CPU cores…

Update 2010.05.28

[youtube 2DwOtw09oo8]

3 thoughts on “[PhysX FluidMark] How to Get your Multi-core CPU Busy at 100% ?”

  1. Leith Bade

    I found a bug that makes it crash.

    Just type a bigger number than (CPU Cores – 1) into the # of emitters box then start the benchmark.

    It will crash instantly.

  2. Pingback: [GPU Tool] PhysX FluidMark 1.2.0 Available with Multi-Core CPU Support - 3D Tech News, Pixel Hacking, Data Visualization and 3D Programming - Geeks3D.com

  3. Pingback: [GPU Tool] FluidMark 1.3.0: GPU PhysX Fluids with more than 700K SPH Particles - 3D Tech News, Pixel Hacking, Data Visualization and 3D Programming - Geeks3D.com

Comments are closed.