Channels ▼


Expression Generics

Test Results

To measure performance gain in execution time and space, I present two programs:

  • One that uses expression templates.
  • The other relies on brute-force operator overloading.

Both calculate the following expression:

v = (v1*v1*v2 + v1*v1*v3 + v1*v2*v2 + v1*v2*v3 + 
    v1*v3*v3 + v2*v2*v2 + v2*v2*v3)/(v1*v2*v3);

where v1, v2, and v3 are the input vectors. To make resource utilization easy to measure, the programs calculate expressions over Vectors containing 8 million double-precision numbers. To exclude the cost of program startup and initialization, and account for variability from one run to another, I arranged for both programs to repeat the evaluation of the expression multiple times, after the input vectors have been initialized. A timestamp is taken immediately before and immediately after the evaluation. Memory utilization is measured with perfmon.exe, a commonly used Windows tool. The test programs were compiled with Visual C++ 2005. The following numbers shows average values after repeating the test several times on a typical well-equipped PC running Windows XP Professional. The peak memory utilization numbers do not include memory consumed by the three input Vectors and the output Vector.

Expression templates

  • Peak memory utilization: 0 bytes, no temporaries created.
  • Execution time: 0.3 seconds.

Brute-force operator overloading

  • Peak memory utilization: 1.33Gb
  • Execution time: 2.1 seconds

Related Reading

More Insights

Currently we allow the following HTML tags in comments:

Single tags


<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags


<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

