bulat-icon  Articles  

[+]  Articles


Difference between WEC7 and WEC2013 (Core Performance)

by Vinoth.R


Windows Embedded Compact 2013 - A next version of Windows Embedded Compact series released by Microsoft with new and improved features to overcome major issues faced in WEC7 (earlier version). There are several improvements in WEC2013 that every windows embedded development team has to be aware and this article demonstrates the performance and code size improvement.
Although WEC7 is supporting ARMv7 instructions but the compiler and assembler is older and it didn't support the THUMP2 instruction set. Due to this, can't utilize the advantage of ARMv7. To overcome this issue, WEC2013 compiler is upgraded to latest C++11 and assembler is upgraded to newer version of EABI and support ARMv7 with THUMB2 instructions (only). Another advantage is, the application and OS development environment is the same version of Visual studio (VS2012).

Test Environment and Tools

To evaluate the performance of WEC2013, TI DM3730 based EVM has been taken. In which we have the BSP for WEC7 and it is ported to WEC2013 successfully. A small piece of code has been taken to evaluate the performance difference between WEC7 and WEC2013. Figure A) has shown the code snippet.
Sample code taken for evaluation

Figure A) Sample code taken for evaluation
Same OS components and BSP components are chosen for WEC7 and WEC2013 and the Release build has been chosen to build the OS binary. A console application project named "CETest" is built with VS2008 for WEC7 and VS2012 for WEC2013 in release build which includes the above function. Time taken for this function call is measured for performance.

Code Analysis

The assembly code generated for the application CETest.exe using Dumpbin utility as shown below for WEC7 and WEC2013.
Dumpbin  /DISASM         cetest.exe  > cetest.txt
WEC7 Vs WEC2013
Figure B) Assembly code comparison between WEC7 and WEC2013 for the CETest()
Assembly code shown in the Left hand side (LHS) is generated for WEC7 and right hand side is for WEC2013. Here the column 1 is the address, column 2 is the opcode generated for the assembly code shown in column 3 & 4.

Performance comparison


Almost both the compilers are generated the same instruction but the opcode generated is different for WEC7 and WEC2013. Most of the opcode is 16bit in size, instruction fetch time is reduced for WEC2013, since the instructions generated are ARMV7T2 (Thumb2). Figure C) shows the execution time comparison between WEC7 and WEC2013 for CETest() function call.

Execution time for WEC7 and WEC2013 for CETest() function call
Figure C ) Execution time for WEC7 and WEC2013 for CETest() function call

WEC2013 Performance is improved 20% over WEC7 in this example but in few cases Thumb2 instruction performance is almost equal to ARM


Code Size comparison

Figure B) shows the assembly code of the CETest() function. Although WEC7 and WEC2013 have the same number of instructions, the size allocated for instructions are different. WEC7 assembler is generating ARM instruction and its size is 32 bit and WEC2013 assembler generates ARMv7T2 instruction set, most of the instructions are 16bit and few instructions are 32 bit in size as shown in the figure. Total code size of the function CETest() in WEC7 is 92 bytes (0x0001105C-0x00011000) and in WEC2013 is 62 byes (0x0001103E-0x00011000) which is ~32% increase in code density( code size reduced). Figure d) shows the performance and code size comparison graph between WEC7 and WEC2013.
WEC7 & WEC2013 performance and code size report
Figure D) WEC7 & WEC2013 performance and code size report


Considering the above analysis, it is possible to utilize the maximum benefits of the latest cores in WEC2013 compare to WEC7. WEC2013 has some more enhancements which will be covered later.