[std-interval] C++ interval std
Alan Eliasen
eliasen at mindspring.com
Fri Apr 7 13:05:30 PDT 2006
Steve Clamage wrote:
> I compiled and ran on 64-bit sparc (US II) and 64-bit amd64 (Opteron).
> According to my earlier claims, pass-by-value should have been faster.
>
> 64-bit sparc:
> addByValue: 690000 ticks 4.1e+08
> addByRef: 680000 ticks 4.1e+08
> addByConstRef: 450000 ticks 4.1e+08
>
> 64-bit amd64:
> addByValue: 1280000 ticks 4.1e+08
> addByRef: 670000 ticks 4.1e+08
> addByConstRef: 670000 ticks 4.1e+08
>
> Color my face red. :-)
>
> This result is quite different from other experiments with small structs
> that showed pass-by-value performing better. One possibility is that the
> compiler is missing some optimization opportunities. Another is that
> this example is not representative.
Well, it looks like in GCC that it's quite dependent on optimization
levels and inlining. I rewrote my samples to include both inlined and
ordinary functions, and made some changes that apparently prevented the
compiler from optimizing out loops. I should adopt your sample for the
inner loop, but here are my numbers:
x86_64, gcc 3.4.4, Linux:
-O0:
addByValue: 20020000 ticks Sum: [1.7, 4.1]
addByRef: 19590000 ticks Sum: [1.7, 4.1]
addByConstRef: 19590000 ticks Sum: [1.7, 4.1]
addByValueInline: 22550000 ticks Sum: [1.7, 4.1]
addByRefInline: 19460000 ticks Sum: [1.7, 4.1]
addByConstRefInline: 19610000 ticks Sum: [1.7, 4.1]
-O1:
addByValue: 12570000 ticks Sum: [1.7, 4.1]
addByRef: 8350000 ticks Sum: [1.7, 4.1]
addByConstRef: 8620000 ticks Sum: [1.7, 4.1]
addByValueInline: 9980000 ticks Sum: [1.7, 4.1]
addByRefInline: 5600000 ticks Sum: [1.7, 4.1]
addByConstRefInline: 5600000 ticks Sum: [1.7, 4.1]
-O2:
addByValue: 11490000 ticks Sum: [1.7, 4.1]
addByRef: 7370000 ticks Sum: [1.7, 4.1]
addByConstRef: 7960000 ticks Sum: [1.7, 4.1]
addByValueInline: 2140000 ticks Sum: [1.7, 4.1]
addByRefInline: 5590000 ticks Sum: [1.7, 4.1]
addByConstRefInline: 5600000 ticks Sum: [1.7, 4.1]
-O3:
addByValue: 2140000 ticks Sum: [1.7, 4.1]
addByRef: 5590000 ticks Sum: [1.7, 4.1]
addByConstRef: 5580000 ticks Sum: [1.7, 4.1]
addByValueInline: 2000000 ticks Sum: [1.7, 4.1]
addByRefInline: 5600000 ticks Sum: [1.7, 4.1]
addByConstRefInline: 5590000 ticks Sum: [1.7, 4.1]
and x86 Windows (mingw):
-O0:
addByValue: 115077 ticks Sum: [1.7, 4.1]
addByRef: 85886 ticks Sum: [1.7, 4.1]
addByConstRef: 85675 ticks Sum: [1.7, 4.1]
addByValueInline: 128447 ticks Sum: [1.7, 4.1]
addByRefInline: 90221 ticks Sum: [1.7, 4.1]
addByConstRefInline: 90612 ticks Sum: [1.7, 4.1]
-O1:
addByValue: 100967 ticks Sum: [1.7, 4.1]
addByRef: 37254 ticks Sum: [1.7, 4.1]
addByConstRef: 35842 ticks Sum: [1.7, 4.1]
addByValueInline: 54780 ticks Sum: [1.7, 4.1]
addByRefInline: 23334 ticks Sum: [1.7, 4.1]
addByConstRefInline: 23495 ticks Sum: [1.7, 4.1]
-O2:
addByValue: 63462 ticks Sum: [1.7, 4.1]
addByRef: 38547 ticks Sum: [1.7, 4.1]
addByConstRef: 38886 ticks Sum: [1.7, 4.1]
addByValueInline: 82340 ticks Sum: [1.7, 4.1]
addByRefInline: 26108 ticks Sum: [1.7, 4.1]
addByConstRefInline: 21181 ticks Sum: [1.7, 4.1]
-O3:
addByValue: 71995 ticks Sum: [1.7, 4.1]
addByRef: 23043 ticks Sum: [1.7, 4.1]
addByConstRef: 22283 ticks Sum: [1.7, 4.1]
addByValueInline: 66817 ticks Sum: [1.7, 4.1]
addByRefInline: 22082 ticks Sum: [1.7, 4.1]
addByConstRefInline: 22653 ticks Sum: [1.7, 4.1]
Source for tests:
http://futureboy.us/temp/Interval.h
http://futureboy.us/temp/Interval.cc
--
Alan Eliasen | "When trouble is solved before it
eliasen at mindspring.com | forms, who calls that clever?"
http://futureboy.us/ | --Sun Tzu
More information about the Std-interval
mailing list