Introduction

The motorBike case is part of the tutorials that come with OpenFOAM 1.6. This particular version of the case uses the bug fixes posted in the OpenFOAM 1.6.x git version. These are the timing results of using the original version of OpenFOAM and the cross-compiled version.

The set-up:

The tests that were performed were a single run with each available version of OpenFOAM, all executed in computers with 4GiB of RAM and have Intel Core2Duo E8400 @3.00GHz.

The Linux versions of OpenFOAM 1.6 used are the ones available here (32bit) and here (64bit); both versions were executed in OpenSUSE 10.3 x86_64.

The Windows versions of OpenFOAM 1.6 were cross-compiled with mingw and mingw-w64, available with blueCFD.

The MPI cases were run with dual-core single-machine, with the mesh split in two on the Y axis, thus splitting the bike symmetrically.

The mesh and results are compressed with gzip internally (default of the case).

Run times:

The times are in seconds and the results are in the following table:

Single Core

mingw32 DP

mingw-w32 SP

mingw-w32 DP

mingw-w64 DP

Linux 32

Linux 64

snappyHexMesh (write)

396

359

450

105

104

83

snappyHexMesh (total)

678

703

717

231

203

158

simpleFoam

2280

1384

2039

1932

1845

1492

Dual Core

snappyHexMesh (write)

397

358

461

101

105

83

snappyHexMesh (total)

670

716

720

225

204

158

simpleFoam

1713

1050

1746

1537

1375

1280

simpleFoam Performance Ratio Single/Double

1.33

1.32

1.17

1.26

1.34

1.17

Legend:

the version mingw32 is cross-compiled with gcc-4.3.3 mingw;

the versions mingw-w32 and mingw-w64 are cross-compiled with gcc-4.4.2 mingw-w64;

SP means Single Precision;

DP means Double Precision.

Notes:

snappyHexMesh returns two timings: write mesh time and total execution time. These timings reflect the weight that writing the meshes has in the whole process of generating the mesh.

The meshes for each run with simpleFoam were generated by the respective version of snappyHexMesh, therefore the results are subjective to the generated mesh. In other words, the mesh for each run isn't the same.

These timings are of a single run for each version. Proper testing should have at least 5 runs to do an average.

The mingw-w32 SP version of snappyHexMesh isn't always able to produce a working mesh, due to floating point issues.

Conclusions:

The cross-compiled versions suffer from the conversion layer of using the mingw run-time. Therefore file handling isn't optimized as a result and also dedicated core optimizations were not used (e.g. mmx and sse). Memory allocation may also suffer from insufficient optimization by gcc for Windows, although the -O3 switch was used.
Nonetheless, the mingw-w64 version of snappyHexMesh has surprising timing results, reaching execution speeds near to those in Linux.