IECS Basic Console Execution (Speed) Tests
On the previous page, we looked at the Inference Engine Component Suite (IECS) Advanced Console speed tests. The second IECS test application is the IECS Basic Console application. As mentioned, the output in the Basic Console can be controlled from a combobox: Live Updates print all output immediately as it occurs, Defer Updates defers all output until the current command is finished by surrounding output in BeginUpdate/EndUpdate, and No Updates suppresses all output and will just write execution time to a status bar. This application is about getting the GUI out of the way and benchmarking non-visual performance with minimal GUI updates. However, as we will see, even a little output to a TMemo wrapped in BeginUpdate/EndUpdate calls can have significant performance penalties, especially in FMX.
IECS Basic Console, VCL, Win32
As expected, our first tests in Win32 VCL revealed that No Updates executions are fastest, deferring updates are next, and live updates are the slowest. However, with the VCL TMemo, the differences are relatively minor with no updates being only about twice as fast. There is one surprise though: Delphi XE6 is slightly but consistently faster than all other versions of Delphi tested. There is a 16-27 ms difference between Delphi XE6 (fastest) and Delphi 2010 (slowest). Since the IECS uses generics extensively and generics were still relatively immature in Delphi 2010 (only being introduced in Delphi 2009), perhaps this explains the differences we see.
IECS Basic Console, VCL, Win64
When we move up to 64 bits, Delphi XE6 keeps its lead and is faster than all other Delphi versions in all modes (except for a tie with Delphi XE2 when deferring updates).
Examining the ratio of Win64/Win32 doesn’t reveal much. Win64 is marginally faster than Win32 with live updates and marginally slower with no updates.
IECS Basic Console, FMX, Win32
With the FMX version of the IECS Basic Console, things get more interesting. In Win32, the Delphi XE4 version scales the best from no updates to defer updates to live updates. Delphi XE6 has a strong showing being second fastest (only 6 ms behind XE2) with no updates, fastest with defer updates, and second fastest with live updates. As usual, Delphi XE5 does well if we don’t have to actually output anything. As soon as live updates are turned on, Delphi XE4 is over 4x faster.
IECS Basic Console, FMX, Win64
Moving up to 64-bit FMX, Delphi XE6 continues to do well. It is only 2.6 ms behind XE2 (within error margins) when there are no updates, a solid 23 ms ahead when deferring updates, and second fastest (101 ms behind) when live updates are on. Delphi XE4 is commanding when live updates are on and very strong otherwise. Delphi XE5 is dragged down by its slow TMemo output.
Looking at the ratio of Win64/Win32, there are no clear patterns shown. Delphi XE3 is always faster in Win32 versus Win64. Both Delphi XE2 and XE6 manage to gain speed when outputting to the memo, whether live or deferred. Delphi XE5 manages to do significantly better in Win64 when doing live updates to the memo.
IECS Basic Console, FMX, OSX
Moving to the Mac, Delphi XE4 is our winner, managing strong showings in all modes. Without updates all versions of Delphi are essentially tied (XE6 ekes out 4.5 ms victory). When we start deferring updates, XE2 and XE3 fall behind. The surprising result is that when we turn on live updates, Delphi XE2 performs as poorly as XE5.
Like with the IECS Advanced Console, when we look at the ratio of Win32/OSX, the Win32 versions absolutely destroy the OSX versions and are 2x-5x faster. Delphi XE2 shows the largest difference. Delphi XE4 manages the “best” parity between the Win32 and OSX version, with the Win32 version being “only” a little more than twice the speed of the OSX version.
On the next page, we look at the IECS Mobile app speed tests…