* Performance degradation on g++ 4.6
@ 2011-07-29 18:08 Oleg Smolsky
2011-07-29 18:14 ` Xinliang David Li
2011-07-30 9:24 ` Richard Guenther
0 siblings, 2 replies; 22+ messages in thread
From: Oleg Smolsky @ 2011-07-29 18:08 UTC (permalink / raw)
To: gcc
[-- Attachment #1: Type: text/plain, Size: 1529 bytes --]
Hi there, I have compiled and run a set of C++ benchmarks on a
CentOS4/64 box using the following compilers:
a) g++4.1 that is available for this distro (GCC version 4.1.2
20071124 (Red Hat 4.1.2-42)
b) g++4.6 that I built (stock version 4.6.1)
The machine has two Intel quad core processors in x86_64 mode
(/proc/cpuinfo attached)
Benchmarks were taken from this page:
http://stlab.adobe.com/performance/
Results:
- some of these tests showed 20..30% performance degradation
(eg the second section in the simple_types_constant_folding test:
30s -> 44s)
- a few were quicker
- full reports are attached
I would assume that performance of the generated code is closely
monitored by the dev community and obvious blunders should not sneak
in... However, my findings are reproducible with these synthetic
benchmarks as well as production code at work. The latter shows
approximately 25% degradation on CPU bound tests.
Is there a trick to building the compiler or using a specific
-mtune/-march flag for my CPU? I built the compiler with all the default
options (it just has a distinct installation path):
../gcc-%{version}/configure --prefix=/work/tools/gcc46
--enable-languages=c,c++ --with-system-zlib
--with-mpfr=/work/tools/mpfr24 --with-gmp=/work/tools/gmp
--with-mpc=/work/tools/mpc
LD_LIBRARY_PATH=/work/tools/mpfr/lib24:/work/tools/gmp/lib:/work/tools/mpc/lib
Are there any published benchmarks? I'd appreciate any advice or pointers.
Thanks in advance,
Oleg.
[-- Attachment #2: cpuinfo --]
[-- Type: text/plain, Size: 4816 bytes --]
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Genuine Intel(R) CPU @ 2.40GHz
stepping : 4
cpu MHz : 2393.943
cache size : 4096 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 4
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm pni monitor ds_cpl tm2 cx16 xtpr lahf_lm
bogomips : 4793.09
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Genuine Intel(R) CPU @ 2.40GHz
stepping : 4
cpu MHz : 2393.943
cache size : 4096 KB
physical id : 1
siblings : 4
core id : 4
cpu cores : 4
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm pni monitor ds_cpl tm2 cx16 xtpr lahf_lm
bogomips : 4787.17
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 2
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Genuine Intel(R) CPU @ 2.40GHz
stepping : 4
cpu MHz : 2393.943
cache size : 4096 KB
physical id : 0
siblings : 4
core id : 1
cpu cores : 4
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm pni monitor ds_cpl tm2 cx16 xtpr lahf_lm
bogomips : 4787.12
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 3
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Genuine Intel(R) CPU @ 2.40GHz
stepping : 4
cpu MHz : 2393.943
cache size : 4096 KB
physical id : 1
siblings : 4
core id : 5
cpu cores : 4
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm pni monitor ds_cpl tm2 cx16 xtpr lahf_lm
bogomips : 4787.16
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 4
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Genuine Intel(R) CPU @ 2.40GHz
stepping : 4
cpu MHz : 2393.943
cache size : 4096 KB
physical id : 0
siblings : 4
core id : 2
cpu cores : 4
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm pni monitor ds_cpl tm2 cx16 xtpr lahf_lm
bogomips : 4787.15
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 5
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Genuine Intel(R) CPU @ 2.40GHz
stepping : 4
cpu MHz : 2393.943
cache size : 4096 KB
physical id : 1
siblings : 4
core id : 6
cpu cores : 4
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm pni monitor ds_cpl tm2 cx16 xtpr lahf_lm
bogomips : 4787.16
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 6
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Genuine Intel(R) CPU @ 2.40GHz
stepping : 4
cpu MHz : 2393.943
cache size : 4096 KB
physical id : 0
siblings : 4
core id : 3
cpu cores : 4
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm pni monitor ds_cpl tm2 cx16 xtpr lahf_lm
bogomips : 4787.15
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 7
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Genuine Intel(R) CPU @ 2.40GHz
stepping : 4
cpu MHz : 2393.943
cache size : 4096 KB
physical id : 1
siblings : 4
core id : 7
cpu cores : 4
fpu : yes
fpu_exception : yes
cpuid level : 10
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm pni monitor ds_cpl tm2 cx16 xtpr lahf_lm
bogomips : 4787.19
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
[-- Attachment #3: report41.txt --]
[-- Type: text/plain, Size: 66594 bytes --]
##STARTING Version 1.0
Thu Jul 28 11:58:41 PDT 2011
##CFlags:
##CPPFlags: -I. -O3
##Start machine report version 1.0
##Compiler
GCC version 4.1.2 20071124 (Red Hat 4.1.2-42)
Compiled for LP64
##Target CPU
Compiled for x86 64bit
##Physical CPU
Little Endian
##Machine
##Operating System
##End machine report
./stepanov_abstraction
test description absolute operations ratio with
number time per second test0
0 "double pointer" 5.03 sec 795.23 M 1.00
1 "double pointer_class" 5.04 sec 793.65 M 1.00
2 "DoubleValueWrapper pointer" 5.03 sec 795.23 M 1.00
3 "DoubleValueWrapper pointer_class" 5.04 sec 793.65 M 1.00
4 "DoubleValueWrapper10 pointer" 5.04 sec 793.65 M 1.00
5 "DoubleValueWrapper10 pointer_class" 5.04 sec 793.65 M 1.00
Total absolute time for Abstraction Accumulate: 30.22 sec
Abstraction Accumulate Penalty: 1.00
test description absolute operations ratio with
number time per second test0
0 "insertion_sort double pointer" 0.86 sec 2.33 M 1.00
1 "insertion_sort double pointer_class" 0.86 sec 2.33 M 1.00
2 "insertion_sort DoubleValueWrapper pointer" 1.28 sec 1.56 M 1.49
3 "insertion_sort DoubleValueWrapper pointer_class" 1.28 sec 1.56 M 1.49
4 "insertion_sort DoubleValueWrapper10 pointer" 1.28 sec 1.56 M 1.49
5 "insertion_sort DoubleValueWrapper10 pointer_class" 1.27 sec 1.57 M 1.48
Total absolute time for Abstraction Insertion Sort: 6.83 sec
Abstraction Insertion Sort Penalty: 1.37
test description absolute operations ratio with
number time per second test0
0 "quicksort double pointer" 1.35 sec 11.85 M 1.00
1 "quicksort double pointer_class" 1.30 sec 12.31 M 0.96
2 "quicksort DoubleValueWrapper pointer" 1.37 sec 11.68 M 1.01
3 "quicksort DoubleValueWrapper pointer_class" 1.27 sec 12.60 M 0.94
4 "quicksort DoubleValueWrapper10 pointer" 1.36 sec 11.76 M 1.01
5 "quicksort DoubleValueWrapper10 pointer_class" 1.27 sec 12.60 M 0.94
Total absolute time for Abstraction Quicksort: 7.92 sec
Abstraction Quicksort Penalty: 0.97
test description absolute operations ratio with
number time per second test0
0 "heap_sort double pointer" 1.34 sec 11.94 M 1.00
1 "heap_sort double pointer_class" 1.40 sec 11.43 M 1.04
2 "heap_sort DoubleValueWrapper pointer" 1.37 sec 11.68 M 1.02
3 "heap_sort DoubleValueWrapper pointer_class" 1.38 sec 11.59 M 1.03
4 "heap_sort DoubleValueWrapper10 pointer" 1.34 sec 11.94 M 1.00
5 "heap_sort DoubleValueWrapper10 pointer_class" 1.42 sec 11.27 M 1.06
Total absolute time for Abstraction Heap Sort: 8.25 sec
Abstraction Heap Sort Penalty: 1.03
./stepanov_vector
test description absolute operations ratio with
number time per second test0
0 "double pointer verify2" 3.78 sec 793.65 M 1.00
1 "double vector iterator" 3.77 sec 795.76 M 1.00
2 "double pointer reverse" 3.78 sec 793.65 M 1.00
3 "double vector reverse_iterator" 3.78 sec 793.65 M 1.00
4 "double vector iterator reverse" 3.78 sec 793.65 M 1.00
5 "double pointer reverse reverse" 3.81 sec 787.40 M 1.01
6 "double vector reverse_iterator reverse" 3.80 sec 789.47 M 1.01
7 "double vector iterator reverse reverse" 3.79 sec 791.56 M 1.00
Total absolute time for Vector accumulate: 30.29 sec
Vector accumulate Penalty: 1.00
test description absolute operations ratio with
number time per second test0
0 "insertion_sort double pointer verify2" 1.29 sec 2.33 M 1.00
1 "insertion_sort double vector iterator" 1.30 sec 2.31 M 1.01
2 "insertion_sort double pointer reverse" 1.30 sec 2.31 M 1.01
3 "insertion_sort double vector reverse_iterator" 1.53 sec 1.96 M 1.19
4 "insertion_sort double vector iterator reverse" 1.52 sec 1.97 M 1.18
5 "insertion_sort double pointer reverse reverse" 1.91 sec 1.57 M 1.48
6 "insertion_sort double vector reverse_iterator reverse" 1.92 sec 1.56 M 1.49
7 "insertion_sort double vector iterator reverse reverse" 1.91 sec 1.57 M 1.48
Total absolute time for Vector Insertion Sort: 12.68 sec
Vector Insertion Sort Penalty: 1.24
test description absolute operations ratio with
number time per second test0
0 "quicksort double pointer verify2" 2.04 sec 11.76 M 1.00
1 "quicksort double vector iterator" 1.93 sec 12.44 M 0.95
2 "quicksort double pointer reverse" 2.18 sec 11.01 M 1.07
3 "quicksort double vector reverse_iterator" 2.24 sec 10.71 M 1.10
4 "quicksort double vector iterator reverse" 2.23 sec 10.76 M 1.09
5 "quicksort double pointer reverse reverse" 2.15 sec 11.16 M 1.05
6 "quicksort double vector reverse_iterator reverse" 2.18 sec 11.01 M 1.07
7 "quicksort double vector iterator reverse reverse" 2.19 sec 10.96 M 1.07
Total absolute time for Vector Quicksort: 17.14 sec
Vector Quicksort Penalty: 1.06
test description absolute operations ratio with
number time per second test0
0 "heap_sort double pointer verify2" 1.97 sec 12.18 M 1.00
1 "heap_sort double vector iterator" 2.07 sec 11.59 M 1.05
2 "heap_sort double pointer reverse" 2.49 sec 9.64 M 1.26
3 "heap_sort double vector reverse_iterator" 2.48 sec 9.68 M 1.26
4 "heap_sort double vector iterator reverse" 2.48 sec 9.68 M 1.26
5 "heap_sort double pointer reverse reverse" 2.20 sec 10.91 M 1.12
6 "heap_sort double vector reverse_iterator reverse" 2.14 sec 11.21 M 1.09
7 "heap_sort double vector iterator reverse reverse" 2.15 sec 11.16 M 1.09
Total absolute time for Vector Heap Sort: 17.98 sec
Vector Heap Sort Penalty: 1.16
./functionobjects
test description absolute operations ratio with
number time per second test0
0 "qsort array with function pointer" 4.43 sec 4.51 M 1.00
1 "quicksort function array with function pointer" 2.57 sec 7.78 M 0.58
2 "quicksort template array with function pointer" 2.57 sec 7.78 M 0.58
3 "quicksort template array with template function pointer" 2.52 sec 7.94 M 0.57
4 "sort array with function pointer" 2.00 sec 10.00 M 0.45
5 "quicksort template array with user-supplied functor" 1.97 sec 10.15 M 0.44
6 "sort array with user-supplied functor" 1.44 sec 13.89 M 0.33
7 "quicksort template array with user-supplied inline functor" 1.97 sec 10.15 M 0.44
8 "sort array with user-supplied inline functor" 1.43 sec 13.99 M 0.32
9 "quicksort template array with standard functor" 1.97 sec 10.15 M 0.44
10 "sort array with standard functor" 1.44 sec 13.89 M 0.33
11 "quicksort template array with native < operator" 1.96 sec 10.20 M 0.44
12 "sort array with native < operator" 1.42 sec 14.08 M 0.32
Total absolute time for Function Objects: 27.69 sec
./simple_types_constant_folding
test description absolute operations ratio with
number time per second test0
0 "int8_t constant" 0.00 sec inf M nan
1 "int8_t add constants" 0.00 sec inf M nan
2 "int8_t subtract constants" 0.00 sec inf M nan
3 "int8_t multiply constants" 0.01 sec 1600000.00 M inf
4 "int8_t divide constants" 0.01 sec 1600000.00 M inf
5 "int8_t mod constants" 0.00 sec inf M nan
6 "int8_t equal constants" 0.01 sec 1600000.00 M inf
7 "int8_t notequal constants" 0.01 sec 1600000.00 M inf
8 "int8_t greater than constants" 0.00 sec inf M nan
9 "int8_t less than constants" 0.01 sec 1600000.00 M inf
10 "int8_t greater than equal constants" 0.01 sec 1600000.00 M inf
11 "int8_t less than equal constants" 0.00 sec inf M nan
12 "int8_t and constants" 0.01 sec 1600000.00 M inf
13 "int8_t or constants" 0.01 sec 1600000.00 M inf
14 "int8_t xor constants" 0.00 sec inf M nan
Total absolute time for int8_t simple constant folding: 0.08 sec
test description absolute operations ratio with
number time per second test0
0 "int8_t constant add" 1.35 sec 1185.19 M 1.00
1 "int8_t multiple constant adds" 1.34 sec 1194.03 M 0.99
2 "int8_t constant subtract" 1.34 sec 1194.03 M 0.99
3 "int8_t multiple constant subtracts" 1.34 sec 1194.03 M 0.99
4 "int8_t constant multiply" 1.71 sec 935.67 M 1.27
5 "int8_t multiple constant multiplies" 1.71 sec 935.67 M 1.27
6 "int8_t multiple constant multiply2" 1.34 sec 1194.03 M 0.99
7 "int8_t constant divide" 3.85 sec 415.58 M 2.85
8 "int8_t multiple constant divides" 6.02 sec 265.78 M 4.46
9 "int8_t multiple constant divide2" 1.34 sec 1194.03 M 0.99
10 "int8_t multiple constant mixed" 0.97 sec 1649.48 M 0.72
11 "int8_t constant and" 1.34 sec 1194.03 M 0.99
12 "int8_t multiple constant and" 1.34 sec 1194.03 M 0.99
13 "int8_t constant or" 1.34 sec 1194.03 M 0.99
14 "int8_t multiple constant or" 1.34 sec 1194.03 M 0.99
15 "int8_t constant xor" 1.34 sec 1194.03 M 0.99
16 "int8_t multiple constant xor" 1.34 sec 1194.03 M 0.99
Total absolute time for int8_t constant folding: 30.35 sec
test description absolute operations ratio with
number time per second test0
0 "uint8_t constant" 0.01 sec 1600000.00 M 1.00
1 "uint8_t add constants" 0.01 sec 1600000.00 M 1.00
2 "uint8_t subtract constants" 0.00 sec inf M 0.00
3 "uint8_t multiply constants" 0.01 sec 1600000.00 M 1.00
4 "uint8_t divide constants" 0.00 sec inf M 0.00
5 "uint8_t mod constants" 0.01 sec 1600000.00 M 1.00
6 "uint8_t equal constants" 0.01 sec 1600000.00 M 1.00
7 "uint8_t notequal constants" 0.00 sec inf M 0.00
8 "uint8_t greater than constants" 0.01 sec 1600000.00 M 1.00
9 "uint8_t less than constants" 0.00 sec inf M 0.00
10 "uint8_t greater than equal constants" 0.01 sec 1600000.00 M 1.00
11 "uint8_t less than equal constants" 0.01 sec 1600000.00 M 1.00
12 "uint8_t and constants" 0.00 sec inf M 0.00
13 "uint8_t or constants" 0.01 sec 1600000.00 M 1.00
14 "uint8_t xor constants" 0.01 sec 1600000.00 M 1.00
Total absolute time for uint8_t simple constant folding: 0.10 sec
test description absolute operations ratio with
number time per second test0
0 "uint8_t constant add" 1.34 sec 1194.03 M 1.00
1 "uint8_t multiple constant adds" 1.34 sec 1194.03 M 1.00
2 "uint8_t constant subtract" 1.34 sec 1194.03 M 1.00
3 "uint8_t multiple constant subtracts" 1.34 sec 1194.03 M 1.00
4 "uint8_t constant multiply" 1.68 sec 952.38 M 1.25
5 "uint8_t multiple constant multiplies" 1.69 sec 946.75 M 1.26
6 "uint8_t multiple constant multiply2" 1.34 sec 1194.03 M 1.00
7 "uint8_t constant divide" 3.51 sec 455.84 M 2.62
8 "uint8_t multiple constant divides" 3.52 sec 454.55 M 2.63
9 "uint8_t multiple constant divide2" 1.34 sec 1194.03 M 1.00
10 "uint8_t multiple constant mixed" 0.96 sec 1666.67 M 0.72
11 "uint8_t constant and" 1.35 sec 1185.19 M 1.01
12 "uint8_t multiple constant and" 1.34 sec 1194.03 M 1.00
13 "uint8_t constant or" 1.35 sec 1185.19 M 1.01
14 "uint8_t multiple constant or" 1.35 sec 1185.19 M 1.01
15 "uint8_t constant xor" 1.35 sec 1185.19 M 1.01
16 "uint8_t multiple constant xor" 1.35 sec 1185.19 M 1.01
Total absolute time for uint8_t constant folding: 27.49 sec
test description absolute operations ratio with
number time per second test0
0 "int16_t constant" 0.01 sec 1600000.00 M 1.00
1 "int16_t add constants" 0.01 sec 1600000.00 M 1.00
2 "int16_t subtract constants" 0.01 sec 1600000.00 M 1.00
3 "int16_t multiply constants" 0.01 sec 1600000.00 M 1.00
4 "int16_t divide constants" 0.01 sec 1600000.00 M 1.00
5 "int16_t mod constants" 0.01 sec 1600000.00 M 1.00
6 "int16_t equal constants" 0.01 sec 1600000.00 M 1.00
7 "int16_t notequal constants" 0.01 sec 1600000.00 M 1.00
8 "int16_t greater than constants" 0.01 sec 1600000.00 M 1.00
9 "int16_t less than constants" 0.01 sec 1600000.00 M 1.00
10 "int16_t greater than equal constants" 0.01 sec 1600000.00 M 1.00
11 "int16_t less than equal constants" 0.01 sec 1600000.00 M 1.00
12 "int16_t and constants" 0.01 sec 1600000.00 M 1.00
13 "int16_t or constants" 0.01 sec 1600000.00 M 1.00
14 "int16_t xor constants" 0.01 sec 1600000.00 M 1.00
Total absolute time for int16_t simple constant folding: 0.15 sec
test description absolute operations ratio with
number time per second test0
0 "int16_t constant add" 1.35 sec 1185.19 M 1.00
1 "int16_t multiple constant adds" 1.35 sec 1185.19 M 1.00
2 "int16_t constant subtract" 1.35 sec 1185.19 M 1.00
3 "int16_t multiple constant subtracts" 1.34 sec 1194.03 M 0.99
4 "int16_t constant multiply" 1.76 sec 909.09 M 1.30
5 "int16_t multiple constant multiplies" 1.72 sec 930.23 M 1.27
6 "int16_t multiple constant multiply2" 1.34 sec 1194.03 M 0.99
7 "int16_t constant divide" 3.85 sec 415.58 M 2.85
8 "int16_t multiple constant divides" 4.02 sec 398.01 M 2.98
9 "int16_t multiple constant divide2" 1.34 sec 1194.03 M 0.99
10 "int16_t multiple constant mixed" 0.97 sec 1649.48 M 0.72
11 "int16_t constant and" 1.34 sec 1194.03 M 0.99
12 "int16_t multiple constant and" 1.37 sec 1167.88 M 1.01
13 "int16_t constant or" 1.34 sec 1194.03 M 0.99
14 "int16_t multiple constant or" 1.34 sec 1194.03 M 0.99
15 "int16_t constant xor" 1.34 sec 1194.03 M 0.99
16 "int16_t multiple constant xor" 1.34 sec 1194.03 M 0.99
Total absolute time for int16_t constant folding: 28.46 sec
test description absolute operations ratio with
number time per second test0
0 "uint16_t constant" 0.01 sec 1600000.00 M 1.00
1 "uint16_t add constants" 0.01 sec 1600000.00 M 1.00
2 "uint16_t subtract constants" 0.01 sec 1600000.00 M 1.00
3 "uint16_t multiply constants" 0.01 sec 1600000.00 M 1.00
4 "uint16_t divide constants" 0.01 sec 1600000.00 M 1.00
5 "uint16_t mod constants" 0.01 sec 1600000.00 M 1.00
6 "uint16_t equal constants" 0.00 sec inf M 0.00
7 "uint16_t notequal constants" 0.01 sec 1600000.00 M 1.00
8 "uint16_t greater than constants" 0.01 sec 1600000.00 M 1.00
9 "uint16_t less than constants" 0.01 sec 1600000.00 M 1.00
10 "uint16_t greater than equal constants" 0.01 sec 1600000.00 M 1.00
11 "uint16_t less than equal constants" 0.00 sec inf M 0.00
12 "uint16_t and constants" 0.00 sec inf M 0.00
13 "uint16_t or constants" 0.00 sec inf M 0.00
14 "uint16_t xor constants" 0.01 sec 1600000.00 M 1.00
Total absolute time for uint16_t simple constant folding: 0.11 sec
test description absolute operations ratio with
number time per second test0
0 "uint16_t constant add" 1.52 sec 1052.63 M 1.00
1 "uint16_t multiple constant adds" 1.52 sec 1052.63 M 1.00
2 "uint16_t constant subtract" 1.53 sec 1045.75 M 1.01
3 "uint16_t multiple constant subtracts" 1.52 sec 1052.63 M 1.00
4 "uint16_t constant multiply" 2.04 sec 784.31 M 1.34
5 "uint16_t multiple constant multiplies" 2.03 sec 788.18 M 1.34
6 "uint16_t multiple constant multiply2" 1.52 sec 1052.63 M 1.00
7 "uint16_t constant divide" 1.99 sec 804.02 M 1.31
8 "uint16_t multiple constant divides" 1.99 sec 804.02 M 1.31
9 "uint16_t multiple constant divide2" 1.52 sec 1052.63 M 1.00
10 "uint16_t multiple constant mixed" 1.34 sec 1194.03 M 0.88
11 "uint16_t constant and" 1.52 sec 1052.63 M 1.00
12 "uint16_t multiple constant and" 1.52 sec 1052.63 M 1.00
13 "uint16_t constant or" 1.52 sec 1052.63 M 1.00
14 "uint16_t multiple constant or" 1.52 sec 1052.63 M 1.00
15 "uint16_t constant xor" 1.52 sec 1052.63 M 1.00
16 "uint16_t multiple constant xor" 1.53 sec 1045.75 M 1.01
Total absolute time for uint16_t constant folding: 27.65 sec
test description absolute operations ratio with
number time per second test0
0 "int32_t constant" 0.00 sec inf M nan
1 "int32_t add constants" 0.00 sec inf M nan
2 "int32_t subtract constants" 0.00 sec inf M nan
3 "int32_t multiply constants" 0.00 sec inf M nan
4 "int32_t divide constants" 0.00 sec inf M nan
5 "int32_t mod constants" 0.00 sec inf M nan
6 "int32_t equal constants" 0.00 sec inf M nan
7 "int32_t notequal constants" 0.00 sec inf M nan
8 "int32_t greater than constants" 0.00 sec inf M nan
9 "int32_t less than constants" 0.00 sec inf M nan
10 "int32_t greater than equal constants" 0.00 sec inf M nan
11 "int32_t less than equal constants" 0.00 sec inf M nan
12 "int32_t and constants" 0.01 sec 1600000.00 M inf
13 "int32_t or constants" 0.00 sec inf M nan
14 "int32_t xor constants" 0.00 sec inf M nan
Total absolute time for int32_t simple constant folding: 0.01 sec
test description absolute operations ratio with
number time per second test0
0 "int32_t constant add" 1.51 sec 1059.60 M 1.00
1 "int32_t multiple constant adds" 1.51 sec 1059.60 M 1.00
2 "int32_t constant subtract" 1.51 sec 1059.60 M 1.00
3 "int32_t multiple constant subtracts" 1.52 sec 1052.63 M 1.01
4 "int32_t constant multiply" 1.94 sec 824.74 M 1.28
5 "int32_t multiple constant multiplies" 1.78 sec 898.88 M 1.18
6 "int32_t multiple constant multiply2" 1.51 sec 1059.60 M 1.00
7 "int32_t constant divide" 3.53 sec 453.26 M 2.34
8 "int32_t multiple constant divides" 3.86 sec 414.51 M 2.56
9 "int32_t multiple constant divide2" 1.52 sec 1052.63 M 1.01
10 "int32_t multiple constant mixed" 1.35 sec 1185.19 M 0.89
11 "int32_t constant and" 1.53 sec 1045.75 M 1.01
12 "int32_t multiple constant and" 1.52 sec 1052.63 M 1.01
13 "int32_t constant or" 1.52 sec 1052.63 M 1.01
14 "int32_t multiple constant or" 1.53 sec 1045.75 M 1.01
15 "int32_t constant xor" 1.51 sec 1059.60 M 1.00
16 "int32_t multiple constant xor" 1.51 sec 1059.60 M 1.00
Total absolute time for int32_t constant folding: 30.66 sec
test description absolute operations ratio with
number time per second test0
0 "uint32_t constant" 0.01 sec 1600000.00 M 1.00
1 "uint32_t add constants" 0.00 sec inf M 0.00
2 "uint32_t subtract constants" 0.00 sec inf M 0.00
3 "uint32_t multiply constants" 0.00 sec inf M 0.00
4 "uint32_t divide constants" 0.00 sec inf M 0.00
5 "uint32_t mod constants" 0.00 sec inf M 0.00
6 "uint32_t equal constants" 0.00 sec inf M 0.00
7 "uint32_t notequal constants" 0.00 sec inf M 0.00
8 "uint32_t greater than constants" 0.00 sec inf M 0.00
9 "uint32_t less than constants" 0.00 sec inf M 0.00
10 "uint32_t greater than equal constants" 0.00 sec inf M 0.00
11 "uint32_t less than equal constants" 0.00 sec inf M 0.00
12 "uint32_t and constants" 0.01 sec 1600000.00 M 1.00
13 "uint32_t or constants" 0.00 sec inf M 0.00
14 "uint32_t xor constants" 0.00 sec inf M 0.00
Total absolute time for uint32_t simple constant folding: 0.02 sec
test description absolute operations ratio with
number time per second test0
0 "uint32_t constant add" 1.51 sec 1059.60 M 1.00
1 "uint32_t multiple constant adds" 1.51 sec 1059.60 M 1.00
2 "uint32_t constant subtract" 1.51 sec 1059.60 M 1.00
3 "uint32_t multiple constant subtracts" 1.52 sec 1052.63 M 1.01
4 "uint32_t constant multiply" 1.94 sec 824.74 M 1.28
5 "uint32_t multiple constant multiplies" 1.78 sec 898.88 M 1.18
6 "uint32_t multiple constant multiply2" 1.51 sec 1059.60 M 1.00
7 "uint32_t constant divide" 2.77 sec 577.62 M 1.83
8 "uint32_t multiple constant divides" 2.77 sec 577.62 M 1.83
9 "uint32_t multiple constant divide2" 1.52 sec 1052.63 M 1.01
10 "uint32_t multiple constant mixed" 1.35 sec 1185.19 M 0.89
11 "uint32_t constant and" 1.51 sec 1059.60 M 1.00
12 "uint32_t multiple constant and" 1.51 sec 1059.60 M 1.00
13 "uint32_t constant or" 1.52 sec 1052.63 M 1.01
14 "uint32_t multiple constant or" 1.51 sec 1059.60 M 1.00
15 "uint32_t constant xor" 1.51 sec 1059.60 M 1.00
16 "uint32_t multiple constant xor" 1.51 sec 1059.60 M 1.00
Total absolute time for uint32_t constant folding: 28.76 sec
test description absolute operations ratio with
number time per second test0
0 "int64_t constant" 0.01 sec 1600000.00 M 1.00
1 "int64_t add constants" 0.00 sec inf M 0.00
2 "int64_t subtract constants" 0.00 sec inf M 0.00
3 "int64_t multiply constants" 0.00 sec inf M 0.00
4 "int64_t divide constants" 0.00 sec inf M 0.00
5 "int64_t mod constants" 0.00 sec inf M 0.00
6 "int64_t equal constants" 0.00 sec inf M 0.00
7 "int64_t notequal constants" 0.00 sec inf M 0.00
8 "int64_t greater than constants" 0.00 sec inf M 0.00
9 "int64_t less than constants" 0.00 sec inf M 0.00
10 "int64_t greater than equal constants" 0.00 sec inf M 0.00
11 "int64_t less than equal constants" 0.00 sec inf M 0.00
12 "int64_t and constants" 0.00 sec inf M 0.00
13 "int64_t or constants" 0.00 sec inf M 0.00
14 "int64_t xor constants" 0.00 sec inf M 0.00
Total absolute time for int64_t simple constant folding: 0.01 sec
test description absolute operations ratio with
number time per second test0
0 "int64_t constant add" 1.57 sec 1019.11 M 1.00
1 "int64_t multiple constant adds" 1.57 sec 1019.11 M 1.00
2 "int64_t constant subtract" 1.57 sec 1019.11 M 1.00
3 "int64_t multiple constant subtracts" 1.56 sec 1025.64 M 0.99
4 "int64_t constant multiply" 2.02 sec 792.08 M 1.29
5 "int64_t multiple constant multiplies" 2.01 sec 796.02 M 1.28
6 "int64_t multiple constant multiply2" 1.57 sec 1019.11 M 1.00
7 "int64_t constant divide" 3.38 sec 473.37 M 2.15
8 "int64_t multiple constant divides" 3.76 sec 425.53 M 2.39
9 "int64_t multiple constant divide2" 1.57 sec 1019.11 M 1.00
10 "int64_t multiple constant mixed" 1.34 sec 1194.03 M 0.85
11 "int64_t constant and" 1.57 sec 1019.11 M 1.00
12 "int64_t multiple constant and" 1.56 sec 1025.64 M 0.99
13 "int64_t constant or" 1.57 sec 1019.11 M 1.00
14 "int64_t multiple constant or" 1.57 sec 1019.11 M 1.00
15 "int64_t constant xor" 1.56 sec 1025.64 M 0.99
16 "int64_t multiple constant xor" 1.57 sec 1019.11 M 1.00
Total absolute time for int64_t constant folding: 31.32 sec
test description absolute operations ratio with
number time per second test0
0 "uint64_t constant" 0.00 sec inf M nan
1 "uint64_t add constants" 0.00 sec inf M nan
2 "uint64_t subtract constants" 0.00 sec inf M nan
3 "uint64_t multiply constants" 0.00 sec inf M nan
4 "uint64_t divide constants" 0.01 sec 1600000.00 M inf
5 "uint64_t mod constants" 0.00 sec inf M nan
6 "uint64_t equal constants" 0.00 sec inf M nan
7 "uint64_t notequal constants" 0.00 sec inf M nan
8 "uint64_t greater than constants" 0.00 sec inf M nan
9 "uint64_t less than constants" 0.00 sec inf M nan
10 "uint64_t greater than equal constants" 0.00 sec inf M nan
11 "uint64_t less than equal constants" 0.00 sec inf M nan
12 "uint64_t and constants" 0.00 sec inf M nan
13 "uint64_t or constants" 0.00 sec inf M nan
14 "uint64_t xor constants" 0.00 sec inf M nan
Total absolute time for uint64_t simple constant folding: 0.01 sec
test description absolute operations ratio with
number time per second test0
0 "uint64_t constant add" 1.57 sec 1019.11 M 1.00
1 "uint64_t multiple constant adds" 1.57 sec 1019.11 M 1.00
2 "uint64_t constant subtract" 1.57 sec 1019.11 M 1.00
3 "uint64_t multiple constant subtracts" 1.57 sec 1019.11 M 1.00
4 "uint64_t constant multiply" 2.03 sec 788.18 M 1.29
5 "uint64_t multiple constant multiplies" 2.03 sec 788.18 M 1.29
6 "uint64_t multiple constant multiply2" 1.58 sec 1012.66 M 1.01
7 "uint64_t constant divide" 2.70 sec 592.59 M 1.72
8 "uint64_t multiple constant divides" 2.70 sec 592.59 M 1.72
9 "uint64_t multiple constant divide2" 1.57 sec 1019.11 M 1.00
10 "uint64_t multiple constant mixed" 1.35 sec 1185.19 M 0.86
11 "uint64_t constant and" 1.57 sec 1019.11 M 1.00
12 "uint64_t multiple constant and" 1.57 sec 1019.11 M 1.00
13 "uint64_t constant or" 1.57 sec 1019.11 M 1.00
14 "uint64_t multiple constant or" 1.57 sec 1019.11 M 1.00
15 "uint64_t constant xor" 1.57 sec 1019.11 M 1.00
16 "uint64_t multiple constant xor" 1.57 sec 1019.11 M 1.00
Total absolute time for uint64_t constant folding: 29.66 sec
test description absolute operations ratio with
number time per second test0
0 "float constant" 20.09 sec 796.42 M 1.00
1 "float add constants" 20.09 sec 796.42 M 1.00
2 "float subtract constants" 20.11 sec 795.62 M 1.00
3 "float multiply constants" 20.14 sec 794.44 M 1.00
4 "float divide constants" 20.09 sec 796.42 M 1.00
Total absolute time for float simple constant folding: 100.52 sec
test description absolute operations ratio with
number time per second test0
0 "float constant add" 2.01 sec 796.02 M 1.00
1 "float multiple constant adds" 3.36 sec 476.19 M 1.67
2 "float constant subtract" 2.01 sec 796.02 M 1.00
3 "float multiple constant subtracts" 3.36 sec 476.19 M 1.67
4 "float constant multiply" 2.01 sec 796.02 M 1.00
5 "float multiple constant multiplies" 2.70 sec 592.59 M 1.34
6 "float multiple constant multiply2" 2.01 sec 796.02 M 1.00
7 "float constant divide" 11.45 sec 139.74 M 5.70
8 "float multiple constant divides" 22.92 sec 69.81 M 11.40
9 "float multiple constant divide2" 2.01 sec 796.02 M 1.00
10 "float multiple constant mixed" 2.02 sec 792.08 M 1.00
Total absolute time for float constant folding: 55.86 sec
test description absolute operations ratio with
number time per second test0
0 "double constant" 20.09 sec 796.42 M 1.00
1 "double add constants" 20.10 sec 796.02 M 1.00
2 "double subtract constants" 20.09 sec 796.42 M 1.00
3 "double multiply constants" 20.16 sec 793.65 M 1.00
4 "double divide constants" 20.09 sec 796.42 M 1.00
Total absolute time for double simple constant folding: 100.53 sec
test description absolute operations ratio with
number time per second test0
0 "double constant add" 2.04 sec 784.31 M 1.00
1 "double multiple constant adds" 3.52 sec 454.55 M 1.73
2 "double constant subtract" 2.05 sec 780.49 M 1.00
3 "double multiple constant subtracts" 3.52 sec 454.55 M 1.73
4 "double constant multiply" 2.01 sec 796.02 M 0.99
5 "double multiple constant multiplies" 2.88 sec 555.56 M 1.41
6 "double multiple constant multiply2" 2.04 sec 784.31 M 1.00
7 "double constant divide" 20.74 sec 77.15 M 10.17
8 "double multiple constant divides" 42.41 sec 37.73 M 20.79
9 "double multiple constant divide2" 2.04 sec 784.31 M 1.00
10 "double multiple constant mixed" 2.19 sec 730.59 M 1.07
Total absolute time for double constant folding: 85.44 sec
./simple_types_loop_invariant
test description absolute operations ratio with
number time per second test0
0 "int8_t variable add" 1.52 sec 1052.63 M 1.00
1 "int8_t variable add hoisted" 1.34 sec 1194.03 M 0.88
2 "int8_t multiple variable adds" 1.34 sec 1194.03 M 0.88
3 "int8_t variable subtract" 1.71 sec 935.67 M 1.12
4 "int8_t multiple variable subtracts" 4.02 sec 398.01 M 2.64
5 "int8_t variable multiply" 1.81 sec 883.98 M 1.19
6 "int8_t multiple variable multiplies" 1.62 sec 987.65 M 1.07
7 "int8_t multiple variable multiplies2" 1.35 sec 1185.19 M 0.89
8 "int8_t variable divide" 8.03 sec 199.25 M 5.28
9 "int8_t multiple variable divides" 32.29 sec 49.55 M 21.24
10 "int8_t multiple variable divides2" 1.68 sec 952.38 M 1.11
11 "int8_t multiple variable mixed" 1.65 sec 969.70 M 1.09
12 "int8_t variable and" 1.53 sec 1045.75 M 1.01
13 "int8_t multiple variable and" 1.34 sec 1194.03 M 0.88
14 "int8_t variable or" 1.52 sec 1052.63 M 1.00
15 "int8_t multiple variable or" 1.34 sec 1194.03 M 0.88
16 "int8_t variable xor" 1.51 sec 1059.60 M 0.99
17 "int8_t multiple variable xor" 1.34 sec 1194.03 M 0.88
Total absolute time for int8_t loop invariant: 66.94 sec
test description absolute operations ratio with
number time per second test0
0 "uint8_t variable add" 1.52 sec 1052.63 M 1.00
1 "uint8_t variable add hoisted" 1.34 sec 1194.03 M 0.88
2 "uint8_t multiple variable adds" 1.34 sec 1194.03 M 0.88
3 "uint8_t variable subtract" 1.68 sec 952.38 M 1.11
4 "uint8_t multiple variable subtracts" 4.02 sec 398.01 M 2.64
5 "uint8_t variable multiply" 1.80 sec 888.89 M 1.18
6 "uint8_t multiple variable multiplies" 1.63 sec 981.60 M 1.07
7 "uint8_t multiple variable multiplies2" 1.34 sec 1194.03 M 0.88
8 "uint8_t variable divide" 8.04 sec 199.00 M 5.29
9 "uint8_t multiple variable divides" 32.23 sec 49.64 M 21.20
10 "uint8_t multiple variable divides2" 1.83 sec 874.32 M 1.20
11 "uint8_t multiple variable mixed" 1.82 sec 879.12 M 1.20
12 "uint8_t variable and" 1.53 sec 1045.75 M 1.01
13 "uint8_t multiple variable and" 1.51 sec 1059.60 M 0.99
14 "uint8_t variable or" 1.52 sec 1052.63 M 1.00
15 "uint8_t multiple variable or" 1.51 sec 1059.60 M 0.99
16 "uint8_t variable xor" 1.52 sec 1052.63 M 1.00
17 "uint8_t multiple variable xor" 1.52 sec 1052.63 M 1.00
Total absolute time for uint8_t loop invariant: 67.70 sec
test description absolute operations ratio with
number time per second test0
0 "int16_t variable add" 1.51 sec 1059.60 M 1.00
1 "int16_t variable add hoisted" 1.35 sec 1185.19 M 0.89
2 "int16_t multiple variable adds" 1.34 sec 1194.03 M 0.89
3 "int16_t variable subtract" 1.68 sec 952.38 M 1.11
4 "int16_t multiple variable subtracts" 4.02 sec 398.01 M 2.66
5 "int16_t variable multiply" 1.81 sec 883.98 M 1.20
6 "int16_t multiple variable multiplies" 1.58 sec 1012.66 M 1.05
7 "int16_t multiple variable multiplies2" 1.34 sec 1194.03 M 0.89
8 "int16_t variable divide" 8.03 sec 199.25 M 5.32
9 "int16_t multiple variable divides" 32.22 sec 49.66 M 21.34
10 "int16_t multiple variable divides2" 1.82 sec 879.12 M 1.21
11 "int16_t multiple variable mixed" 1.81 sec 883.98 M 1.20
12 "int16_t variable and" 1.52 sec 1052.63 M 1.01
13 "int16_t multiple variable and" 1.34 sec 1194.03 M 0.89
14 "int16_t variable or" 1.53 sec 1045.75 M 1.01
15 "int16_t multiple variable or" 1.35 sec 1185.19 M 0.89
16 "int16_t variable xor" 1.52 sec 1052.63 M 1.01
17 "int16_t multiple variable xor" 1.36 sec 1176.47 M 0.90
Total absolute time for int16_t loop invariant: 67.13 sec
test description absolute operations ratio with
number time per second test0
0 "uint16_t variable add" 1.53 sec 1045.75 M 1.00
1 "uint16_t variable add hoisted" 1.35 sec 1185.19 M 0.88
2 "uint16_t multiple variable adds" 1.35 sec 1185.19 M 0.88
3 "uint16_t variable subtract" 1.68 sec 952.38 M 1.10
4 "uint16_t multiple variable subtracts" 4.01 sec 399.00 M 2.62
5 "uint16_t variable multiply" 1.80 sec 888.89 M 1.18
6 "uint16_t multiple variable multiplies" 1.63 sec 981.60 M 1.07
7 "uint16_t multiple variable multiplies2" 1.34 sec 1194.03 M 0.88
8 "uint16_t variable divide" 8.15 sec 196.32 M 5.33
9 "uint16_t multiple variable divides" 32.17 sec 49.74 M 21.03
10 "uint16_t multiple variable divides2" 1.66 sec 963.86 M 1.08
11 "uint16_t multiple variable mixed" 1.65 sec 969.70 M 1.08
12 "uint16_t variable and" 1.52 sec 1052.63 M 0.99
13 "uint16_t multiple variable and" 1.51 sec 1059.60 M 0.99
14 "uint16_t variable or" 1.53 sec 1045.75 M 1.00
15 "uint16_t multiple variable or" 1.50 sec 1066.67 M 0.98
16 "uint16_t variable xor" 1.53 sec 1045.75 M 1.00
17 "uint16_t multiple variable xor" 1.50 sec 1066.67 M 0.98
Total absolute time for uint16_t loop invariant: 67.41 sec
test description absolute operations ratio with
number time per second test0
0 "int32_t variable add" 1.67 sec 958.08 M 1.00
1 "int32_t variable add hoisted" 1.34 sec 1194.03 M 0.80
2 "int32_t multiple variable adds" 1.43 sec 1118.88 M 0.86
3 "int32_t variable subtract" 1.51 sec 1059.60 M 0.90
4 "int32_t multiple variable subtracts" 2.05 sec 780.49 M 1.23
5 "int32_t variable multiply" 1.93 sec 829.02 M 1.16
6 "int32_t multiple variable multiplies" 1.72 sec 930.23 M 1.03
7 "int32_t multiple variable multiplies2" 1.41 sec 1134.75 M 0.84
8 "int32_t variable divide" 8.06 sec 198.51 M 4.83
9 "int32_t multiple variable divides" 32.14 sec 49.78 M 19.25
10 "int32_t multiple variable divides2" 1.66 sec 963.86 M 0.99
11 "int32_t multiple variable mixed" 1.65 sec 969.70 M 0.99
12 "int32_t variable and" 1.41 sec 1134.75 M 0.84
13 "int32_t multiple variable and" 1.41 sec 1134.75 M 0.84
14 "int32_t variable or" 1.41 sec 1134.75 M 0.84
15 "int32_t multiple variable or" 1.43 sec 1118.88 M 0.86
16 "int32_t variable xor" 1.66 sec 963.86 M 0.99
17 "int32_t multiple variable xor" 1.43 sec 1118.88 M 0.86
Total absolute time for int32_t loop invariant: 65.32 sec
test description absolute operations ratio with
number time per second test0
0 "uint32_t variable add" 1.66 sec 963.86 M 1.00
1 "uint32_t variable add hoisted" 1.34 sec 1194.03 M 0.81
2 "uint32_t multiple variable adds" 1.43 sec 1118.88 M 0.86
3 "uint32_t variable subtract" 1.52 sec 1052.63 M 0.92
4 "uint32_t multiple variable subtracts" 2.03 sec 788.18 M 1.22
5 "uint32_t variable multiply" 1.87 sec 855.61 M 1.13
6 "uint32_t multiple variable multiplies" 1.71 sec 935.67 M 1.03
7 "uint32_t multiple variable multiplies2" 1.43 sec 1118.88 M 0.86
8 "uint32_t variable divide" 8.04 sec 199.00 M 4.84
9 "uint32_t multiple variable divides" 32.21 sec 49.67 M 19.40
10 "uint32_t multiple variable divides2" 1.67 sec 958.08 M 1.01
11 "uint32_t multiple variable mixed" 1.65 sec 969.70 M 0.99
12 "uint32_t variable and" 1.66 sec 963.86 M 1.00
13 "uint32_t multiple variable and" 1.44 sec 1111.11 M 0.87
14 "uint32_t variable or" 1.65 sec 969.70 M 0.99
15 "uint32_t multiple variable or" 1.43 sec 1118.88 M 0.86
16 "uint32_t variable xor" 1.66 sec 963.86 M 1.00
17 "uint32_t multiple variable xor" 1.43 sec 1118.88 M 0.86
Total absolute time for uint32_t loop invariant: 65.83 sec
test description absolute operations ratio with
number time per second test0
0 "int64_t variable add" 1.69 sec 946.75 M 1.00
1 "int64_t variable add hoisted" 1.34 sec 1194.03 M 0.79
2 "int64_t multiple variable adds" 1.50 sec 1066.67 M 0.89
3 "int64_t variable subtract" 1.57 sec 1019.11 M 0.93
4 "int64_t multiple variable subtracts" 2.04 sec 784.31 M 1.21
5 "int64_t variable multiply" 1.81 sec 883.98 M 1.07
6 "int64_t multiple variable multiplies" 1.59 sec 1006.29 M 0.94
7 "int64_t multiple variable multiplies2" 1.50 sec 1066.67 M 0.89
8 "int64_t variable divide" 22.18 sec 72.14 M 13.12
9 "int64_t multiple variable divides" 100.84 sec 15.87 M 59.67
10 "int64_t multiple variable divides2" 1.69 sec 946.75 M 1.00
11 "int64_t multiple variable mixed" 1.69 sec 946.75 M 1.00
12 "int64_t variable and" 1.70 sec 941.18 M 1.01
13 "int64_t multiple variable and" 1.50 sec 1066.67 M 0.89
14 "int64_t variable or" 1.69 sec 946.75 M 1.00
15 "int64_t multiple variable or" 1.50 sec 1066.67 M 0.89
16 "int64_t variable xor" 1.70 sec 941.18 M 1.01
17 "int64_t multiple variable xor" 1.50 sec 1066.67 M 0.89
Total absolute time for int64_t loop invariant: 149.03 sec
test description absolute operations ratio with
number time per second test0
0 "uint64_t variable add" 1.69 sec 946.75 M 1.00
1 "uint64_t variable add hoisted" 1.34 sec 1194.03 M 0.79
2 "uint64_t multiple variable adds" 1.50 sec 1066.67 M 0.89
3 "uint64_t variable subtract" 1.57 sec 1019.11 M 0.93
4 "uint64_t multiple variable subtracts" 2.05 sec 780.49 M 1.21
5 "uint64_t variable multiply" 1.81 sec 883.98 M 1.07
6 "uint64_t multiple variable multiplies" 1.59 sec 1006.29 M 0.94
7 "uint64_t multiple variable multiplies2" 1.49 sec 1073.83 M 0.88
8 "uint64_t variable divide" 13.08 sec 122.32 M 7.74
9 "uint64_t multiple variable divides" 64.18 sec 24.93 M 37.98
10 "uint64_t multiple variable divides2" 1.69 sec 946.75 M 1.00
11 "uint64_t multiple variable mixed" 1.69 sec 946.75 M 1.00
12 "uint64_t variable and" 1.70 sec 941.18 M 1.01
13 "uint64_t multiple variable and" 1.50 sec 1066.67 M 0.89
14 "uint64_t variable or" 1.69 sec 946.75 M 1.00
15 "uint64_t multiple variable or" 1.50 sec 1066.67 M 0.89
16 "uint64_t variable xor" 1.69 sec 946.75 M 1.00
17 "uint64_t multiple variable xor" 1.50 sec 1066.67 M 0.89
Total absolute time for uint64_t loop invariant: 103.26 sec
test description absolute operations ratio with
number time per second test0
0 "float variable add" 2.01 sec 796.02 M 1.00
1 "float variable add hoisted" 2.01 sec 796.02 M 1.00
2 "float multiple variable adds" 3.36 sec 476.19 M 1.67
3 "float variable subtract" 2.01 sec 796.02 M 1.00
4 "float multiple variable subtracts" 3.36 sec 476.19 M 1.67
5 "float variable multiply" 2.01 sec 796.02 M 1.00
6 "float multiple variable multiplies" 3.36 sec 476.19 M 1.67
7 "float multiple variable multiplies2" 2.01 sec 796.02 M 1.00
8 "float variable divide" 3.36 sec 476.19 M 1.67
9 "float multiple variable divides" 29.68 sec 53.91 M 14.77
10 "float multiple variable divides2" 2.01 sec 796.02 M 1.00
11 "float multiple variable mixed" 2.02 sec 792.08 M 1.00
Total absolute time for float loop invariant: 57.20 sec
test description absolute operations ratio with
number time per second test0
0 "double variable add" 2.01 sec 796.02 M 1.00
1 "double variable add hoisted" 2.01 sec 796.02 M 1.00
2 "double multiple variable adds" 3.53 sec 453.26 M 1.76
3 "double variable subtract" 2.04 sec 784.31 M 1.01
4 "double multiple variable subtracts" 3.52 sec 454.55 M 1.75
5 "double variable multiply" 2.02 sec 792.08 M 1.00
6 "double multiple variable multiplies" 3.64 sec 439.56 M 1.81
7 "double multiple variable multiplies2" 2.02 sec 792.08 M 1.00
8 "double variable divide" 3.35 sec 477.61 M 1.67
9 "double multiple variable divides" 49.13 sec 32.57 M 24.44
10 "double multiple variable divides2" 2.02 sec 792.08 M 1.00
11 "double multiple variable mixed" 2.03 sec 788.18 M 1.01
Total absolute time for double loop invariant: 77.32 sec
./loop_unroll
test description absolute operations ratio with
number time per second test0
0 "int32_t for loop unroll 1" 3.14 sec 764.33 M 1.00
1 "int32_t for loop unroll 2" 2.15 sec 1116.28 M 0.68
2 "int32_t for loop unroll 3" 1.82 sec 1318.68 M 0.58
3 "int32_t for loop unroll 4" 1.73 sec 1387.28 M 0.55
4 "int32_t for loop unroll 5" 1.61 sec 1490.68 M 0.51
5 "int32_t for loop unroll 6" 1.76 sec 1363.64 M 0.56
6 "int32_t for loop unroll 7" 1.64 sec 1463.41 M 0.52
7 "int32_t for loop unroll 8" 1.63 sec 1472.39 M 0.52
8 "int32_t for loop unroll 9" 1.53 sec 1568.63 M 0.49
9 "int32_t for loop unroll 10" 1.45 sec 1655.17 M 0.46
10 "int32_t for loop unroll 11" 2.31 sec 1038.96 M 0.74
11 "int32_t for loop unroll 12" 2.27 sec 1057.27 M 0.72
12 "int32_t for loop unroll 13" 2.14 sec 1121.50 M 0.68
13 "int32_t for loop unroll 14" 2.07 sec 1159.42 M 0.66
14 "int32_t for loop unroll 15" 1.96 sec 1224.49 M 0.62
15 "int32_t for loop unroll 16" 1.96 sec 1224.49 M 0.62
16 "int32_t for loop unroll 17" 1.86 sec 1290.32 M 0.59
17 "int32_t for loop unroll 18" 2.34 sec 1025.64 M 0.75
18 "int32_t for loop unroll 19" 2.44 sec 983.61 M 0.78
19 "int32_t for loop unroll 20" 2.38 sec 1008.40 M 0.76
20 "int32_t for loop unroll 21" 2.28 sec 1052.63 M 0.73
21 "int32_t for loop unroll 22" 2.18 sec 1100.92 M 0.69
22 "int32_t for loop unroll 23" 2.25 sec 1066.67 M 0.72
23 "int32_t for loop unroll 24" 2.13 sec 1126.76 M 0.68
24 "int32_t for loop unroll 25" 2.12 sec 1132.08 M 0.68
25 "int32_t for loop unroll 26" 2.03 sec 1182.27 M 0.65
26 "int32_t for loop unroll 27" 2.08 sec 1153.85 M 0.66
27 "int32_t for loop unroll 28" 1.97 sec 1218.27 M 0.63
28 "int32_t for loop unroll 29" 2.44 sec 983.61 M 0.78
29 "int32_t for loop unroll 30" 2.60 sec 923.08 M 0.83
30 "int32_t for loop unroll 31" 1.96 sec 1224.49 M 0.62
31 "int32_t for loop unroll 32" 1.92 sec 1250.00 M 0.61
Total absolute time for int32_t for loop unrolling: 66.15 sec
test description absolute operations ratio with
number time per second test0
0 "int32_t while loop unroll 1" 3.14 sec 764.33 M 1.00
1 "int32_t while loop unroll 2" 2.16 sec 1111.11 M 0.69
2 "int32_t while loop unroll 3" 1.83 sec 1311.48 M 0.58
3 "int32_t while loop unroll 4" 1.72 sec 1395.35 M 0.55
4 "int32_t while loop unroll 5" 1.62 sec 1481.48 M 0.52
5 "int32_t while loop unroll 6" 1.76 sec 1363.64 M 0.56
6 "int32_t while loop unroll 7" 1.75 sec 1371.43 M 0.56
7 "int32_t while loop unroll 8" 1.64 sec 1463.41 M 0.52
8 "int32_t while loop unroll 9" 1.53 sec 1568.63 M 0.49
9 "int32_t while loop unroll 10" 2.44 sec 983.61 M 0.78
10 "int32_t while loop unroll 11" 2.31 sec 1038.96 M 0.74
11 "int32_t while loop unroll 12" 2.27 sec 1057.27 M 0.72
12 "int32_t while loop unroll 13" 2.14 sec 1121.50 M 0.68
13 "int32_t while loop unroll 14" 2.07 sec 1159.42 M 0.66
14 "int32_t while loop unroll 15" 1.96 sec 1224.49 M 0.62
15 "int32_t while loop unroll 16" 1.45 sec 1655.17 M 0.46
16 "int32_t while loop unroll 17" 1.87 sec 1283.42 M 0.60
17 "int32_t while loop unroll 18" 2.36 sec 1016.95 M 0.75
18 "int32_t while loop unroll 19" 2.46 sec 975.61 M 0.78
19 "int32_t while loop unroll 20" 2.41 sec 995.85 M 0.77
20 "int32_t while loop unroll 21" 2.28 sec 1052.63 M 0.73
21 "int32_t while loop unroll 22" 2.18 sec 1100.92 M 0.69
22 "int32_t while loop unroll 23" 2.25 sec 1066.67 M 0.72
23 "int32_t while loop unroll 24" 2.13 sec 1126.76 M 0.68
24 "int32_t while loop unroll 25" 2.12 sec 1132.08 M 0.68
25 "int32_t while loop unroll 26" 2.03 sec 1182.27 M 0.65
26 "int32_t while loop unroll 27" 2.08 sec 1153.85 M 0.66
27 "int32_t while loop unroll 28" 1.96 sec 1224.49 M 0.62
28 "int32_t while loop unroll 29" 2.45 sec 979.59 M 0.78
29 "int32_t while loop unroll 30" 2.59 sec 926.64 M 0.82
30 "int32_t while loop unroll 31" 2.48 sec 967.74 M 0.79
31 "int32_t while loop unroll 32" 2.49 sec 963.86 M 0.79
Total absolute time for int32_t while loop unrolling: 67.93 sec
test description absolute operations ratio with
number time per second test0
0 "int32_t do loop unroll 1" 3.15 sec 761.90 M 1.00
1 "int32_t do loop unroll 2" 2.16 sec 1111.11 M 0.69
2 "int32_t do loop unroll 3" 1.83 sec 1311.48 M 0.58
3 "int32_t do loop unroll 4" 1.73 sec 1387.28 M 0.55
4 "int32_t do loop unroll 5" 1.62 sec 1481.48 M 0.51
5 "int32_t do loop unroll 6" 1.74 sec 1379.31 M 0.55
6 "int32_t do loop unroll 7" 1.67 sec 1437.13 M 0.53
7 "int32_t do loop unroll 8" 1.70 sec 1411.76 M 0.54
8 "int32_t do loop unroll 9" 1.56 sec 1538.46 M 0.50
9 "int32_t do loop unroll 10" 2.47 sec 971.66 M 0.78
10 "int32_t do loop unroll 11" 2.34 sec 1025.64 M 0.74
11 "int32_t do loop unroll 12" 2.21 sec 1085.97 M 0.70
12 "int32_t do loop unroll 13" 2.14 sec 1121.50 M 0.68
13 "int32_t do loop unroll 14" 2.09 sec 1148.33 M 0.66
14 "int32_t do loop unroll 15" 2.02 sec 1188.12 M 0.64
15 "int32_t do loop unroll 16" 1.45 sec 1655.17 M 0.46
16 "int32_t do loop unroll 17" 1.92 sec 1250.00 M 0.61
17 "int32_t do loop unroll 18" 1.41 sec 1702.13 M 0.45
18 "int32_t do loop unroll 19" 2.41 sec 995.85 M 0.77
19 "int32_t do loop unroll 20" 2.41 sec 995.85 M 0.77
20 "int32_t do loop unroll 21" 2.38 sec 1008.40 M 0.76
21 "int32_t do loop unroll 22" 2.29 sec 1048.03 M 0.73
22 "int32_t do loop unroll 23" 2.25 sec 1066.67 M 0.71
23 "int32_t do loop unroll 24" 2.26 sec 1061.95 M 0.72
24 "int32_t do loop unroll 25" 2.26 sec 1061.95 M 0.72
25 "int32_t do loop unroll 26" 2.09 sec 1148.33 M 0.66
26 "int32_t do loop unroll 27" 2.14 sec 1121.50 M 0.68
27 "int32_t do loop unroll 28" 2.41 sec 995.85 M 0.77
28 "int32_t do loop unroll 29" 2.36 sec 1016.95 M 0.75
29 "int32_t do loop unroll 30" 1.96 sec 1224.49 M 0.62
30 "int32_t do loop unroll 31" 2.54 sec 944.88 M 0.81
31 "int32_t do loop unroll 32" 2.34 sec 1025.64 M 0.74
Total absolute time for int32_t do loop unrolling: 67.31 sec
test description absolute operations ratio with
number time per second test0
0 "int32_t goto loop unroll 1" 3.14 sec 764.33 M 1.00
1 "int32_t goto loop unroll 2" 2.15 sec 1116.28 M 0.68
2 "int32_t goto loop unroll 3" 1.83 sec 1311.48 M 0.58
3 "int32_t goto loop unroll 4" 1.73 sec 1387.28 M 0.55
4 "int32_t goto loop unroll 5" 1.63 sec 1472.39 M 0.52
5 "int32_t goto loop unroll 6" 1.75 sec 1371.43 M 0.56
6 "int32_t goto loop unroll 7" 1.67 sec 1437.13 M 0.53
7 "int32_t goto loop unroll 8" 2.69 sec 892.19 M 0.86
8 "int32_t goto loop unroll 9" 1.57 sec 1528.66 M 0.50
9 "int32_t goto loop unroll 10" 2.47 sec 971.66 M 0.79
10 "int32_t goto loop unroll 11" 2.34 sec 1025.64 M 0.75
11 "int32_t goto loop unroll 12" 2.21 sec 1085.97 M 0.70
12 "int32_t goto loop unroll 13" 2.14 sec 1121.50 M 0.68
13 "int32_t goto loop unroll 14" 2.08 sec 1153.85 M 0.66
14 "int32_t goto loop unroll 15" 2.04 sec 1176.47 M 0.65
15 "int32_t goto loop unroll 16" 1.45 sec 1655.17 M 0.46
16 "int32_t goto loop unroll 17" 1.92 sec 1250.00 M 0.61
17 "int32_t goto loop unroll 18" 1.40 sec 1714.29 M 0.45
18 "int32_t goto loop unroll 19" 2.39 sec 1004.18 M 0.76
19 "int32_t goto loop unroll 20" 2.39 sec 1004.18 M 0.76
20 "int32_t goto loop unroll 21" 2.37 sec 1012.66 M 0.75
21 "int32_t goto loop unroll 22" 2.27 sec 1057.27 M 0.72
22 "int32_t goto loop unroll 23" 2.27 sec 1057.27 M 0.72
23 "int32_t goto loop unroll 24" 2.96 sec 810.81 M 0.94
24 "int32_t goto loop unroll 25" 2.28 sec 1052.63 M 0.73
25 "int32_t goto loop unroll 26" 2.81 sec 854.09 M 0.89
26 "int32_t goto loop unroll 27" 2.14 sec 1121.50 M 0.68
27 "int32_t goto loop unroll 28" 1.94 sec 1237.11 M 0.62
28 "int32_t goto loop unroll 29" 2.36 sec 1016.95 M 0.75
29 "int32_t goto loop unroll 30" 1.97 sec 1218.27 M 0.63
30 "int32_t goto loop unroll 31" 2.54 sec 944.88 M 0.81
31 "int32_t goto loop unroll 32" 2.36 sec 1016.95 M 0.75
Total absolute time for int32_t goto loop unrolling: 69.26 sec
test description absolute operations ratio with
number time per second test0
0 "double for loop unroll 1" 2.12 sec 283.02 M 1.00
1 "double for loop unroll 2" 2.10 sec 285.71 M 0.99
2 "double for loop unroll 3" 2.07 sec 289.86 M 0.98
3 "double for loop unroll 4" 2.08 sec 288.46 M 0.98
4 "double for loop unroll 5" 2.06 sec 291.26 M 0.97
5 "double for loop unroll 6" 2.04 sec 294.12 M 0.96
6 "double for loop unroll 7" 2.05 sec 292.68 M 0.97
7 "double for loop unroll 8" 2.05 sec 292.68 M 0.97
8 "double for loop unroll 9" 2.04 sec 294.12 M 0.96
9 "double for loop unroll 10" 2.03 sec 295.57 M 0.96
10 "double for loop unroll 11" 2.03 sec 295.57 M 0.96
11 "double for loop unroll 12" 2.04 sec 294.12 M 0.96
12 "double for loop unroll 13" 2.03 sec 295.57 M 0.96
13 "double for loop unroll 14" 2.18 sec 275.23 M 1.03
14 "double for loop unroll 15" 2.32 sec 258.62 M 1.09
15 "double for loop unroll 16" 2.29 sec 262.01 M 1.08
16 "double for loop unroll 17" 2.18 sec 275.23 M 1.03
17 "double for loop unroll 18" 2.32 sec 258.62 M 1.09
18 "double for loop unroll 19" 2.30 sec 260.87 M 1.08
19 "double for loop unroll 20" 2.27 sec 264.32 M 1.07
20 "double for loop unroll 21" 2.27 sec 264.32 M 1.07
21 "double for loop unroll 22" 2.39 sec 251.05 M 1.13
22 "double for loop unroll 23" 2.24 sec 267.86 M 1.06
23 "double for loop unroll 24" 2.24 sec 267.86 M 1.06
24 "double for loop unroll 25" 2.38 sec 252.10 M 1.12
25 "double for loop unroll 26" 2.21 sec 271.49 M 1.04
26 "double for loop unroll 27" 2.36 sec 254.24 M 1.11
27 "double for loop unroll 28" 2.22 sec 270.27 M 1.05
28 "double for loop unroll 29" 2.35 sec 255.32 M 1.11
29 "double for loop unroll 30" 2.38 sec 252.10 M 1.12
30 "double for loop unroll 31" 2.32 sec 258.62 M 1.09
31 "double for loop unroll 32" 2.32 sec 258.62 M 1.09
Total absolute time for double for loop unrolling: 70.28 sec
test description absolute operations ratio with
number time per second test0
0 "double while loop unroll 1" 2.12 sec 283.02 M 1.00
1 "double while loop unroll 2" 2.10 sec 285.71 M 0.99
2 "double while loop unroll 3" 2.07 sec 289.86 M 0.98
3 "double while loop unroll 4" 2.08 sec 288.46 M 0.98
4 "double while loop unroll 5" 2.06 sec 291.26 M 0.97
5 "double while loop unroll 6" 2.04 sec 294.12 M 0.96
6 "double while loop unroll 7" 2.05 sec 292.68 M 0.97
7 "double while loop unroll 8" 2.05 sec 292.68 M 0.97
8 "double while loop unroll 9" 2.04 sec 294.12 M 0.96
9 "double while loop unroll 10" 2.04 sec 294.12 M 0.96
10 "double while loop unroll 11" 2.24 sec 267.86 M 1.06
11 "double while loop unroll 12" 2.35 sec 255.32 M 1.11
12 "double while loop unroll 13" 2.31 sec 259.74 M 1.09
13 "double while loop unroll 14" 2.27 sec 264.32 M 1.07
14 "double while loop unroll 15" 2.32 sec 258.62 M 1.09
15 "double while loop unroll 16" 2.18 sec 275.23 M 1.03
16 "double while loop unroll 17" 2.18 sec 275.23 M 1.03
17 "double while loop unroll 18" 2.16 sec 277.78 M 1.02
18 "double while loop unroll 19" 2.30 sec 260.87 M 1.08
19 "double while loop unroll 20" 2.27 sec 264.32 M 1.07
20 "double while loop unroll 21" 2.27 sec 264.32 M 1.07
21 "double while loop unroll 22" 2.24 sec 267.86 M 1.06
22 "double while loop unroll 23" 2.24 sec 267.86 M 1.06
23 "double while loop unroll 24" 2.24 sec 267.86 M 1.06
24 "double while loop unroll 25" 2.21 sec 271.49 M 1.04
25 "double while loop unroll 26" 2.22 sec 270.27 M 1.05
26 "double while loop unroll 27" 2.35 sec 255.32 M 1.11
27 "double while loop unroll 28" 2.20 sec 272.73 M 1.04
28 "double while loop unroll 29" 2.34 sec 256.41 M 1.10
29 "double while loop unroll 30" 2.36 sec 254.24 M 1.11
30 "double while loop unroll 31" 2.35 sec 255.32 M 1.11
31 "double while loop unroll 32" 2.33 sec 257.51 M 1.10
Total absolute time for double while loop unrolling: 70.58 sec
test description absolute operations ratio with
number time per second test0
0 "double do loop unroll 1" 2.14 sec 280.37 M 1.00
1 "double do loop unroll 2" 2.11 sec 284.36 M 0.99
2 "double do loop unroll 3" 2.09 sec 287.08 M 0.98
3 "double do loop unroll 4" 2.08 sec 288.46 M 0.97
4 "double do loop unroll 5" 2.07 sec 289.86 M 0.97
5 "double do loop unroll 6" 2.03 sec 295.57 M 0.95
6 "double do loop unroll 7" 2.05 sec 292.68 M 0.96
7 "double do loop unroll 8" 2.05 sec 292.68 M 0.96
8 "double do loop unroll 9" 2.03 sec 295.57 M 0.95
9 "double do loop unroll 10" 2.04 sec 294.12 M 0.95
10 "double do loop unroll 11" 2.03 sec 295.57 M 0.95
11 "double do loop unroll 12" 2.04 sec 294.12 M 0.95
12 "double do loop unroll 13" 2.22 sec 270.27 M 1.04
13 "double do loop unroll 14" 2.02 sec 297.03 M 0.94
14 "double do loop unroll 15" 2.32 sec 258.62 M 1.08
15 "double do loop unroll 16" 2.18 sec 275.23 M 1.02
16 "double do loop unroll 17" 2.18 sec 275.23 M 1.02
17 "double do loop unroll 18" 2.02 sec 297.03 M 0.94
18 "double do loop unroll 19" 2.31 sec 259.74 M 1.08
19 "double do loop unroll 20" 2.27 sec 264.32 M 1.06
20 "double do loop unroll 21" 2.26 sec 265.49 M 1.06
21 "double do loop unroll 22" 2.27 sec 264.32 M 1.06
22 "double do loop unroll 23" 2.24 sec 267.86 M 1.05
23 "double do loop unroll 24" 2.24 sec 267.86 M 1.05
24 "double do loop unroll 25" 2.22 sec 270.27 M 1.04
25 "double do loop unroll 26" 2.21 sec 271.49 M 1.03
26 "double do loop unroll 27" 2.22 sec 270.27 M 1.04
27 "double do loop unroll 28" 2.21 sec 271.49 M 1.03
28 "double do loop unroll 29" 2.33 sec 257.51 M 1.09
29 "double do loop unroll 30" 2.33 sec 257.51 M 1.09
30 "double do loop unroll 31" 2.18 sec 275.23 M 1.02
31 "double do loop unroll 32" 2.33 sec 257.51 M 1.09
Total absolute time for double do loop unrolling: 69.32 sec
test description absolute operations ratio with
number time per second test0
0 "double goto loop unroll 1" 2.13 sec 281.69 M 1.00
1 "double goto loop unroll 2" 2.09 sec 287.08 M 0.98
2 "double goto loop unroll 3" 2.07 sec 289.86 M 0.97
3 "double goto loop unroll 4" 2.09 sec 287.08 M 0.98
4 "double goto loop unroll 5" 2.08 sec 288.46 M 0.98
5 "double goto loop unroll 6" 2.05 sec 292.68 M 0.96
6 "double goto loop unroll 7" 2.07 sec 289.86 M 0.97
7 "double goto loop unroll 8" 2.07 sec 289.86 M 0.97
8 "double goto loop unroll 9" 2.03 sec 295.57 M 0.95
9 "double goto loop unroll 10" 2.04 sec 294.12 M 0.96
10 "double goto loop unroll 11" 2.24 sec 267.86 M 1.05
11 "double goto loop unroll 12" 2.04 sec 294.12 M 0.96
12 "double goto loop unroll 13" 2.22 sec 270.27 M 1.04
13 "double goto loop unroll 14" 2.02 sec 297.03 M 0.95
14 "double goto loop unroll 15" 2.32 sec 258.62 M 1.09
15 "double goto loop unroll 16" 2.30 sec 260.87 M 1.08
16 "double goto loop unroll 17" 2.18 sec 275.23 M 1.02
17 "double goto loop unroll 18" 2.15 sec 279.07 M 1.01
18 "double goto loop unroll 19" 2.31 sec 259.74 M 1.08
19 "double goto loop unroll 20" 2.27 sec 264.32 M 1.07
20 "double goto loop unroll 21" 2.27 sec 264.32 M 1.07
21 "double goto loop unroll 22" 2.26 sec 265.49 M 1.06
22 "double goto loop unroll 23" 2.24 sec 267.86 M 1.05
23 "double goto loop unroll 24" 2.24 sec 267.86 M 1.05
24 "double goto loop unroll 25" 2.22 sec 270.27 M 1.04
25 "double goto loop unroll 26" 2.22 sec 270.27 M 1.04
26 "double goto loop unroll 27" 2.35 sec 255.32 M 1.10
27 "double goto loop unroll 28" 2.35 sec 255.32 M 1.10
28 "double goto loop unroll 29" 2.33 sec 257.51 M 1.09
29 "double goto loop unroll 30" 2.20 sec 272.73 M 1.03
30 "double goto loop unroll 31" 2.35 sec 255.32 M 1.10
31 "double goto loop unroll 32" 2.33 sec 257.51 M 1.09
Total absolute time for double goto loop unrolling: 70.13 sec
Thu Jul 28 12:33:16 PDT 2011
##END Version 1.0
[-- Attachment #4: report46.txt --]
[-- Type: text/plain, Size: 66238 bytes --]
##STARTING Version 1.0
Thu Jul 28 12:36:13 PDT 2011
##CFlags:
##CPPFlags: -I. -O3 -static-libstdc++ -static-libgcc
##Start machine report version 1.0
##Compiler
GCC version 4.6.1
Compiled for LP64
##Target CPU
Compiled for x86 64bit
##Physical CPU
Little Endian
##Machine
##Operating System
##End machine report
./stepanov_abstraction
test description absolute operations ratio with
number time per second test0
0 "double pointer" 5.03 sec 795.23 M 1.00
1 "double pointer_class" 5.03 sec 795.23 M 1.00
2 "DoubleValueWrapper pointer" 5.03 sec 795.23 M 1.00
3 "DoubleValueWrapper pointer_class" 5.03 sec 795.23 M 1.00
4 "DoubleValueWrapper10 pointer" 5.03 sec 795.23 M 1.00
5 "DoubleValueWrapper10 pointer_class" 5.03 sec 795.23 M 1.00
Total absolute time for Abstraction Accumulate: 30.18 sec
Abstraction Accumulate Penalty: 1.00
test description absolute operations ratio with
number time per second test0
0 "insertion_sort double pointer" 0.86 sec 2.33 M 1.00
1 "insertion_sort double pointer_class" 1.28 sec 1.56 M 1.49
2 "insertion_sort DoubleValueWrapper pointer" 1.27 sec 1.57 M 1.48
3 "insertion_sort DoubleValueWrapper pointer_class" 1.28 sec 1.56 M 1.49
4 "insertion_sort DoubleValueWrapper10 pointer" 1.28 sec 1.56 M 1.49
5 "insertion_sort DoubleValueWrapper10 pointer_class" 1.28 sec 1.56 M 1.49
Total absolute time for Abstraction Insertion Sort: 7.25 sec
Abstraction Insertion Sort Penalty: 1.49
test description absolute operations ratio with
number time per second test0
0 "quicksort double pointer" 1.31 sec 12.21 M 1.00
1 "quicksort double pointer_class" 1.39 sec 11.51 M 1.06
2 "quicksort DoubleValueWrapper pointer" 1.51 sec 10.60 M 1.15
3 "quicksort DoubleValueWrapper pointer_class" 1.52 sec 10.53 M 1.16
4 "quicksort DoubleValueWrapper10 pointer" 1.52 sec 10.53 M 1.16
5 "quicksort DoubleValueWrapper10 pointer_class" 1.53 sec 10.46 M 1.17
Total absolute time for Abstraction Quicksort: 8.78 sec
Abstraction Quicksort Penalty: 1.14
test description absolute operations ratio with
number time per second test0
0 "heap_sort double pointer" 1.37 sec 11.68 M 1.00
1 "heap_sort double pointer_class" 1.37 sec 11.68 M 1.00
2 "heap_sort DoubleValueWrapper pointer" 1.17 sec 13.68 M 0.85
3 "heap_sort DoubleValueWrapper pointer_class" 1.27 sec 12.60 M 0.93
4 "heap_sort DoubleValueWrapper10 pointer" 1.20 sec 13.33 M 0.88
5 "heap_sort DoubleValueWrapper10 pointer_class" 1.26 sec 12.70 M 0.92
Total absolute time for Abstraction Heap Sort: 7.64 sec
Abstraction Heap Sort Penalty: 0.91
./stepanov_vector
test description absolute operations ratio with
number time per second test0
0 "double pointer verify2" 3.77 sec 795.76 M 1.00
1 "double vector iterator" 3.77 sec 795.76 M 1.00
2 "double pointer reverse" 3.77 sec 795.76 M 1.00
3 "double vector reverse_iterator" 3.78 sec 793.65 M 1.00
4 "double vector iterator reverse" 3.77 sec 795.76 M 1.00
5 "double pointer reverse reverse" 3.78 sec 793.65 M 1.00
6 "double vector reverse_iterator reverse" 3.77 sec 795.76 M 1.00
7 "double vector iterator reverse reverse" 3.78 sec 793.65 M 1.00
Total absolute time for Vector accumulate: 30.19 sec
Vector accumulate Penalty: 1.00
test description absolute operations ratio with
number time per second test0
0 "insertion_sort double pointer verify2" 1.30 sec 2.31 M 1.00
1 "insertion_sort double vector iterator" 1.90 sec 1.58 M 1.46
2 "insertion_sort double pointer reverse" 1.95 sec 1.54 M 1.50
3 "insertion_sort double vector reverse_iterator" 1.93 sec 1.55 M 1.48
4 "insertion_sort double vector iterator reverse" 1.92 sec 1.56 M 1.48
5 "insertion_sort double pointer reverse reverse" 1.91 sec 1.57 M 1.47
6 "insertion_sort double vector reverse_iterator reverse" 1.91 sec 1.57 M 1.47
7 "insertion_sort double vector iterator reverse reverse" 1.91 sec 1.57 M 1.47
Total absolute time for Vector Insertion Sort: 14.73 sec
Vector Insertion Sort Penalty: 1.48
test description absolute operations ratio with
number time per second test0
0 "quicksort double pointer verify2" 1.96 sec 12.24 M 1.00
1 "quicksort double vector iterator" 2.07 sec 11.59 M 1.06
2 "quicksort double pointer reverse" 2.24 sec 10.71 M 1.14
3 "quicksort double vector reverse_iterator" 2.23 sec 10.76 M 1.14
4 "quicksort double vector iterator reverse" 2.23 sec 10.76 M 1.14
5 "quicksort double pointer reverse reverse" 2.17 sec 11.06 M 1.11
6 "quicksort double vector reverse_iterator reverse" 2.14 sec 11.21 M 1.09
7 "quicksort double vector iterator reverse reverse" 2.14 sec 11.21 M 1.09
Total absolute time for Vector Quicksort: 17.18 sec
Vector Quicksort Penalty: 1.11
test description absolute operations ratio with
number time per second test0
0 "heap_sort double pointer verify2" 2.09 sec 11.48 M 1.00
1 "heap_sort double vector iterator" 2.09 sec 11.48 M 1.00
2 "heap_sort double pointer reverse" 2.47 sec 9.72 M 1.18
3 "heap_sort double vector reverse_iterator" 2.45 sec 9.80 M 1.17
4 "heap_sort double vector iterator reverse" 2.44 sec 9.84 M 1.17
5 "heap_sort double pointer reverse reverse" 2.10 sec 11.43 M 1.00
6 "heap_sort double vector reverse_iterator reverse" 2.12 sec 11.32 M 1.01
7 "heap_sort double vector iterator reverse reverse" 2.12 sec 11.32 M 1.01
Total absolute time for Vector Heap Sort: 17.88 sec
Vector Heap Sort Penalty: 1.08
./functionobjects
test description absolute operations ratio with
number time per second test0
0 "qsort array with function pointer" 4.41 sec 4.54 M 1.00
1 "quicksort function array with function pointer" 2.59 sec 7.72 M 0.59
2 "quicksort template array with function pointer" 2.62 sec 7.63 M 0.59
3 "quicksort template array with template function pointer" 2.57 sec 7.78 M 0.58
4 "sort array with function pointer" 1.40 sec 14.29 M 0.32
5 "quicksort template array with user-supplied functor" 1.94 sec 10.31 M 0.44
6 "sort array with user-supplied functor" 1.40 sec 14.29 M 0.32
7 "quicksort template array with user-supplied inline functor" 2.02 sec 9.90 M 0.46
8 "sort array with user-supplied inline functor" 1.44 sec 13.89 M 0.33
9 "quicksort template array with standard functor" 2.01 sec 9.95 M 0.46
10 "sort array with standard functor" 1.45 sec 13.79 M 0.33
11 "quicksort template array with native < operator" 1.94 sec 10.31 M 0.44
12 "sort array with native < operator" 1.43 sec 13.99 M 0.32
Total absolute time for Function Objects: 27.22 sec
./simple_types_constant_folding
test description absolute operations ratio with
number time per second test0
0 "int8_t constant" 0.00 sec inf M nan
1 "int8_t add constants" 0.00 sec inf M nan
2 "int8_t subtract constants" 0.00 sec inf M nan
3 "int8_t multiply constants" 0.00 sec inf M nan
4 "int8_t divide constants" 0.00 sec inf M nan
5 "int8_t mod constants" 0.00 sec inf M nan
6 "int8_t equal constants" 0.00 sec inf M nan
7 "int8_t notequal constants" 0.00 sec inf M nan
8 "int8_t greater than constants" 0.00 sec inf M nan
9 "int8_t less than constants" 0.00 sec inf M nan
10 "int8_t greater than equal constants" 0.00 sec inf M nan
11 "int8_t less than equal constants" 0.00 sec inf M nan
12 "int8_t and constants" 0.00 sec inf M nan
13 "int8_t or constants" 0.00 sec inf M nan
14 "int8_t xor constants" 0.00 sec inf M nan
Total absolute time for int8_t simple constant folding: 0.00 sec
test description absolute operations ratio with
number time per second test0
0 "int8_t constant add" 2.84 sec 563.38 M 1.00
1 "int8_t multiple constant adds" 2.84 sec 563.38 M 1.00
2 "int8_t constant subtract" 2.85 sec 561.40 M 1.00
3 "int8_t multiple constant subtracts" 2.84 sec 563.38 M 1.00
4 "int8_t constant multiply" 3.35 sec 477.61 M 1.18
5 "int8_t multiple constant multiplies" 3.35 sec 477.61 M 1.18
6 "int8_t multiple constant multiply2" 2.84 sec 563.38 M 1.00
7 "int8_t constant divide" 3.85 sec 415.58 M 1.36
8 "int8_t multiple constant divides" 6.72 sec 238.10 M 2.37
9 "int8_t multiple constant divide2" 2.86 sec 559.44 M 1.01
10 "int8_t multiple constant mixed" 0.98 sec 1632.65 M 0.35
11 "int8_t constant and" 1.48 sec 1081.08 M 0.52
12 "int8_t multiple constant and" 1.44 sec 1111.11 M 0.51
13 "int8_t constant or" 1.48 sec 1081.08 M 0.52
14 "int8_t multiple constant or" 1.47 sec 1088.44 M 0.52
15 "int8_t constant xor" 1.43 sec 1118.88 M 0.50
16 "int8_t multiple constant xor" 1.47 sec 1088.44 M 0.52
Total absolute time for int8_t constant folding: 44.09 sec
test description absolute operations ratio with
number time per second test0
0 "uint8_t constant" 0.00 sec inf M nan
1 "uint8_t add constants" 0.00 sec inf M nan
2 "uint8_t subtract constants" 0.00 sec inf M nan
3 "uint8_t multiply constants" 0.00 sec inf M nan
4 "uint8_t divide constants" 0.00 sec inf M nan
5 "uint8_t mod constants" 0.00 sec inf M nan
6 "uint8_t equal constants" 0.00 sec inf M nan
7 "uint8_t notequal constants" 0.00 sec inf M nan
8 "uint8_t greater than constants" 0.00 sec inf M nan
9 "uint8_t less than constants" 0.00 sec inf M nan
10 "uint8_t greater than equal constants" 0.00 sec inf M nan
11 "uint8_t less than equal constants" 0.00 sec inf M nan
12 "uint8_t and constants" 0.00 sec inf M nan
13 "uint8_t or constants" 0.00 sec inf M nan
14 "uint8_t xor constants" 0.00 sec inf M nan
Total absolute time for uint8_t simple constant folding: 0.00 sec
test description absolute operations ratio with
number time per second test0
0 "uint8_t constant add" 0.10 sec 16000.00 M 1.00
1 "uint8_t multiple constant adds" 0.10 sec 16000.00 M 1.00
2 "uint8_t constant subtract" 0.10 sec 16000.00 M 1.00
3 "uint8_t multiple constant subtracts" 0.10 sec 16000.00 M 1.00
4 "uint8_t constant multiply" 1.04 sec 1538.46 M 10.40
5 "uint8_t multiple constant multiplies" 1.05 sec 1523.81 M 10.50
6 "uint8_t multiple constant multiply2" 0.10 sec 16000.00 M 1.00
7 "uint8_t constant divide" 3.34 sec 479.04 M 33.40
8 "uint8_t multiple constant divides" 3.35 sec 477.61 M 33.50
9 "uint8_t multiple constant divide2" 0.10 sec 16000.00 M 1.00
10 "uint8_t multiple constant mixed" 0.08 sec 20000.00 M 0.80
11 "uint8_t constant and" 0.10 sec 16000.00 M 1.00
12 "uint8_t multiple constant and" 0.09 sec 17777.78 M 0.90
13 "uint8_t constant or" 0.10 sec 16000.00 M 1.00
14 "uint8_t multiple constant or" 0.10 sec 16000.00 M 1.00
15 "uint8_t constant xor" 0.10 sec 16000.00 M 1.00
16 "uint8_t multiple constant xor" 0.10 sec 16000.00 M 1.00
Total absolute time for uint8_t constant folding: 10.05 sec
test description absolute operations ratio with
number time per second test0
0 "int16_t constant" 0.00 sec inf M nan
1 "int16_t add constants" 0.00 sec inf M nan
2 "int16_t subtract constants" 0.00 sec inf M nan
3 "int16_t multiply constants" 0.00 sec inf M nan
4 "int16_t divide constants" 0.00 sec inf M nan
5 "int16_t mod constants" 0.00 sec inf M nan
6 "int16_t equal constants" 0.00 sec inf M nan
7 "int16_t notequal constants" 0.00 sec inf M nan
8 "int16_t greater than constants" 0.00 sec inf M nan
9 "int16_t less than constants" 0.00 sec inf M nan
10 "int16_t greater than equal constants" 0.00 sec inf M nan
11 "int16_t less than equal constants" 0.00 sec inf M nan
12 "int16_t and constants" 0.00 sec inf M nan
13 "int16_t or constants" 0.00 sec inf M nan
14 "int16_t xor constants" 0.00 sec inf M nan
Total absolute time for int16_t simple constant folding: 0.00 sec
test description absolute operations ratio with
number time per second test0
0 "int16_t constant add" 2.84 sec 563.38 M 1.00
1 "int16_t multiple constant adds" 2.85 sec 561.40 M 1.00
2 "int16_t constant subtract" 2.84 sec 563.38 M 1.00
3 "int16_t multiple constant subtracts" 2.85 sec 561.40 M 1.00
4 "int16_t constant multiply" 3.35 sec 477.61 M 1.18
5 "int16_t multiple constant multiplies" 3.35 sec 477.61 M 1.18
6 "int16_t multiple constant multiply2" 2.84 sec 563.38 M 1.00
7 "int16_t constant divide" 3.85 sec 415.58 M 1.36
8 "int16_t multiple constant divides" 4.02 sec 398.01 M 1.42
9 "int16_t multiple constant divide2" 2.84 sec 563.38 M 1.00
10 "int16_t multiple constant mixed" 0.97 sec 1649.48 M 0.34
11 "int16_t constant and" 1.44 sec 1111.11 M 0.51
12 "int16_t multiple constant and" 1.46 sec 1095.89 M 0.51
13 "int16_t constant or" 1.44 sec 1111.11 M 0.51
14 "int16_t multiple constant or" 1.47 sec 1088.44 M 0.52
15 "int16_t constant xor" 1.44 sec 1111.11 M 0.51
16 "int16_t multiple constant xor" 1.47 sec 1088.44 M 0.52
Total absolute time for int16_t constant folding: 41.32 sec
test description absolute operations ratio with
number time per second test0
0 "uint16_t constant" 0.00 sec inf M nan
1 "uint16_t add constants" 0.00 sec inf M nan
2 "uint16_t subtract constants" 0.00 sec inf M nan
3 "uint16_t multiply constants" 0.00 sec inf M nan
4 "uint16_t divide constants" 0.00 sec inf M nan
5 "uint16_t mod constants" 0.00 sec inf M nan
6 "uint16_t equal constants" 0.00 sec inf M nan
7 "uint16_t notequal constants" 0.00 sec inf M nan
8 "uint16_t greater than constants" 0.00 sec inf M nan
9 "uint16_t less than constants" 0.00 sec inf M nan
10 "uint16_t greater than equal constants" 0.00 sec inf M nan
11 "uint16_t less than equal constants" 0.00 sec inf M nan
12 "uint16_t and constants" 0.00 sec inf M nan
13 "uint16_t or constants" 0.00 sec inf M nan
14 "uint16_t xor constants" 0.00 sec inf M nan
Total absolute time for uint16_t simple constant folding: 0.00 sec
test description absolute operations ratio with
number time per second test0
0 "uint16_t constant add" 0.19 sec 8421.05 M 1.00
1 "uint16_t multiple constant adds" 0.20 sec 8000.00 M 1.05
2 "uint16_t constant subtract" 0.20 sec 8000.00 M 1.05
3 "uint16_t multiple constant subtracts" 0.20 sec 8000.00 M 1.05
4 "uint16_t constant multiply" 0.22 sec 7272.73 M 1.16
5 "uint16_t multiple constant multiplies" 0.22 sec 7272.73 M 1.16
6 "uint16_t multiple constant multiply2" 0.20 sec 8000.00 M 1.05
7 "uint16_t constant divide" 1.81 sec 883.98 M 9.53
8 "uint16_t multiple constant divides" 1.83 sec 874.32 M 9.63
9 "uint16_t multiple constant divide2" 0.20 sec 8000.00 M 1.05
10 "uint16_t multiple constant mixed" 0.17 sec 9411.76 M 0.89
11 "uint16_t constant and" 0.19 sec 8421.05 M 1.00
12 "uint16_t multiple constant and" 0.20 sec 8000.00 M 1.05
13 "uint16_t constant or" 0.19 sec 8421.05 M 1.00
14 "uint16_t multiple constant or" 0.19 sec 8421.05 M 1.00
15 "uint16_t constant xor" 0.19 sec 8421.05 M 1.00
16 "uint16_t multiple constant xor" 0.20 sec 8000.00 M 1.05
Total absolute time for uint16_t constant folding: 6.60 sec
test description absolute operations ratio with
number time per second test0
0 "int32_t constant" 0.00 sec inf M nan
1 "int32_t add constants" 0.00 sec inf M nan
2 "int32_t subtract constants" 0.00 sec inf M nan
3 "int32_t multiply constants" 0.00 sec inf M nan
4 "int32_t divide constants" 0.00 sec inf M nan
5 "int32_t mod constants" 0.00 sec inf M nan
6 "int32_t equal constants" 0.00 sec inf M nan
7 "int32_t notequal constants" 0.00 sec inf M nan
8 "int32_t greater than constants" 0.00 sec inf M nan
9 "int32_t less than constants" 0.00 sec inf M nan
10 "int32_t greater than equal constants" 0.00 sec inf M nan
11 "int32_t less than equal constants" 0.00 sec inf M nan
12 "int32_t and constants" 0.00 sec inf M nan
13 "int32_t or constants" 0.00 sec inf M nan
14 "int32_t xor constants" 0.00 sec inf M nan
Total absolute time for int32_t simple constant folding: 0.00 sec
test description absolute operations ratio with
number time per second test0
0 "int32_t constant add" 0.39 sec 4102.56 M 1.00
1 "int32_t multiple constant adds" 0.33 sec 4848.48 M 0.85
2 "int32_t constant subtract" 0.39 sec 4102.56 M 1.00
3 "int32_t multiple constant subtracts" 0.39 sec 4102.56 M 1.00
4 "int32_t constant multiply" 1.35 sec 1185.19 M 3.46
5 "int32_t multiple constant multiplies" 1.41 sec 1134.75 M 3.62
6 "int32_t multiple constant multiply2" 0.39 sec 4102.56 M 1.00
7 "int32_t constant divide" 3.03 sec 528.05 M 7.77
8 "int32_t multiple constant divides" 3.33 sec 480.48 M 8.54
9 "int32_t multiple constant divide2" 0.34 sec 4705.88 M 0.87
10 "int32_t multiple constant mixed" 0.26 sec 6153.85 M 0.67
11 "int32_t constant and" 0.38 sec 4210.53 M 0.97
12 "int32_t multiple constant and" 0.34 sec 4705.88 M 0.87
13 "int32_t constant or" 0.39 sec 4102.56 M 1.00
14 "int32_t multiple constant or" 0.34 sec 4705.88 M 0.87
15 "int32_t constant xor" 0.34 sec 4705.88 M 0.87
16 "int32_t multiple constant xor" 0.35 sec 4571.43 M 0.90
Total absolute time for int32_t constant folding: 13.75 sec
test description absolute operations ratio with
number time per second test0
0 "uint32_t constant" 0.00 sec inf M nan
1 "uint32_t add constants" 0.00 sec inf M nan
2 "uint32_t subtract constants" 0.00 sec inf M nan
3 "uint32_t multiply constants" 0.00 sec inf M nan
4 "uint32_t divide constants" 0.00 sec inf M nan
5 "uint32_t mod constants" 0.00 sec inf M nan
6 "uint32_t equal constants" 0.00 sec inf M nan
7 "uint32_t notequal constants" 0.00 sec inf M nan
8 "uint32_t greater than constants" 0.00 sec inf M nan
9 "uint32_t less than constants" 0.00 sec inf M nan
10 "uint32_t greater than equal constants" 0.00 sec inf M nan
11 "uint32_t less than equal constants" 0.00 sec inf M nan
12 "uint32_t and constants" 0.00 sec inf M nan
13 "uint32_t or constants" 0.00 sec inf M nan
14 "uint32_t xor constants" 0.00 sec inf M nan
Total absolute time for uint32_t simple constant folding: 0.00 sec
test description absolute operations ratio with
number time per second test0
0 "uint32_t constant add" 0.34 sec 4705.88 M 1.00
1 "uint32_t multiple constant adds" 0.34 sec 4705.88 M 1.00
2 "uint32_t constant subtract" 0.34 sec 4705.88 M 1.00
3 "uint32_t multiple constant subtracts" 0.34 sec 4705.88 M 1.00
4 "uint32_t constant multiply" 1.35 sec 1185.19 M 3.97
5 "uint32_t multiple constant multiplies" 1.35 sec 1185.19 M 3.97
6 "uint32_t multiple constant multiply2" 0.33 sec 4848.48 M 0.97
7 "uint32_t constant divide" 2.64 sec 606.06 M 7.76
8 "uint32_t multiple constant divides" 2.63 sec 608.37 M 7.74
9 "uint32_t multiple constant divide2" 0.34 sec 4705.88 M 1.00
10 "uint32_t multiple constant mixed" 0.27 sec 5925.93 M 0.79
11 "uint32_t constant and" 0.34 sec 4705.88 M 1.00
12 "uint32_t multiple constant and" 0.34 sec 4705.88 M 1.00
13 "uint32_t constant or" 0.33 sec 4848.48 M 0.97
14 "uint32_t multiple constant or" 0.34 sec 4705.88 M 1.00
15 "uint32_t constant xor" 0.34 sec 4705.88 M 1.00
16 "uint32_t multiple constant xor" 0.34 sec 4705.88 M 1.00
Total absolute time for uint32_t constant folding: 12.30 sec
test description absolute operations ratio with
number time per second test0
0 "int64_t constant" 0.00 sec inf M nan
1 "int64_t add constants" 0.00 sec inf M nan
2 "int64_t subtract constants" 0.00 sec inf M nan
3 "int64_t multiply constants" 0.00 sec inf M nan
4 "int64_t divide constants" 0.00 sec inf M nan
5 "int64_t mod constants" 0.00 sec inf M nan
6 "int64_t equal constants" 0.00 sec inf M nan
7 "int64_t notequal constants" 0.00 sec inf M nan
8 "int64_t greater than constants" 0.00 sec inf M nan
9 "int64_t less than constants" 0.00 sec inf M nan
10 "int64_t greater than equal constants" 0.00 sec inf M nan
11 "int64_t less than equal constants" 0.00 sec inf M nan
12 "int64_t and constants" 0.00 sec inf M nan
13 "int64_t or constants" 0.00 sec inf M nan
14 "int64_t xor constants" 0.00 sec inf M nan
Total absolute time for int64_t simple constant folding: 0.00 sec
test description absolute operations ratio with
number time per second test0
0 "int64_t constant add" 1.05 sec 1523.81 M 1.00
1 "int64_t multiple constant adds" 1.06 sec 1509.43 M 1.01
2 "int64_t constant subtract" 1.05 sec 1523.81 M 1.00
3 "int64_t multiple constant subtracts" 1.06 sec 1509.43 M 1.01
4 "int64_t constant multiply" 2.72 sec 588.24 M 2.59
5 "int64_t multiple constant multiplies" 2.73 sec 586.08 M 2.60
6 "int64_t multiple constant multiply2" 1.05 sec 1523.81 M 1.00
7 "int64_t constant divide" 2.94 sec 544.22 M 2.80
8 "int64_t multiple constant divides" 3.29 sec 486.32 M 3.13
9 "int64_t multiple constant divide2" 1.05 sec 1523.81 M 1.00
10 "int64_t multiple constant mixed" 0.80 sec 2000.00 M 0.76
11 "int64_t constant and" 0.97 sec 1649.48 M 0.92
12 "int64_t multiple constant and" 0.96 sec 1666.67 M 0.91
13 "int64_t constant or" 0.97 sec 1649.48 M 0.92
14 "int64_t multiple constant or" 0.96 sec 1666.67 M 0.91
15 "int64_t constant xor" 0.97 sec 1649.48 M 0.92
16 "int64_t multiple constant xor" 0.96 sec 1666.67 M 0.91
Total absolute time for int64_t constant folding: 24.59 sec
test description absolute operations ratio with
number time per second test0
0 "uint64_t constant" 0.00 sec inf M nan
1 "uint64_t add constants" 0.00 sec inf M nan
2 "uint64_t subtract constants" 0.00 sec inf M nan
3 "uint64_t multiply constants" 0.00 sec inf M nan
4 "uint64_t divide constants" 0.00 sec inf M nan
5 "uint64_t mod constants" 0.00 sec inf M nan
6 "uint64_t equal constants" 0.00 sec inf M nan
7 "uint64_t notequal constants" 0.00 sec inf M nan
8 "uint64_t greater than constants" 0.00 sec inf M nan
9 "uint64_t less than constants" 0.00 sec inf M nan
10 "uint64_t greater than equal constants" 0.00 sec inf M nan
11 "uint64_t less than equal constants" 0.00 sec inf M nan
12 "uint64_t and constants" 0.00 sec inf M nan
13 "uint64_t or constants" 0.00 sec inf M nan
14 "uint64_t xor constants" 0.00 sec inf M nan
Total absolute time for uint64_t simple constant folding: 0.00 sec
test description absolute operations ratio with
number time per second test0
0 "uint64_t constant add" 1.06 sec 1509.43 M 1.00
1 "uint64_t multiple constant adds" 1.06 sec 1509.43 M 1.00
2 "uint64_t constant subtract" 1.05 sec 1523.81 M 0.99
3 "uint64_t multiple constant subtracts" 1.06 sec 1509.43 M 1.00
4 "uint64_t constant multiply" 2.55 sec 627.45 M 2.41
5 "uint64_t multiple constant multiplies" 2.55 sec 627.45 M 2.41
6 "uint64_t multiple constant multiply2" 1.06 sec 1509.43 M 1.00
7 "uint64_t constant divide" 2.68 sec 597.01 M 2.53
8 "uint64_t multiple constant divides" 2.69 sec 594.80 M 2.54
9 "uint64_t multiple constant divide2" 1.05 sec 1523.81 M 0.99
10 "uint64_t multiple constant mixed" 0.80 sec 2000.00 M 0.75
11 "uint64_t constant and" 0.97 sec 1649.48 M 0.92
12 "uint64_t multiple constant and" 0.96 sec 1666.67 M 0.91
13 "uint64_t constant or" 0.97 sec 1649.48 M 0.92
14 "uint64_t multiple constant or" 0.96 sec 1666.67 M 0.91
15 "uint64_t constant xor" 0.97 sec 1649.48 M 0.92
16 "uint64_t multiple constant xor" 0.97 sec 1649.48 M 0.92
Total absolute time for uint64_t constant folding: 23.41 sec
test description absolute operations ratio with
number time per second test0
0 "float constant" 20.15 sec 794.04 M 1.00
1 "float add constants" 20.10 sec 796.02 M 1.00
2 "float subtract constants" 20.10 sec 796.02 M 1.00
3 "float multiply constants" 20.08 sec 796.81 M 1.00
4 "float divide constants" 20.16 sec 793.65 M 1.00
Total absolute time for float simple constant folding: 100.59 sec
test description absolute operations ratio with
number time per second test0
0 "float constant add" 2.03 sec 788.18 M 1.00
1 "float multiple constant adds" 3.35 sec 477.61 M 1.65
2 "float constant subtract" 2.01 sec 796.02 M 0.99
3 "float multiple constant subtracts" 3.35 sec 477.61 M 1.65
4 "float constant multiply" 2.01 sec 796.02 M 0.99
5 "float multiple constant multiplies" 2.21 sec 723.98 M 1.09
6 "float multiple constant multiply2" 2.01 sec 796.02 M 0.99
7 "float constant divide" 11.42 sec 140.11 M 5.63
8 "float multiple constant divides" 22.78 sec 70.24 M 11.22
9 "float multiple constant divide2" 2.01 sec 796.02 M 0.99
10 "float multiple constant mixed" 2.06 sec 776.70 M 1.01
Total absolute time for float constant folding: 55.24 sec
test description absolute operations ratio with
number time per second test0
0 "double constant" 20.11 sec 795.62 M 1.00
1 "double add constants" 20.14 sec 794.44 M 1.00
2 "double subtract constants" 20.08 sec 796.81 M 1.00
3 "double multiply constants" 20.11 sec 795.62 M 1.00
4 "double divide constants" 20.13 sec 794.83 M 1.00
Total absolute time for double simple constant folding: 100.57 sec
test description absolute operations ratio with
number time per second test0
0 "double constant add" 2.03 sec 788.18 M 1.00
1 "double multiple constant adds" 3.35 sec 477.61 M 1.65
2 "double constant subtract" 2.03 sec 788.18 M 1.00
3 "double multiple constant subtracts" 3.35 sec 477.61 M 1.65
4 "double constant multiply" 2.01 sec 796.02 M 0.99
5 "double multiple constant multiplies" 2.34 sec 683.76 M 1.15
6 "double multiple constant multiply2" 2.02 sec 792.08 M 1.00
7 "double constant divide" 20.91 sec 76.52 M 10.30
8 "double multiple constant divides" 41.53 sec 38.53 M 20.46
9 "double multiple constant divide2" 2.03 sec 788.18 M 1.00
10 "double multiple constant mixed" 2.11 sec 758.29 M 1.04
Total absolute time for double constant folding: 83.71 sec
./simple_types_loop_invariant
test description absolute operations ratio with
number time per second test0
0 "int8_t variable add" 3.03 sec 528.05 M 1.00
1 "int8_t variable add hoisted" 0.96 sec 1666.67 M 0.32
2 "int8_t multiple variable adds" 3.01 sec 531.56 M 0.99
3 "int8_t variable subtract" 1.57 sec 1019.11 M 0.52
4 "int8_t multiple variable subtracts" 6.02 sec 265.78 M 1.99
5 "int8_t variable multiply" 3.36 sec 476.19 M 1.11
6 "int8_t multiple variable multiplies" 3.01 sec 531.56 M 0.99
7 "int8_t multiple variable multiplies2" 3.02 sec 529.80 M 1.00
8 "int8_t variable divide" 8.47 sec 188.90 M 2.80
9 "int8_t multiple variable divides" 32.12 sec 49.81 M 10.60
10 "int8_t multiple variable divides2" 3.01 sec 531.56 M 0.99
11 "int8_t multiple variable mixed" 3.02 sec 529.80 M 1.00
12 "int8_t variable and" 3.35 sec 477.61 M 1.11
13 "int8_t multiple variable and" 3.38 sec 473.37 M 1.12
14 "int8_t variable or" 3.37 sec 474.78 M 1.11
15 "int8_t multiple variable or" 3.36 sec 476.19 M 1.11
16 "int8_t variable xor" 3.35 sec 477.61 M 1.11
17 "int8_t multiple variable xor" 3.34 sec 479.04 M 1.10
Total absolute time for int8_t loop invariant: 90.75 sec
test description absolute operations ratio with
number time per second test0
0 "uint8_t variable add" 0.10 sec 16000.00 M 1.00
1 "uint8_t variable add hoisted" 0.09 sec 17777.78 M 0.90
2 "uint8_t multiple variable adds" 1.35 sec 1185.19 M 13.50
3 "uint8_t variable subtract" 0.10 sec 16000.00 M 1.00
4 "uint8_t multiple variable subtracts" 0.15 sec 10666.67 M 1.50
5 "uint8_t variable multiply" 1.03 sec 1553.40 M 10.30
6 "uint8_t multiple variable multiplies" 1.04 sec 1538.46 M 10.40
7 "uint8_t multiple variable multiplies2" 0.10 sec 16000.00 M 1.00
8 "uint8_t variable divide" 8.04 sec 199.00 M 80.40
9 "uint8_t multiple variable divides" 32.13 sec 49.80 M 321.30
10 "uint8_t multiple variable divides2" 0.10 sec 16000.00 M 1.00
11 "uint8_t multiple variable mixed" 1.34 sec 1194.03 M 13.40
12 "uint8_t variable and" 0.10 sec 16000.00 M 1.00
13 "uint8_t multiple variable and" 0.10 sec 16000.00 M 1.00
14 "uint8_t variable or" 0.10 sec 16000.00 M 1.00
15 "uint8_t multiple variable or" 0.09 sec 17777.78 M 0.90
16 "uint8_t variable xor" 0.10 sec 16000.00 M 1.00
17 "uint8_t multiple variable xor" 0.10 sec 16000.00 M 1.00
Total absolute time for uint8_t loop invariant: 46.16 sec
test description absolute operations ratio with
number time per second test0
0 "int16_t variable add" 3.01 sec 531.56 M 1.00
1 "int16_t variable add hoisted" 1.01 sec 1584.16 M 0.34
2 "int16_t multiple variable adds" 3.01 sec 531.56 M 1.00
3 "int16_t variable subtract" 1.52 sec 1052.63 M 0.50
4 "int16_t multiple variable subtracts" 6.36 sec 251.57 M 2.11
5 "int16_t variable multiply" 3.03 sec 528.05 M 1.01
6 "int16_t multiple variable multiplies" 3.04 sec 526.32 M 1.01
7 "int16_t multiple variable multiplies2" 3.01 sec 531.56 M 1.00
8 "int16_t variable divide" 8.46 sec 189.13 M 2.81
9 "int16_t multiple variable divides" 32.20 sec 49.69 M 10.70
10 "int16_t multiple variable divides2" 3.02 sec 529.80 M 1.00
11 "int16_t multiple variable mixed" 3.01 sec 531.56 M 1.00
12 "int16_t variable and" 3.35 sec 477.61 M 1.11
13 "int16_t multiple variable and" 3.01 sec 531.56 M 1.00
14 "int16_t variable or" 3.35 sec 477.61 M 1.11
15 "int16_t multiple variable or" 3.02 sec 529.80 M 1.00
16 "int16_t variable xor" 3.34 sec 479.04 M 1.11
17 "int16_t multiple variable xor" 3.02 sec 529.80 M 1.00
Total absolute time for int16_t loop invariant: 89.77 sec
test description absolute operations ratio with
number time per second test0
0 "uint16_t variable add" 0.19 sec 8421.05 M 1.00
1 "uint16_t variable add hoisted" 0.17 sec 9411.76 M 0.89
2 "uint16_t multiple variable adds" 3.02 sec 529.80 M 15.89
3 "uint16_t variable subtract" 0.20 sec 8000.00 M 1.05
4 "uint16_t multiple variable subtracts" 0.30 sec 5333.33 M 1.58
5 "uint16_t variable multiply" 0.22 sec 7272.73 M 1.16
6 "uint16_t multiple variable multiplies" 0.22 sec 7272.73 M 1.16
7 "uint16_t multiple variable multiplies2" 0.19 sec 8421.05 M 1.00
8 "uint16_t variable divide" 8.26 sec 193.70 M 43.47
9 "uint16_t multiple variable divides" 32.18 sec 49.72 M 169.37
10 "uint16_t multiple variable divides2" 0.19 sec 8421.05 M 1.00
11 "uint16_t multiple variable mixed" 3.02 sec 529.80 M 15.89
12 "uint16_t variable and" 0.19 sec 8421.05 M 1.00
13 "uint16_t multiple variable and" 0.20 sec 8000.00 M 1.05
14 "uint16_t variable or" 0.19 sec 8421.05 M 1.00
15 "uint16_t multiple variable or" 0.19 sec 8421.05 M 1.00
16 "uint16_t variable xor" 0.20 sec 8000.00 M 1.05
17 "uint16_t multiple variable xor" 0.19 sec 8421.05 M 1.00
Total absolute time for uint16_t loop invariant: 49.32 sec
test description absolute operations ratio with
number time per second test0
0 "int32_t variable add" 0.39 sec 4102.56 M 1.00
1 "int32_t variable add hoisted" 0.34 sec 4705.88 M 0.87
2 "int32_t multiple variable adds" 0.59 sec 2711.86 M 1.51
3 "int32_t variable subtract" 0.41 sec 3902.44 M 1.05
4 "int32_t multiple variable subtracts" 0.59 sec 2711.86 M 1.51
5 "int32_t variable multiply" 1.45 sec 1103.45 M 3.72
6 "int32_t multiple variable multiplies" 6.48 sec 246.91 M 16.62
7 "int32_t multiple variable multiplies2" 0.39 sec 4102.56 M 1.00
8 "int32_t variable divide" 8.48 sec 188.68 M 21.74
9 "int32_t multiple variable divides" 32.18 sec 49.72 M 82.51
10 "int32_t multiple variable divides2" 0.39 sec 4102.56 M 1.00
11 "int32_t multiple variable mixed" 0.43 sec 3720.93 M 1.10
12 "int32_t variable and" 0.38 sec 4210.53 M 0.97
13 "int32_t multiple variable and" 0.39 sec 4102.56 M 1.00
14 "int32_t variable or" 0.39 sec 4102.56 M 1.00
15 "int32_t multiple variable or" 0.38 sec 4210.53 M 0.97
16 "int32_t variable xor" 0.39 sec 4102.56 M 1.00
17 "int32_t multiple variable xor" 0.38 sec 4210.53 M 0.97
Total absolute time for int32_t loop invariant: 54.43 sec
test description absolute operations ratio with
number time per second test0
0 "uint32_t variable add" 0.40 sec 4000.00 M 1.00
1 "uint32_t variable add hoisted" 0.34 sec 4705.88 M 0.85
2 "uint32_t multiple variable adds" 1.44 sec 1111.11 M 3.60
3 "uint32_t variable subtract" 0.41 sec 3902.44 M 1.02
4 "uint32_t multiple variable subtracts" 0.59 sec 2711.86 M 1.47
5 "uint32_t variable multiply" 1.46 sec 1095.89 M 3.65
6 "uint32_t multiple variable multiplies" 1.44 sec 1111.11 M 3.60
7 "uint32_t multiple variable multiplies2" 0.39 sec 4102.56 M 0.97
8 "uint32_t variable divide" 8.03 sec 199.25 M 20.07
9 "uint32_t multiple variable divides" 32.37 sec 49.43 M 80.92
10 "uint32_t multiple variable divides2" 0.39 sec 4102.56 M 0.97
11 "uint32_t multiple variable mixed" 1.48 sec 1081.08 M 3.70
12 "uint32_t variable and" 0.34 sec 4705.88 M 0.85
13 "uint32_t multiple variable and" 0.34 sec 4705.88 M 0.85
14 "uint32_t variable or" 0.34 sec 4705.88 M 0.85
15 "uint32_t multiple variable or" 0.34 sec 4705.88 M 0.85
16 "uint32_t variable xor" 0.34 sec 4705.88 M 0.85
17 "uint32_t multiple variable xor" 0.34 sec 4705.88 M 0.85
Total absolute time for uint32_t loop invariant: 50.78 sec
test description absolute operations ratio with
number time per second test0
0 "int64_t variable add" 1.07 sec 1495.33 M 1.00
1 "int64_t variable add hoisted" 0.80 sec 2000.00 M 0.75
2 "int64_t multiple variable adds" 2.02 sec 792.08 M 1.89
3 "int64_t variable subtract" 1.38 sec 1159.42 M 1.29
4 "int64_t multiple variable subtracts" 2.01 sec 796.02 M 1.88
5 "int64_t variable multiply" 2.65 sec 603.77 M 2.48
6 "int64_t multiple variable multiplies" 11.37 sec 140.72 M 10.63
7 "int64_t multiple variable multiplies2" 1.05 sec 1523.81 M 0.98
8 "int64_t variable divide" 21.85 sec 73.23 M 20.42
9 "int64_t multiple variable divides" 100.13 sec 15.98 M 93.58
10 "int64_t multiple variable divides2" 1.05 sec 1523.81 M 0.98
11 "int64_t multiple variable mixed" 1.36 sec 1176.47 M 1.27
12 "int64_t variable and" 0.97 sec 1649.48 M 0.91
13 "int64_t multiple variable and" 0.97 sec 1649.48 M 0.91
14 "int64_t variable or" 0.96 sec 1666.67 M 0.90
15 "int64_t multiple variable or" 0.98 sec 1632.65 M 0.92
16 "int64_t variable xor" 0.97 sec 1649.48 M 0.91
17 "int64_t multiple variable xor" 0.96 sec 1666.67 M 0.90
Total absolute time for int64_t loop invariant: 152.55 sec
test description absolute operations ratio with
number time per second test0
0 "uint64_t variable add" 1.06 sec 1509.43 M 1.00
1 "uint64_t variable add hoisted" 0.81 sec 1975.31 M 0.76
2 "uint64_t multiple variable adds" 1.49 sec 1073.83 M 1.41
3 "uint64_t variable subtract" 1.38 sec 1159.42 M 1.30
4 "uint64_t multiple variable subtracts" 2.02 sec 792.08 M 1.91
5 "uint64_t variable multiply" 2.69 sec 594.80 M 2.54
6 "uint64_t multiple variable multiplies" 2.67 sec 599.25 M 2.52
7 "uint64_t multiple variable multiplies2" 1.05 sec 1523.81 M 0.99
8 "uint64_t variable divide" 12.88 sec 124.22 M 12.15
9 "uint64_t multiple variable divides" 63.52 sec 25.19 M 59.92
10 "uint64_t multiple variable divides2" 1.06 sec 1509.43 M 1.00
11 "uint64_t multiple variable mixed" 1.49 sec 1073.83 M 1.41
12 "uint64_t variable and" 0.97 sec 1649.48 M 0.92
13 "uint64_t multiple variable and" 0.96 sec 1666.67 M 0.91
14 "uint64_t variable or" 0.97 sec 1649.48 M 0.92
15 "uint64_t multiple variable or" 0.97 sec 1649.48 M 0.92
16 "uint64_t variable xor" 0.97 sec 1649.48 M 0.92
17 "uint64_t multiple variable xor" 0.96 sec 1666.67 M 0.91
Total absolute time for uint64_t loop invariant: 97.92 sec
test description absolute operations ratio with
number time per second test0
0 "float variable add" 2.01 sec 796.02 M 1.00
1 "float variable add hoisted" 2.01 sec 796.02 M 1.00
2 "float multiple variable adds" 3.35 sec 477.61 M 1.67
3 "float variable subtract" 2.01 sec 796.02 M 1.00
4 "float multiple variable subtracts" 3.37 sec 474.78 M 1.68
5 "float variable multiply" 2.02 sec 792.08 M 1.00
6 "float multiple variable multiplies" 2.71 sec 590.41 M 1.35
7 "float multiple variable multiplies2" 2.02 sec 792.08 M 1.00
8 "float variable divide" 3.36 sec 476.19 M 1.67
9 "float multiple variable divides" 29.47 sec 54.29 M 14.66
10 "float multiple variable divides2" 2.01 sec 796.02 M 1.00
11 "float multiple variable mixed" 2.06 sec 776.70 M 1.02
Total absolute time for float loop invariant: 56.40 sec
test description absolute operations ratio with
number time per second test0
0 "double variable add" 2.05 sec 780.49 M 1.00
1 "double variable add hoisted" 2.01 sec 796.02 M 0.98
2 "double multiple variable adds" 3.35 sec 477.61 M 1.63
3 "double variable subtract" 2.07 sec 772.95 M 1.01
4 "double multiple variable subtracts" 3.35 sec 477.61 M 1.63
5 "double variable multiply" 2.01 sec 796.02 M 0.98
6 "double multiple variable multiplies" 2.69 sec 594.80 M 1.31
7 "double multiple variable multiplies2" 2.03 sec 788.18 M 0.99
8 "double variable divide" 3.35 sec 477.61 M 1.63
9 "double multiple variable divides" 48.29 sec 33.13 M 23.56
10 "double multiple variable divides2" 2.03 sec 788.18 M 0.99
11 "double multiple variable mixed" 2.11 sec 758.29 M 1.03
Total absolute time for double loop invariant: 75.34 sec
./loop_unroll
test description absolute operations ratio with
number time per second test0
0 "int32_t for loop unroll 1" 7.09 sec 338.50 M 1.00
1 "int32_t for loop unroll 2" 2.05 sec 1170.73 M 0.29
2 "int32_t for loop unroll 3" 3.46 sec 693.64 M 0.49
3 "int32_t for loop unroll 4" 3.69 sec 650.41 M 0.52
4 "int32_t for loop unroll 5" 3.25 sec 738.46 M 0.46
5 "int32_t for loop unroll 6" 2.92 sec 821.92 M 0.41
6 "int32_t for loop unroll 7" 3.64 sec 659.34 M 0.51
7 "int32_t for loop unroll 8" 3.49 sec 687.68 M 0.49
8 "int32_t for loop unroll 9" 3.35 sec 716.42 M 0.47
9 "int32_t for loop unroll 10" 4.15 sec 578.31 M 0.59
10 "int32_t for loop unroll 11" 3.94 sec 609.14 M 0.56
11 "int32_t for loop unroll 12" 3.79 sec 633.25 M 0.53
12 "int32_t for loop unroll 13" 3.63 sec 661.16 M 0.51
13 "int32_t for loop unroll 14" 3.52 sec 681.82 M 0.50
14 "int32_t for loop unroll 15" 3.91 sec 613.81 M 0.55
15 "int32_t for loop unroll 16" 3.66 sec 655.74 M 0.52
16 "int32_t for loop unroll 17" 3.74 sec 641.71 M 0.53
17 "int32_t for loop unroll 18" 3.62 sec 662.98 M 0.51
18 "int32_t for loop unroll 19" 3.46 sec 693.64 M 0.49
19 "int32_t for loop unroll 20" 3.77 sec 636.60 M 0.53
20 "int32_t for loop unroll 21" 3.76 sec 638.30 M 0.53
21 "int32_t for loop unroll 22" 3.60 sec 666.67 M 0.51
22 "int32_t for loop unroll 23" 3.97 sec 604.53 M 0.56
23 "int32_t for loop unroll 24" 3.80 sec 631.58 M 0.54
24 "int32_t for loop unroll 25" 3.69 sec 650.41 M 0.52
25 "int32_t for loop unroll 26" 3.71 sec 646.90 M 0.52
26 "int32_t for loop unroll 27" 3.92 sec 612.24 M 0.55
27 "int32_t for loop unroll 28" 4.00 sec 600.00 M 0.56
28 "int32_t for loop unroll 29" 3.90 sec 615.38 M 0.55
29 "int32_t for loop unroll 30" 3.82 sec 628.27 M 0.54
30 "int32_t for loop unroll 31" 3.71 sec 646.90 M 0.52
31 "int32_t for loop unroll 32" 3.55 sec 676.06 M 0.50
Total absolute time for int32_t for loop unrolling: 119.56 sec
test description absolute operations ratio with
number time per second test0
0 "int32_t while loop unroll 1" 7.21 sec 332.87 M 1.00
1 "int32_t while loop unroll 2" 2.06 sec 1165.05 M 0.29
2 "int32_t while loop unroll 3" 3.45 sec 695.65 M 0.48
3 "int32_t while loop unroll 4" 3.64 sec 659.34 M 0.50
4 "int32_t while loop unroll 5" 3.27 sec 733.94 M 0.45
5 "int32_t while loop unroll 6" 2.91 sec 824.74 M 0.40
6 "int32_t while loop unroll 7" 3.67 sec 653.95 M 0.51
7 "int32_t while loop unroll 8" 3.41 sec 703.81 M 0.47
8 "int32_t while loop unroll 9" 3.33 sec 720.72 M 0.46
9 "int32_t while loop unroll 10" 4.11 sec 583.94 M 0.57
10 "int32_t while loop unroll 11" 3.94 sec 609.14 M 0.55
11 "int32_t while loop unroll 12" 3.77 sec 636.60 M 0.52
12 "int32_t while loop unroll 13" 3.66 sec 655.74 M 0.51
13 "int32_t while loop unroll 14" 3.54 sec 677.97 M 0.49
14 "int32_t while loop unroll 15" 3.90 sec 615.38 M 0.54
15 "int32_t while loop unroll 16" 3.77 sec 636.60 M 0.52
16 "int32_t while loop unroll 17" 3.73 sec 643.43 M 0.52
17 "int32_t while loop unroll 18" 3.62 sec 662.98 M 0.50
18 "int32_t while loop unroll 19" 3.47 sec 691.64 M 0.48
19 "int32_t while loop unroll 20" 3.80 sec 631.58 M 0.53
20 "int32_t while loop unroll 21" 3.78 sec 634.92 M 0.52
21 "int32_t while loop unroll 22" 3.62 sec 662.98 M 0.50
22 "int32_t while loop unroll 23" 3.98 sec 603.02 M 0.55
23 "int32_t while loop unroll 24" 3.80 sec 631.58 M 0.53
24 "int32_t while loop unroll 25" 3.69 sec 650.41 M 0.51
25 "int32_t while loop unroll 26" 3.71 sec 646.90 M 0.51
26 "int32_t while loop unroll 27" 3.92 sec 612.24 M 0.54
27 "int32_t while loop unroll 28" 3.99 sec 601.50 M 0.55
28 "int32_t while loop unroll 29" 3.89 sec 616.97 M 0.54
29 "int32_t while loop unroll 30" 3.73 sec 643.43 M 0.52
30 "int32_t while loop unroll 31" 3.68 sec 652.17 M 0.51
31 "int32_t while loop unroll 32" 3.53 sec 679.89 M 0.49
Total absolute time for int32_t while loop unrolling: 119.58 sec
test description absolute operations ratio with
number time per second test0
0 "int32_t do loop unroll 1" 7.10 sec 338.03 M 1.00
1 "int32_t do loop unroll 2" 2.08 sec 1153.85 M 0.29
2 "int32_t do loop unroll 3" 3.48 sec 689.66 M 0.49
3 "int32_t do loop unroll 4" 3.61 sec 664.82 M 0.51
4 "int32_t do loop unroll 5" 3.27 sec 733.94 M 0.46
5 "int32_t do loop unroll 6" 2.94 sec 816.33 M 0.41
6 "int32_t do loop unroll 7" 3.69 sec 650.41 M 0.52
7 "int32_t do loop unroll 8" 3.41 sec 703.81 M 0.48
8 "int32_t do loop unroll 9" 3.33 sec 720.72 M 0.47
9 "int32_t do loop unroll 10" 4.15 sec 578.31 M 0.58
10 "int32_t do loop unroll 11" 4.05 sec 592.59 M 0.57
11 "int32_t do loop unroll 12" 3.86 sec 621.76 M 0.54
12 "int32_t do loop unroll 13" 3.71 sec 646.90 M 0.52
13 "int32_t do loop unroll 14" 3.56 sec 674.16 M 0.50
14 "int32_t do loop unroll 15" 3.96 sec 606.06 M 0.56
15 "int32_t do loop unroll 16" 3.77 sec 636.60 M 0.53
16 "int32_t do loop unroll 17" 3.84 sec 625.00 M 0.54
17 "int32_t do loop unroll 18" 3.63 sec 661.16 M 0.51
18 "int32_t do loop unroll 19" 3.53 sec 679.89 M 0.50
19 "int32_t do loop unroll 20" 3.77 sec 636.60 M 0.53
20 "int32_t do loop unroll 21" 3.82 sec 628.27 M 0.54
21 "int32_t do loop unroll 22" 3.68 sec 652.17 M 0.52
22 "int32_t do loop unroll 23" 3.79 sec 633.25 M 0.53
23 "int32_t do loop unroll 24" 3.81 sec 629.92 M 0.54
24 "int32_t do loop unroll 25" 3.95 sec 607.59 M 0.56
25 "int32_t do loop unroll 26" 3.93 sec 610.69 M 0.55
26 "int32_t do loop unroll 27" 3.89 sec 616.97 M 0.55
27 "int32_t do loop unroll 28" 3.93 sec 610.69 M 0.55
28 "int32_t do loop unroll 29" 3.81 sec 629.92 M 0.54
29 "int32_t do loop unroll 30" 3.69 sec 650.41 M 0.52
30 "int32_t do loop unroll 31" 3.69 sec 650.41 M 0.52
31 "int32_t do loop unroll 32" 3.52 sec 681.82 M 0.50
Total absolute time for int32_t do loop unrolling: 120.25 sec
test description absolute operations ratio with
number time per second test0
0 "int32_t goto loop unroll 1" 7.21 sec 332.87 M 1.00
1 "int32_t goto loop unroll 2" 2.09 sec 1148.33 M 0.29
2 "int32_t goto loop unroll 3" 3.47 sec 691.64 M 0.48
3 "int32_t goto loop unroll 4" 3.63 sec 661.16 M 0.50
4 "int32_t goto loop unroll 5" 3.26 sec 736.20 M 0.45
5 "int32_t goto loop unroll 6" 2.94 sec 816.33 M 0.41
6 "int32_t goto loop unroll 7" 3.67 sec 653.95 M 0.51
7 "int32_t goto loop unroll 8" 3.35 sec 716.42 M 0.46
8 "int32_t goto loop unroll 9" 3.32 sec 722.89 M 0.46
9 "int32_t goto loop unroll 10" 4.12 sec 582.52 M 0.57
10 "int32_t goto loop unroll 11" 4.03 sec 595.53 M 0.56
11 "int32_t goto loop unroll 12" 3.89 sec 616.97 M 0.54
12 "int32_t goto loop unroll 13" 3.74 sec 641.71 M 0.52
13 "int32_t goto loop unroll 14" 3.56 sec 674.16 M 0.49
14 "int32_t goto loop unroll 15" 3.96 sec 606.06 M 0.55
15 "int32_t goto loop unroll 16" 3.82 sec 628.27 M 0.53
16 "int32_t goto loop unroll 17" 3.84 sec 625.00 M 0.53
17 "int32_t goto loop unroll 18" 3.63 sec 661.16 M 0.50
18 "int32_t goto loop unroll 19" 3.52 sec 681.82 M 0.49
19 "int32_t goto loop unroll 20" 3.74 sec 641.71 M 0.52
20 "int32_t goto loop unroll 21" 3.80 sec 631.58 M 0.53
21 "int32_t goto loop unroll 22" 3.66 sec 655.74 M 0.51
22 "int32_t goto loop unroll 23" 3.90 sec 615.38 M 0.54
23 "int32_t goto loop unroll 24" 3.82 sec 628.27 M 0.53
24 "int32_t goto loop unroll 25" 3.73 sec 643.43 M 0.52
25 "int32_t goto loop unroll 26" 3.70 sec 648.65 M 0.51
26 "int32_t goto loop unroll 27" 3.89 sec 616.97 M 0.54
27 "int32_t goto loop unroll 28" 3.93 sec 610.69 M 0.55
28 "int32_t goto loop unroll 29" 3.81 sec 629.92 M 0.53
29 "int32_t goto loop unroll 30" 3.70 sec 648.65 M 0.51
30 "int32_t goto loop unroll 31" 3.72 sec 645.16 M 0.52
31 "int32_t goto loop unroll 32" 3.54 sec 677.97 M 0.49
Total absolute time for int32_t goto loop unrolling: 119.99 sec
test description absolute operations ratio with
number time per second test0
0 "double for loop unroll 1" 2.07 sec 289.86 M 1.00
1 "double for loop unroll 2" 2.11 sec 284.36 M 1.02
2 "double for loop unroll 3" 2.09 sec 287.08 M 1.01
3 "double for loop unroll 4" 2.61 sec 229.89 M 1.26
4 "double for loop unroll 5" 2.65 sec 226.42 M 1.28
5 "double for loop unroll 6" 2.50 sec 240.00 M 1.21
6 "double for loop unroll 7" 2.33 sec 257.51 M 1.13
7 "double for loop unroll 8" 2.69 sec 223.05 M 1.30
8 "double for loop unroll 9" 2.67 sec 224.72 M 1.29
9 "double for loop unroll 10" 2.52 sec 238.10 M 1.22
10 "double for loop unroll 11" 2.45 sec 244.90 M 1.18
11 "double for loop unroll 12" 2.32 sec 258.62 M 1.12
12 "double for loop unroll 13" 2.62 sec 229.01 M 1.27
13 "double for loop unroll 14" 2.65 sec 226.42 M 1.28
14 "double for loop unroll 15" 2.61 sec 229.89 M 1.26
15 "double for loop unroll 16" 2.52 sec 238.10 M 1.22
16 "double for loop unroll 17" 2.62 sec 229.01 M 1.27
17 "double for loop unroll 18" 2.65 sec 226.42 M 1.28
18 "double for loop unroll 19" 2.57 sec 233.46 M 1.24
19 "double for loop unroll 20" 2.86 sec 209.79 M 1.38
20 "double for loop unroll 21" 2.90 sec 206.90 M 1.40
21 "double for loop unroll 22" 2.83 sec 212.01 M 1.37
22 "double for loop unroll 23" 2.72 sec 220.59 M 1.31
23 "double for loop unroll 24" 2.92 sec 205.48 M 1.41
24 "double for loop unroll 25" 2.91 sec 206.19 M 1.41
25 "double for loop unroll 26" 2.97 sec 202.02 M 1.43
26 "double for loop unroll 27" 2.97 sec 202.02 M 1.43
27 "double for loop unroll 28" 2.91 sec 206.19 M 1.41
28 "double for loop unroll 29" 2.85 sec 210.53 M 1.38
29 "double for loop unroll 30" 2.97 sec 202.02 M 1.43
30 "double for loop unroll 31" 2.99 sec 200.67 M 1.44
31 "double for loop unroll 32" 2.95 sec 203.39 M 1.43
Total absolute time for double for loop unrolling: 85.00 sec
test description absolute operations ratio with
number time per second test0
0 "double while loop unroll 1" 2.07 sec 289.86 M 1.00
1 "double while loop unroll 2" 2.11 sec 284.36 M 1.02
2 "double while loop unroll 3" 2.07 sec 289.86 M 1.00
3 "double while loop unroll 4" 2.60 sec 230.77 M 1.26
4 "double while loop unroll 5" 2.64 sec 227.27 M 1.28
5 "double while loop unroll 6" 2.49 sec 240.96 M 1.20
6 "double while loop unroll 7" 2.33 sec 257.51 M 1.13
7 "double while loop unroll 8" 2.69 sec 223.05 M 1.30
8 "double while loop unroll 9" 2.68 sec 223.88 M 1.29
9 "double while loop unroll 10" 2.52 sec 238.10 M 1.22
10 "double while loop unroll 11" 2.45 sec 244.90 M 1.18
11 "double while loop unroll 12" 2.35 sec 255.32 M 1.14
12 "double while loop unroll 13" 2.62 sec 229.01 M 1.27
13 "double while loop unroll 14" 2.65 sec 226.42 M 1.28
14 "double while loop unroll 15" 2.61 sec 229.89 M 1.26
15 "double while loop unroll 16" 2.52 sec 238.10 M 1.22
16 "double while loop unroll 17" 2.62 sec 229.01 M 1.27
17 "double while loop unroll 18" 2.64 sec 227.27 M 1.28
18 "double while loop unroll 19" 2.58 sec 232.56 M 1.25
19 "double while loop unroll 20" 2.86 sec 209.79 M 1.38
20 "double while loop unroll 21" 2.90 sec 206.90 M 1.40
21 "double while loop unroll 22" 2.82 sec 212.77 M 1.36
22 "double while loop unroll 23" 2.73 sec 219.78 M 1.32
23 "double while loop unroll 24" 2.92 sec 205.48 M 1.41
24 "double while loop unroll 25" 2.91 sec 206.19 M 1.41
25 "double while loop unroll 26" 2.97 sec 202.02 M 1.43
26 "double while loop unroll 27" 2.98 sec 201.34 M 1.44
27 "double while loop unroll 28" 2.90 sec 206.90 M 1.40
28 "double while loop unroll 29" 2.87 sec 209.06 M 1.39
29 "double while loop unroll 30" 2.99 sec 200.67 M 1.44
30 "double while loop unroll 31" 3.00 sec 200.00 M 1.45
31 "double while loop unroll 32" 2.94 sec 204.08 M 1.42
Total absolute time for double while loop unrolling: 85.03 sec
test description absolute operations ratio with
number time per second test0
0 "double do loop unroll 1" 2.05 sec 292.68 M 1.00
1 "double do loop unroll 2" 2.09 sec 287.08 M 1.02
2 "double do loop unroll 3" 2.07 sec 289.86 M 1.01
3 "double do loop unroll 4" 2.59 sec 231.66 M 1.26
4 "double do loop unroll 5" 2.65 sec 226.42 M 1.29
5 "double do loop unroll 6" 2.46 sec 243.90 M 1.20
6 "double do loop unroll 7" 2.33 sec 257.51 M 1.14
7 "double do loop unroll 8" 2.63 sec 228.14 M 1.28
8 "double do loop unroll 9" 2.68 sec 223.88 M 1.31
9 "double do loop unroll 10" 2.52 sec 238.10 M 1.23
10 "double do loop unroll 11" 2.45 sec 244.90 M 1.20
11 "double do loop unroll 12" 2.32 sec 258.62 M 1.13
12 "double do loop unroll 13" 2.60 sec 230.77 M 1.27
13 "double do loop unroll 14" 2.64 sec 227.27 M 1.29
14 "double do loop unroll 15" 2.61 sec 229.89 M 1.27
15 "double do loop unroll 16" 2.52 sec 238.10 M 1.23
16 "double do loop unroll 17" 2.62 sec 229.01 M 1.28
17 "double do loop unroll 18" 2.65 sec 226.42 M 1.29
18 "double do loop unroll 19" 2.57 sec 233.46 M 1.25
19 "double do loop unroll 20" 2.80 sec 214.29 M 1.37
20 "double do loop unroll 21" 2.90 sec 206.90 M 1.41
21 "double do loop unroll 22" 2.82 sec 212.77 M 1.38
22 "double do loop unroll 23" 2.73 sec 219.78 M 1.33
23 "double do loop unroll 24" 2.91 sec 206.19 M 1.42
24 "double do loop unroll 25" 2.91 sec 206.19 M 1.42
25 "double do loop unroll 26" 2.94 sec 204.08 M 1.43
26 "double do loop unroll 27" 2.97 sec 202.02 M 1.45
27 "double do loop unroll 28" 2.93 sec 204.78 M 1.43
28 "double do loop unroll 29" 2.70 sec 222.22 M 1.32
29 "double do loop unroll 30" 2.94 sec 204.08 M 1.43
30 "double do loop unroll 31" 2.98 sec 201.34 M 1.45
31 "double do loop unroll 32" 2.93 sec 204.78 M 1.43
Total absolute time for double do loop unrolling: 84.51 sec
test description absolute operations ratio with
number time per second test0
0 "double goto loop unroll 1" 2.05 sec 292.68 M 1.00
1 "double goto loop unroll 2" 2.09 sec 287.08 M 1.02
2 "double goto loop unroll 3" 2.07 sec 289.86 M 1.01
3 "double goto loop unroll 4" 2.60 sec 230.77 M 1.27
4 "double goto loop unroll 5" 2.64 sec 227.27 M 1.29
5 "double goto loop unroll 6" 2.47 sec 242.91 M 1.20
6 "double goto loop unroll 7" 2.33 sec 257.51 M 1.14
7 "double goto loop unroll 8" 2.63 sec 228.14 M 1.28
8 "double goto loop unroll 9" 2.67 sec 224.72 M 1.30
9 "double goto loop unroll 10" 2.53 sec 237.15 M 1.23
10 "double goto loop unroll 11" 2.45 sec 244.90 M 1.20
11 "double goto loop unroll 12" 2.32 sec 258.62 M 1.13
12 "double goto loop unroll 13" 2.60 sec 230.77 M 1.27
13 "double goto loop unroll 14" 2.63 sec 228.14 M 1.28
14 "double goto loop unroll 15" 2.62 sec 229.01 M 1.28
15 "double goto loop unroll 16" 2.52 sec 238.10 M 1.23
16 "double goto loop unroll 17" 2.62 sec 229.01 M 1.28
17 "double goto loop unroll 18" 2.64 sec 227.27 M 1.29
18 "double goto loop unroll 19" 2.57 sec 233.46 M 1.25
19 "double goto loop unroll 20" 2.80 sec 214.29 M 1.37
20 "double goto loop unroll 21" 2.91 sec 206.19 M 1.42
21 "double goto loop unroll 22" 2.82 sec 212.77 M 1.38
22 "double goto loop unroll 23" 2.73 sec 219.78 M 1.33
23 "double goto loop unroll 24" 2.91 sec 206.19 M 1.42
24 "double goto loop unroll 25" 2.90 sec 206.90 M 1.41
25 "double goto loop unroll 26" 2.96 sec 202.70 M 1.44
26 "double goto loop unroll 27" 2.99 sec 200.67 M 1.46
27 "double goto loop unroll 28" 2.93 sec 204.78 M 1.43
28 "double goto loop unroll 29" 2.87 sec 209.06 M 1.40
29 "double goto loop unroll 30" 2.92 sec 205.48 M 1.42
30 "double goto loop unroll 31" 2.98 sec 201.34 M 1.45
31 "double goto loop unroll 32" 2.92 sec 205.48 M 1.42
Total absolute time for double goto loop unrolling: 84.69 sec
Thu Jul 28 13:13:53 PDT 2011
##END Version 1.0
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Performance degradation on g++ 4.6
2011-07-29 18:08 Performance degradation on g++ 4.6 Oleg Smolsky
@ 2011-07-29 18:14 ` Xinliang David Li
2011-07-29 21:08 ` Oleg Smolsky
2011-07-30 9:24 ` Richard Guenther
1 sibling, 1 reply; 22+ messages in thread
From: Xinliang David Li @ 2011-07-29 18:14 UTC (permalink / raw)
To: Oleg Smolsky; +Cc: gcc
My guess is inlining differences. Try more aggressive inline
parameters to see if helps. Also try FDO to see there is any
performance difference between two versions. You will probably need to
do first level triage and file bug reports.
David
On Fri, Jul 29, 2011 at 10:56 AM, Oleg Smolsky
<oleg.smolsky@riverbed.com> wrote:
> Hi there, I have compiled and run a set of C++ benchmarks on a CentOS4/64
> box using the following compilers:
> a) g++4.1 that is available for this distro (GCC version 4.1.2 20071124
> (Red Hat 4.1.2-42)
> b) g++4.6 that I built (stock version 4.6.1)
>
> The machine has two Intel quad core processors in x86_64 mode (/proc/cpuinfo
> attached)
>
> Benchmarks were taken from this page:
> http://stlab.adobe.com/performance/
>
> Results:
> - some of these tests showed 20..30% performance degradation
> (eg the second section in the simple_types_constant_folding test: 30s
> -> 44s)
> - a few were quicker
> - full reports are attached
>
> I would assume that performance of the generated code is closely monitored
> by the dev community and obvious blunders should not sneak in... However, my
> findings are reproducible with these synthetic benchmarks as well as
> production code at work. The latter shows approximately 25% degradation on
> CPU bound tests.
>
> Is there a trick to building the compiler or using a specific -mtune/-march
> flag for my CPU? I built the compiler with all the default options (it just
> has a distinct installation path):
> ../gcc-%{version}/configure --prefix=/work/tools/gcc46
> --enable-languages=c,c++ --with-system-zlib --with-mpfr=/work/tools/mpfr24
> --with-gmp=/work/tools/gmp --with-mpc=/work/tools/mpc
> LD_LIBRARY_PATH=/work/tools/mpfr/lib24:/work/tools/gmp/lib:/work/tools/mpc/lib
>
> Are there any published benchmarks? I'd appreciate any advice or pointers.
>
> Thanks in advance,
> Oleg.
>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Performance degradation on g++ 4.6
2011-07-29 18:14 ` Xinliang David Li
@ 2011-07-29 21:08 ` Oleg Smolsky
2011-07-29 21:29 ` Xinliang David Li
0 siblings, 1 reply; 22+ messages in thread
From: Oleg Smolsky @ 2011-07-29 21:08 UTC (permalink / raw)
To: Xinliang David Li; +Cc: gcc
Hey David, here are a couple of answers and notes:
- I built the test suite with -O3 and cannot see anything else
related to inlining that isn't already ON (except for -finline-limit=n
which I do not how to use)
http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
- FTO looks like a very different kettle of fish, I'd prefer to
leave it aside to limit the number of data points (at least for the
initial investigation)
- I've just rerun the suite with -flto and there are no significant
differences in performance
What else is there?
Oleg.
On 2011/7/29 11:07, Xinliang David Li wrote:
> My guess is inlining differences. Try more aggressive inline
> parameters to see if helps. Also try FDO to see there is any
> performance difference between two versions. You will probably need to
> do first level triage and file bug reports.
>
> David
>
>
> On Fri, Jul 29, 2011 at 10:56 AM, Oleg Smolsky
> <oleg.smolsky@riverbed.com> wrote:
>> Hi there, I have compiled and run a set of C++ benchmarks on a CentOS4/64
>> box using the following compilers:
>> a) g++4.1 that is available for this distro (GCC version 4.1.2 20071124
>> (Red Hat 4.1.2-42)
>> b) g++4.6 that I built (stock version 4.6.1)
>>
>> The machine has two Intel quad core processors in x86_64 mode (/proc/cpuinfo
>> attached)
>>
>> Benchmarks were taken from this page:
>> http://stlab.adobe.com/performance/
>>
>> Results:
>> - some of these tests showed 20..30% performance degradation
>> (eg the second section in the simple_types_constant_folding test: 30s
>> -> 44s)
>> - a few were quicker
>> - full reports are attached
>>
>> I would assume that performance of the generated code is closely monitored
>> by the dev community and obvious blunders should not sneak in... However, my
>> findings are reproducible with these synthetic benchmarks as well as
>> production code at work. The latter shows approximately 25% degradation on
>> CPU bound tests.
>>
>> Is there a trick to building the compiler or using a specific -mtune/-march
>> flag for my CPU? I built the compiler with all the default options (it just
>> has a distinct installation path):
>> ../gcc-%{version}/configure --prefix=/work/tools/gcc46
>> --enable-languages=c,c++ --with-system-zlib --with-mpfr=/work/tools/mpfr24
>> --with-gmp=/work/tools/gmp --with-mpc=/work/tools/mpc
>> LD_LIBRARY_PATH=/work/tools/mpfr/lib24:/work/tools/gmp/lib:/work/tools/mpc/lib
>>
>> Are there any published benchmarks? I'd appreciate any advice or pointers.
>>
>> Thanks in advance,
>> Oleg.
>>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Performance degradation on g++ 4.6
2011-07-29 21:08 ` Oleg Smolsky
@ 2011-07-29 21:29 ` Xinliang David Li
2011-08-01 18:44 ` Oleg Smolsky
0 siblings, 1 reply; 22+ messages in thread
From: Xinliang David Li @ 2011-07-29 21:29 UTC (permalink / raw)
To: Oleg Smolsky; +Cc: gcc
On Fri, Jul 29, 2011 at 11:57 AM, Oleg Smolsky
<oleg.smolsky@riverbed.com> wrote:
> Hey David, here are a couple of answers and notes:
> - I built the test suite with -O3 and cannot see anything else related to
> inlining that isn't already ON (except for -finline-limit=n which I do not
> how to use)
size estimation, inline heuristics are different between two versions,
so it won't be surprising they make different decisions.
Profiling tools are your best friend here. If you don't have access to
any, the least you can do is to build the program with -pg option and
use gprof tool to find out differences.
David
> http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
> - FTO looks like a very different kettle of fish, I'd prefer to leave it
> aside to limit the number of data points (at least for the initial
> investigation)
> - I've just rerun the suite with -flto and there are no significant
> differences in performance
>
> What else is there?
>
> Oleg.
>
> On 2011/7/29 11:07, Xinliang David Li wrote:
>>
>> My guess is inlining differences. Try more aggressive inline
>> parameters to see if helps. Also try FDO to see there is any
>> performance difference between two versions. You will probably need to
>> do first level triage and file bug reports.
>>
>> David
>>
>>
>> On Fri, Jul 29, 2011 at 10:56 AM, Oleg Smolsky
>> <oleg.smolsky@riverbed.com> wrote:
>>>
>>> Hi there, I have compiled and run a set of C++ benchmarks on a CentOS4/64
>>> box using the following compilers:
>>> a) g++4.1 that is available for this distro (GCC version 4.1.2
>>> 20071124
>>> (Red Hat 4.1.2-42)
>>> b) g++4.6 that I built (stock version 4.6.1)
>>>
>>> The machine has two Intel quad core processors in x86_64 mode
>>> (/proc/cpuinfo
>>> attached)
>>>
>>> Benchmarks were taken from this page:
>>> http://stlab.adobe.com/performance/
>>>
>>> Results:
>>> - some of these tests showed 20..30% performance degradation
>>> (eg the second section in the simple_types_constant_folding test:
>>> 30s
>>> -> 44s)
>>> - a few were quicker
>>> - full reports are attached
>>>
>>> I would assume that performance of the generated code is closely
>>> monitored
>>> by the dev community and obvious blunders should not sneak in... However,
>>> my
>>> findings are reproducible with these synthetic benchmarks as well as
>>> production code at work. The latter shows approximately 25% degradation
>>> on
>>> CPU bound tests.
>>>
>>> Is there a trick to building the compiler or using a specific
>>> -mtune/-march
>>> flag for my CPU? I built the compiler with all the default options (it
>>> just
>>> has a distinct installation path):
>>> ../gcc-%{version}/configure --prefix=/work/tools/gcc46
>>> --enable-languages=c,c++ --with-system-zlib
>>> --with-mpfr=/work/tools/mpfr24
>>> --with-gmp=/work/tools/gmp --with-mpc=/work/tools/mpc
>>>
>>> LD_LIBRARY_PATH=/work/tools/mpfr/lib24:/work/tools/gmp/lib:/work/tools/mpc/lib
>>>
>>> Are there any published benchmarks? I'd appreciate any advice or
>>> pointers.
>>>
>>> Thanks in advance,
>>> Oleg.
>>>
>
>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Performance degradation on g++ 4.6
2011-07-29 18:08 Performance degradation on g++ 4.6 Oleg Smolsky
2011-07-29 18:14 ` Xinliang David Li
@ 2011-07-30 9:24 ` Richard Guenther
1 sibling, 0 replies; 22+ messages in thread
From: Richard Guenther @ 2011-07-30 9:24 UTC (permalink / raw)
To: Oleg Smolsky; +Cc: gcc
On Fri, Jul 29, 2011 at 7:56 PM, Oleg Smolsky <oleg.smolsky@riverbed.com> wrote:
> Hi there, I have compiled and run a set of C++ benchmarks on a CentOS4/64
> box using the following compilers:
> a) g++4.1 that is available for this distro (GCC version 4.1.2 20071124
> (Red Hat 4.1.2-42)
> b) g++4.6 that I built (stock version 4.6.1)
>
> The machine has two Intel quad core processors in x86_64 mode (/proc/cpuinfo
> attached)
>
> Benchmarks were taken from this page:
> http://stlab.adobe.com/performance/
>
> Results:
> - some of these tests showed 20..30% performance degradation
> (eg the second section in the simple_types_constant_folding test: 30s
> -> 44s)
> - a few were quicker
> - full reports are attached
>
> I would assume that performance of the generated code is closely monitored
> by the dev community and obvious blunders should not sneak in... However, my
> findings are reproducible with these synthetic benchmarks as well as
> production code at work. The latter shows approximately 25% degradation on
> CPU bound tests.
We do monitor quite an extensive set of benchmarks - but as always certain kind
of applications may slip through - I'll have a look at the mentioned benchmark
and see whether it's easy to integrate with our testing at gcc.opensuse.org.
Richard.
> Is there a trick to building the compiler or using a specific -mtune/-march
> flag for my CPU? I built the compiler with all the default options (it just
> has a distinct installation path):
> ../gcc-%{version}/configure --prefix=/work/tools/gcc46
> --enable-languages=c,c++ --with-system-zlib --with-mpfr=/work/tools/mpfr24
> --with-gmp=/work/tools/gmp --with-mpc=/work/tools/mpc
> LD_LIBRARY_PATH=/work/tools/mpfr/lib24:/work/tools/gmp/lib:/work/tools/mpc/lib
>
> Are there any published benchmarks? I'd appreciate any advice or pointers.
>
> Thanks in advance,
> Oleg.
>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Performance degradation on g++ 4.6
2011-07-29 21:29 ` Xinliang David Li
@ 2011-08-01 18:44 ` Oleg Smolsky
2011-08-02 5:48 ` Xinliang David Li
` (2 more replies)
0 siblings, 3 replies; 22+ messages in thread
From: Oleg Smolsky @ 2011-08-01 18:44 UTC (permalink / raw)
To: Xinliang David Li; +Cc: gcc
[-- Attachment #1: Type: text/plain, Size: 898 bytes --]
On 2011/7/29 14:07, Xinliang David Li wrote:
> Profiling tools are your best friend here. If you don't have access to
> any, the least you can do is to build the program with -pg option and
> use gprof tool to find out differences.
The test suite has a bunch of very basic C++ tests that are executed an
enormous number of times. I've built one with the obvious performance
degradation and attached the source, output and reports.
Here are some highlights:
v4.1: Total absolute time for int8_t constant folding: 30.42 sec
v4.6: Total absolute time for int8_t constant folding: 43.32 sec
Every one of the tests in this section had degraded... the first half
more than the second. I am not sure how much further I can take this -
the benchmarked code is very short and plain. I can post disassembly for
one (some?) of them if anyone is willing to take a look...
Thanks,
Oleg.
[-- Attachment #2: gmon41.prof --]
[-- Type: text/plain, Size: 190903 bytes --]
Flat profile:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls s/call s/call name
18.80 98.57 98.57 main
7.21 136.37 37.80 1 37.80 37.80 void test_constant<double, custom_multiple_constant_divide<double> >(double*, int, char const*)
3.97 157.16 20.79 1 20.79 20.79 void test_constant<float, custom_multiple_constant_divide<float> >(float*, int, char const*)
3.60 176.05 18.88 1 18.88 18.88 void test_constant<double, custom_constant_divide<double> >(double*, int, char const*)
3.50 194.39 18.34 1 18.34 18.34 void test_constant<double, custom_add_constants<double> >(double*, int, char const*)
3.50 212.72 18.33 1 18.33 18.33 void test_constant<float, custom_add_constants<float> >(float*, int, char const*)
3.49 230.99 18.27 1 18.27 18.27 void test_constant<float, custom_divide_constants<float> >(float*, int, char const*)
3.49 249.26 18.27 1 18.27 18.27 void test_constant<double, custom_multiply_constants<double> >(double*, int, char const*)
3.49 267.53 18.27 1 18.27 18.27 void test_constant<float, custom_sub_constants<float> >(float*, int, char const*)
3.49 285.81 18.27 1 18.27 18.27 void test_constant<float, custom_multiply_constants<float> >(float*, int, char const*)
3.49 304.08 18.27 1 18.27 18.27 void test_constant<double, custom_two<double> >(double*, int, char const*)
3.49 322.35 18.27 1 18.27 18.27 void test_constant<double, custom_sub_constants<double> >(double*, int, char const*)
3.48 340.61 18.26 1 18.26 18.26 void test_constant<double, custom_divide_constants<double> >(double*, int, char const*)
1.99 351.03 10.42 1 10.42 10.42 void test_constant<float, custom_constant_divide<float> >(float*, int, char const*)
0.67 354.53 3.50 1 3.50 3.50 void test_constant<int, custom_multiple_constant_divide<int> >(int*, int, char const*)
0.65 357.96 3.43 1 3.43 3.43 void test_constant<long, custom_multiple_constant_divide<long> >(long*, int, char const*)
0.62 361.19 3.23 1 3.23 3.23 void test_constant<int, custom_constant_divide<int> >(int*, int, char const*)
0.61 364.40 3.21 1 3.21 3.21 void test_constant<double, custom_multiple_constant_sub<double> >(double*, int, char const*)
0.61 367.60 3.20 1 3.20 3.20 void test_constant<double, custom_multiple_constant_add<double> >(double*, int, char const*)
0.59 370.70 3.10 1 3.10 3.10 void test_constant<long, custom_constant_divide<long> >(long*, int, char const*)
0.59 373.77 3.07 1 3.07 3.07 void test_constant<float, custom_multiple_constant_sub<float> >(float*, int, char const*)
0.58 376.83 3.06 1 3.06 3.06 void test_constant<float, custom_multiple_constant_add<float> >(float*, int, char const*)
0.50 379.46 2.63 1 2.63 2.63 void test_constant<double, custom_multiple_constant_multiply<double> >(double*, int, char const*)
0.48 381.99 2.52 1 2.52 2.52 void test_constant<unsigned int, custom_constant_divide<unsigned int> >(unsigned int*, int, char const*)
0.48 384.51 2.52 1 2.52 2.52 void test_constant<unsigned int, custom_multiple_constant_divide<unsigned int> >(unsigned int*, int, char const*)
0.47 386.97 2.46 1 2.46 2.46 void test_constant<float, custom_multiple_constant_multiply<float> >(float*, int, char const*)
0.47 389.41 2.44 1 2.44 2.44 void test_constant<unsigned long, custom_constant_divide<unsigned long> >(unsigned long*, int, char const*)
0.46 391.84 2.43 1 2.43 2.43 void test_constant<unsigned long, custom_multiple_constant_divide<unsigned long> >(unsigned long*, int, char const*)
0.36 393.73 1.89 1 1.89 1.89 void test_constant<double, custom_multiple_constant_multiply2<double> >(double*, int, char const*)
0.36 395.61 1.88 1 1.88 1.88 void test_constant<double, custom_constant_add<double> >(double*, int, char const*)
0.36 397.49 1.88 1 1.88 1.88 void test_constant<double, custom_constant_sub<double> >(double*, int, char const*)
0.36 399.37 1.88 1 1.88 1.88 void test_constant<double, custom_multiple_constant_divide2<double> >(double*, int, char const*)
0.35 401.22 1.85 1 1.85 1.85 void test_constant<double, custom_constant_multiply<double> >(double*, int, char const*)
0.35 403.07 1.85 1 1.85 1.85 void test_constant<float, custom_constant_multiply<float> >(float*, int, char const*)
0.35 404.92 1.85 1 1.85 1.85 void test_constant<long, custom_multiple_constant_multiply<long> >(long*, int, char const*)
0.35 406.77 1.85 1 1.85 1.85 void test_constant<unsigned short, custom_multiple_constant_multiply<unsigned short> >(unsigned short*, int, char const*)
0.35 408.62 1.85 1 1.85 1.85 void test_constant<unsigned short, custom_constant_multiply<unsigned short> >(unsigned short*, int, char const*)
0.35 410.46 1.84 1 1.84 1.84 void test_constant<float, custom_constant_sub<float> >(float*, int, char const*)
0.35 412.30 1.84 1 1.84 1.84 void test_constant<float, custom_multiple_constant_mixed<float> >(float*, int, char const*)
0.35 414.14 1.84 1 1.84 1.84 void test_constant<long, custom_constant_multiply<long> >(long*, int, char const*)
0.35 415.98 1.84 1 1.84 1.84 void test_constant<unsigned long, custom_constant_multiply<unsigned long> >(unsigned long*, int, char const*)
0.35 417.81 1.83 1 1.83 1.83 void test_constant<float, custom_constant_add<float> >(float*, int, char const*)
0.35 419.64 1.83 1 1.83 1.83 void test_constant<float, custom_multiple_constant_multiply2<float> >(float*, int, char const*)
0.35 421.47 1.83 1 1.83 1.83 void test_constant<unsigned long, custom_multiple_constant_multiply<unsigned long> >(unsigned long*, int, char const*)
0.35 423.29 1.82 1 1.82 1.82 void test_constant<float, custom_multiple_constant_divide2<float> >(float*, int, char const*)
0.34 425.08 1.79 1 1.79 1.79 void test_constant<unsigned short, custom_multiple_constant_divide<unsigned short> >(unsigned short*, int, char const*)
0.34 426.86 1.78 1 1.78 1.78 void test_constant<unsigned short, custom_constant_divide<unsigned short> >(unsigned short*, int, char const*)
0.34 428.63 1.77 1 1.77 1.77 void test_constant<int, custom_constant_multiply<int> >(int*, int, char const*)
0.34 430.40 1.77 1 1.77 1.77 void test_constant<unsigned int, custom_constant_multiply<unsigned int> >(unsigned int*, int, char const*)
0.34 432.16 1.76 1 1.76 1.76 void test_constant<int, custom_multiple_constant_multiply<int> >(int*, int, char const*)
0.34 433.92 1.76 1 1.76 1.76 void test_constant<unsigned int, custom_multiple_constant_multiply<unsigned int> >(unsigned int*, int, char const*)
0.27 435.35 1.43 1 1.43 1.43 void test_constant<long, custom_constant_and<long> >(long*, int, char const*)
0.27 436.78 1.43 1 1.43 1.43 void test_constant<long, custom_constant_xor<long> >(long*, int, char const*)
0.27 438.21 1.43 1 1.43 1.43 void test_constant<unsigned long, custom_constant_xor<unsigned long> >(unsigned long*, int, char const*)
0.27 439.64 1.43 1 1.43 1.43 void test_constant<unsigned long, custom_multiple_constant_divide2<unsigned long> >(unsigned long*, int, char const*)
0.27 441.07 1.43 1 1.43 1.43 void test_constant<long, custom_constant_or<long> >(long*, int, char const*)
0.27 442.50 1.43 1 1.43 1.43 void test_constant<long, custom_constant_add<long> >(long*, int, char const*)
0.27 443.93 1.43 1 1.43 1.43 void test_constant<long, custom_multiple_constant_add<long> >(long*, int, char const*)
0.27 445.36 1.43 1 1.43 1.43 void test_constant<long, custom_multiple_constant_xor<long> >(long*, int, char const*)
0.27 446.79 1.43 1 1.43 1.43 void test_constant<long, custom_multiple_constant_divide2<long> >(long*, int, char const*)
0.27 448.22 1.43 1 1.43 1.43 void test_constant<long, custom_multiple_constant_multiply2<long> >(long*, int, char const*)
0.27 449.65 1.43 1 1.43 1.43 void test_constant<unsigned long, custom_constant_and<unsigned long> >(unsigned long*, int, char const*)
0.27 451.08 1.43 1 1.43 1.43 void test_constant<unsigned long, custom_multiple_constant_or<unsigned long> >(unsigned long*, int, char const*)
0.27 452.51 1.43 1 1.43 1.43 void test_constant<unsigned long, custom_multiple_constant_add<unsigned long> >(unsigned long*, int, char const*)
0.27 453.94 1.43 1 1.43 1.43 void test_constant<unsigned long, custom_multiple_constant_and<unsigned long> >(unsigned long*, int, char const*)
0.27 455.37 1.43 1 1.43 1.43 void test_constant<unsigned long, custom_multiple_constant_multiply2<unsigned long> >(unsigned long*, int, char const*)
0.27 456.80 1.43 1 1.43 1.43 void test_constant<long, custom_multiple_constant_sub<long> >(long*, int, char const*)
0.27 458.23 1.43 1 1.43 1.43 void test_constant<unsigned long, custom_constant_sub<unsigned long> >(unsigned long*, int, char const*)
0.27 459.65 1.42 1 1.42 1.42 void test_constant<long, custom_constant_sub<long> >(long*, int, char const*)
0.27 461.07 1.42 1 1.42 1.42 void test_constant<unsigned long, custom_multiple_constant_xor<unsigned long> >(unsigned long*, int, char const*)
0.27 462.49 1.42 1 1.42 1.42 void test_constant<long, custom_multiple_constant_or<long> >(long*, int, char const*)
0.27 463.91 1.42 1 1.42 1.42 void test_constant<long, custom_multiple_constant_and<long> >(long*, int, char const*)
0.27 465.33 1.42 1 1.42 1.42 void test_constant<unsigned long, custom_constant_or<unsigned long> >(unsigned long*, int, char const*)
0.27 466.75 1.42 1 1.42 1.42 void test_constant<unsigned long, custom_constant_add<unsigned long> >(unsigned long*, int, char const*)
0.27 468.17 1.42 1 1.42 1.42 void test_constant<unsigned long, custom_multiple_constant_sub<unsigned long> >(unsigned long*, int, char const*)
0.27 469.57 1.40 1 1.40 1.40 void test_constant<unsigned short, custom_multiple_constant_or<unsigned short> >(unsigned short*, int, char const*)
0.27 470.97 1.40 1 1.40 1.40 void test_constant<unsigned short, custom_multiple_constant_divide2<unsigned short> >(unsigned short*, int, char const*)
0.27 472.36 1.39 1 1.39 1.39 void test_constant<unsigned short, custom_constant_add<unsigned short> >(unsigned short*, int, char const*)
0.27 473.75 1.39 1 1.39 1.39 void test_constant<unsigned short, custom_constant_and<unsigned short> >(unsigned short*, int, char const*)
0.27 475.14 1.39 1 1.39 1.39 void test_constant<unsigned short, custom_constant_sub<unsigned short> >(unsigned short*, int, char const*)
0.27 476.53 1.39 1 1.39 1.39 void test_constant<unsigned short, custom_multiple_constant_xor<unsigned short> >(unsigned short*, int, char const*)
0.27 477.92 1.39 1 1.39 1.39 void test_constant<unsigned short, custom_constant_or<unsigned short> >(unsigned short*, int, char const*)
0.27 479.31 1.39 1 1.39 1.39 void test_constant<unsigned short, custom_multiple_constant_and<unsigned short> >(unsigned short*, int, char const*)
0.26 480.69 1.38 1 1.38 1.38 void test_constant<int, custom_constant_or<int> >(int*, int, char const*)
0.26 482.07 1.38 1 1.38 1.38 void test_constant<int, custom_constant_and<int> >(int*, int, char const*)
0.26 483.45 1.38 1 1.38 1.38 void test_constant<int, custom_constant_sub<int> >(int*, int, char const*)
0.26 484.83 1.38 1 1.38 1.38 void test_constant<int, custom_multiple_constant_xor<int> >(int*, int, char const*)
0.26 486.21 1.38 1 1.38 1.38 void test_constant<unsigned int, custom_constant_sub<unsigned int> >(unsigned int*, int, char const*)
0.26 487.59 1.38 1 1.38 1.38 void test_constant<unsigned int, custom_multiple_constant_or<unsigned int> >(unsigned int*, int, char const*)
0.26 488.97 1.38 1 1.38 1.38 void test_constant<unsigned int, custom_multiple_constant_and<unsigned int> >(unsigned int*, int, char const*)
0.26 490.35 1.38 1 1.38 1.38 void test_constant<unsigned int, custom_multiple_constant_xor<unsigned int> >(unsigned int*, int, char const*)
0.26 491.74 1.38 1 1.38 1.38 void test_constant<unsigned int, custom_multiple_constant_multiply2<unsigned int> >(unsigned int*, int, char const*)
0.26 493.12 1.38 1 1.38 1.38 void test_constant<unsigned short, custom_constant_xor<unsigned short> >(unsigned short*, int, char const*)
0.26 494.50 1.38 1 1.38 1.38 void test_constant<unsigned short, custom_multiple_constant_add<unsigned short> >(unsigned short*, int, char const*)
0.26 495.88 1.38 1 1.38 1.38 void test_constant<unsigned short, custom_multiple_constant_sub<unsigned short> >(unsigned short*, int, char const*)
0.26 497.26 1.38 1 1.38 1.38 void test_constant<unsigned short, custom_multiple_constant_multiply2<unsigned short> >(unsigned short*, int, char const*)
0.26 498.64 1.38 1 1.38 1.38 void test_constant<int, custom_multiple_constant_multiply2<int> >(int*, int, char const*)
0.26 500.01 1.37 1 1.37 1.37 void test_constant<int, custom_constant_add<int> >(int*, int, char const*)
0.26 501.38 1.37 1 1.37 1.37 void test_constant<int, custom_constant_xor<int> >(int*, int, char const*)
0.26 502.75 1.37 1 1.37 1.37 void test_constant<int, custom_multiple_constant_or<int> >(int*, int, char const*)
0.26 504.12 1.37 1 1.37 1.37 void test_constant<int, custom_multiple_constant_add<int> >(int*, int, char const*)
0.26 505.49 1.37 1 1.37 1.37 void test_constant<unsigned int, custom_constant_or<unsigned int> >(unsigned int*, int, char const*)
0.26 506.86 1.37 1 1.37 1.37 void test_constant<unsigned int, custom_constant_add<unsigned int> >(unsigned int*, int, char const*)
0.26 508.23 1.37 1 1.37 1.37 void test_constant<unsigned int, custom_multiple_constant_add<unsigned int> >(unsigned int*, int, char const*)
0.26 509.60 1.37 1 1.37 1.37 void test_constant<unsigned int, custom_multiple_constant_sub<unsigned int> >(unsigned int*, int, char const*)
0.26 510.97 1.37 1 1.37 1.37 void test_constant<unsigned int, custom_multiple_constant_divide2<unsigned int> >(unsigned int*, int, char const*)
0.26 512.34 1.37 1 1.37 1.37 void test_constant<int, custom_multiple_constant_and<int> >(int*, int, char const*)
0.26 513.71 1.37 1 1.37 1.37 void test_constant<int, custom_multiple_constant_sub<int> >(int*, int, char const*)
0.26 515.08 1.37 1 1.37 1.37 void test_constant<int, custom_multiple_constant_divide2<int> >(int*, int, char const*)
0.26 516.45 1.37 1 1.37 1.37 void test_constant<unsigned int, custom_constant_and<unsigned int> >(unsigned int*, int, char const*)
0.26 517.82 1.37 1 1.37 1.37 void test_constant<unsigned int, custom_constant_xor<unsigned int> >(unsigned int*, int, char const*)
0.23 519.05 1.23 1 1.23 1.23 void test_constant<unsigned short, custom_multiple_constant_mixed<unsigned short> >(unsigned short*, int, char const*)
0.23 520.27 1.22 1 1.22 1.22 void test_constant<long, custom_multiple_constant_mixed<long> >(long*, int, char const*)
0.23 521.49 1.22 1 1.22 1.22 void test_constant<int, custom_multiple_constant_mixed<int> >(int*, int, char const*)
0.23 522.71 1.22 1 1.22 1.22 void test_constant<unsigned int, custom_multiple_constant_mixed<unsigned int> >(unsigned int*, int, char const*)
0.23 523.93 1.22 1 1.22 1.22 void test_constant<unsigned long, custom_multiple_constant_mixed<unsigned long> >(unsigned long*, int, char const*)
0.00 523.95 0.02 2000000 0.00 0.00 void check_shifted_sum<short, custom_notequal_constants<short> >(short)
0.00 523.97 0.02 200000 0.00 0.00 void check_shifted_sum<signed char, custom_multiple_constant_divide<signed char> >(signed char)
0.00 523.98 0.01 2000000 0.00 0.00 void check_shifted_sum<signed char, custom_or_constants<signed char> >(signed char)
0.00 523.99 0.01 2000000 0.00 0.00 void check_shifted_sum<signed char, custom_and_constants<signed char> >(signed char)
0.00 524.00 0.01 2000000 0.00 0.00 void check_shifted_sum<signed char, custom_lessthan_constants<signed char> >(signed char)
0.00 524.01 0.01 2000000 0.00 0.00 void check_shifted_sum<signed char, custom_multiply_constants<signed char> >(signed char)
0.00 524.02 0.01 2000000 0.00 0.00 void check_shifted_sum<signed char, custom_notequal_constants<signed char> >(signed char)
0.00 524.03 0.01 2000000 0.00 0.00 void check_shifted_sum<signed char, custom_lessthanequal_constants<signed char> >(signed char)
0.00 524.04 0.01 2000000 0.00 0.00 void check_shifted_sum<unsigned char, custom_or_constants<unsigned char> >(unsigned char)
0.00 524.05 0.01 2000000 0.00 0.00 void check_shifted_sum<unsigned char, custom_lessthanequal_constants<unsigned char> >(unsigned char)
0.00 524.06 0.01 2000000 0.00 0.00 void check_shifted_sum<short, custom_two<short> >(short)
0.00 524.07 0.01 2000000 0.00 0.00 void check_shifted_sum<short, custom_or_constants<short> >(short)
0.00 524.08 0.01 2000000 0.00 0.00 void check_shifted_sum<short, custom_mod_constants<short> >(short)
0.00 524.09 0.01 2000000 0.00 0.00 void check_shifted_sum<short, custom_lessthan_constants<short> >(short)
0.00 524.10 0.01 2000000 0.00 0.00 void check_shifted_sum<short, custom_greaterthanequal_constants<short> >(short)
0.00 524.11 0.01 2000000 0.00 0.00 void check_shifted_sum<unsigned short, custom_mod_constants<unsigned short> >(unsigned short)
0.00 524.12 0.01 2000000 0.00 0.00 void check_shifted_sum<unsigned short, custom_lessthan_constants<unsigned short> >(unsigned short)
0.00 524.13 0.01 2000000 0.00 0.00 void check_shifted_sum<unsigned short, custom_notequal_constants<unsigned short> >(unsigned short)
0.00 524.14 0.01 2000000 0.00 0.00 void check_shifted_sum<unsigned short, custom_greaterthan_constants<unsigned short> >(unsigned short)
0.00 524.15 0.01 2000000 0.00 0.00 void check_shifted_sum<unsigned short, custom_greaterthanequal_constants<unsigned short> >(unsigned short)
0.00 524.16 0.01 200000 0.00 0.00 void check_shifted_sum<signed char, custom_multiple_constant_multiply2<signed char> >(signed char)
0.00 524.17 0.01 200000 0.00 0.00 void check_shifted_sum<double, custom_multiple_constant_mixed<double> >(double)
0.00 524.18 0.01 200000 0.00 0.00 void check_shifted_sum<short, custom_multiple_constant_add<short> >(short)
0.00 524.19 0.01 1 0.01 0.01 void test_constant<int, custom_or_constants<int> >(int*, int, char const*)
0.00 524.20 0.01 1 0.01 0.01 void test_constant<unsigned int, custom_or_constants<unsigned int> >(unsigned int*, int, char const*)
0.00 524.21 0.01 1 0.01 0.01 void test_constant<unsigned long, custom_xor_constants<unsigned long> >(unsigned long*, int, char const*)
0.00 524.21 0.01 2000000 0.00 0.00 void check_shifted_sum<unsigned short, custom_divide_constants<unsigned short> >(unsigned short)
0.00 524.22 0.01 2000000 0.00 0.00 void check_shifted_sum<unsigned short, custom_multiply_constants<unsigned short> >(unsigned short)
0.00 524.22 0.01 200000 0.00 0.00 void check_shifted_sum<short, custom_constant_or<short> >(short)
0.00 524.23 0.01 200000 0.00 0.00 void check_shifted_sum<short, custom_multiple_constant_and<short> >(short)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<signed char, custom_two<signed char> >(signed char)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<signed char, custom_mod_constants<signed char> >(signed char)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<signed char, custom_xor_constants<signed char> >(signed char)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<signed char, custom_equal_constants<signed char> >(signed char)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<signed char, custom_divide_constants<signed char> >(signed char)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<signed char, custom_greaterthan_constants<signed char> >(signed char)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<signed char, custom_greaterthanequal_constants<signed char> >(signed char)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<float, custom_two<float> >(float)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<unsigned char, custom_two<unsigned char> >(unsigned char)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<unsigned char, custom_add_constants<unsigned char> >(unsigned char)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<unsigned char, custom_and_constants<unsigned char> >(unsigned char)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<unsigned char, custom_mod_constants<unsigned char> >(unsigned char)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<unsigned char, custom_sub_constants<unsigned char> >(unsigned char)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<unsigned char, custom_xor_constants<unsigned char> >(unsigned char)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<unsigned char, custom_equal_constants<unsigned char> >(unsigned char)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<unsigned char, custom_divide_constants<unsigned char> >(unsigned char)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<unsigned char, custom_lessthan_constants<unsigned char> >(unsigned char)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<unsigned char, custom_multiply_constants<unsigned char> >(unsigned char)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<unsigned char, custom_notequal_constants<unsigned char> >(unsigned char)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<unsigned char, custom_greaterthan_constants<unsigned char> >(unsigned char)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<unsigned char, custom_greaterthanequal_constants<unsigned char> >(unsigned char)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<unsigned int, custom_two<unsigned int> >(unsigned int)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<short, custom_add_constants<short> >(short)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<short, custom_and_constants<short> >(short)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<short, custom_sub_constants<short> >(short)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<short, custom_xor_constants<short> >(short)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<short, custom_equal_constants<short> >(short)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<short, custom_divide_constants<short> >(short)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<short, custom_multiply_constants<short> >(short)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<short, custom_greaterthan_constants<short> >(short)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<short, custom_lessthanequal_constants<short> >(short)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<unsigned short, custom_two<unsigned short> >(unsigned short)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<unsigned short, custom_add_constants<unsigned short> >(unsigned short)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<unsigned short, custom_sub_constants<unsigned short> >(unsigned short)
0.00 524.23 0.00 2000000 0.00 0.00 void check_shifted_sum<unsigned short, custom_equal_constants<unsigned short> >(unsigned short)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<signed char, custom_constant_or<signed char> >(signed char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<signed char, custom_constant_add<signed char> >(signed char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<signed char, custom_constant_and<signed char> >(signed char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<signed char, custom_constant_sub<signed char> >(signed char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<signed char, custom_constant_xor<signed char> >(signed char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<signed char, custom_constant_divide<signed char> >(signed char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<signed char, custom_constant_multiply<signed char> >(signed char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<signed char, custom_multiple_constant_or<signed char> >(signed char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<signed char, custom_multiple_constant_add<signed char> >(signed char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<signed char, custom_multiple_constant_and<signed char> >(signed char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<signed char, custom_multiple_constant_sub<signed char> >(signed char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<signed char, custom_multiple_constant_xor<signed char> >(signed char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<signed char, custom_multiple_constant_mixed<signed char> >(signed char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<signed char, custom_multiple_constant_divide2<signed char> >(signed char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<signed char, custom_multiple_constant_multiply<signed char> >(signed char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<unsigned char, custom_constant_or<unsigned char> >(unsigned char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<unsigned char, custom_constant_add<unsigned char> >(unsigned char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<unsigned char, custom_constant_and<unsigned char> >(unsigned char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<unsigned char, custom_constant_sub<unsigned char> >(unsigned char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<unsigned char, custom_constant_xor<unsigned char> >(unsigned char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<unsigned char, custom_constant_divide<unsigned char> >(unsigned char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<unsigned char, custom_constant_multiply<unsigned char> >(unsigned char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<unsigned char, custom_multiple_constant_or<unsigned char> >(unsigned char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<unsigned char, custom_multiple_constant_add<unsigned char> >(unsigned char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<unsigned char, custom_multiple_constant_and<unsigned char> >(unsigned char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<unsigned char, custom_multiple_constant_sub<unsigned char> >(unsigned char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<unsigned char, custom_multiple_constant_xor<unsigned char> >(unsigned char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<unsigned char, custom_multiple_constant_mixed<unsigned char> >(unsigned char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<unsigned char, custom_multiple_constant_divide<unsigned char> >(unsigned char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<unsigned char, custom_multiple_constant_divide2<unsigned char> >(unsigned char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<unsigned char, custom_multiple_constant_multiply<unsigned char> >(unsigned char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<unsigned char, custom_multiple_constant_multiply2<unsigned char> >(unsigned char)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<short, custom_constant_add<short> >(short)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<short, custom_constant_and<short> >(short)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<short, custom_constant_sub<short> >(short)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<short, custom_constant_xor<short> >(short)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<short, custom_constant_divide<short> >(short)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<short, custom_constant_multiply<short> >(short)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<short, custom_multiple_constant_or<short> >(short)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<short, custom_multiple_constant_sub<short> >(short)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<short, custom_multiple_constant_xor<short> >(short)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<short, custom_multiple_constant_mixed<short> >(short)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<short, custom_multiple_constant_divide<short> >(short)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<short, custom_multiple_constant_divide2<short> >(short)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<short, custom_multiple_constant_multiply<short> >(short)
0.00 524.23 0.00 200000 0.00 0.00 void check_shifted_sum<short, custom_multiple_constant_multiply2<short> >(short)
0.00 524.23 0.00 110 0.00 0.00 start_timer()
0.00 524.23 0.00 110 0.00 0.00 record_result(double, char const*)
0.00 524.23 0.00 110 0.00 0.00 timer()
0.00 524.23 0.00 20 0.00 0.00 summarize(char const*, int, int, int, int)
0.00 524.23 0.00 1 0.00 0.00 global constructors keyed to results
0.00 524.23 0.00 1 0.00 0.00 void test_constant<int, custom_two<int> >(int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<int, custom_add_constants<int> >(int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<int, custom_and_constants<int> >(int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<int, custom_mod_constants<int> >(int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<int, custom_sub_constants<int> >(int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<int, custom_xor_constants<int> >(int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<int, custom_equal_constants<int> >(int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<int, custom_divide_constants<int> >(int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<int, custom_lessthan_constants<int> >(int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<int, custom_multiply_constants<int> >(int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<int, custom_notequal_constants<int> >(int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<int, custom_greaterthan_constants<int> >(int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<int, custom_lessthanequal_constants<int> >(int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<int, custom_greaterthanequal_constants<int> >(int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned int, custom_add_constants<unsigned int> >(unsigned int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned int, custom_and_constants<unsigned int> >(unsigned int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned int, custom_mod_constants<unsigned int> >(unsigned int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned int, custom_sub_constants<unsigned int> >(unsigned int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned int, custom_xor_constants<unsigned int> >(unsigned int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned int, custom_equal_constants<unsigned int> >(unsigned int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned int, custom_divide_constants<unsigned int> >(unsigned int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned int, custom_lessthan_constants<unsigned int> >(unsigned int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned int, custom_multiply_constants<unsigned int> >(unsigned int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned int, custom_notequal_constants<unsigned int> >(unsigned int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned int, custom_greaterthan_constants<unsigned int> >(unsigned int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned int, custom_lessthanequal_constants<unsigned int> >(unsigned int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned int, custom_greaterthanequal_constants<unsigned int> >(unsigned int*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<long, custom_two<long> >(long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<long, custom_or_constants<long> >(long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<long, custom_add_constants<long> >(long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<long, custom_and_constants<long> >(long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<long, custom_mod_constants<long> >(long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<long, custom_sub_constants<long> >(long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<long, custom_xor_constants<long> >(long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<long, custom_equal_constants<long> >(long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<long, custom_divide_constants<long> >(long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<long, custom_lessthan_constants<long> >(long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<long, custom_multiply_constants<long> >(long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<long, custom_notequal_constants<long> >(long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<long, custom_greaterthan_constants<long> >(long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<long, custom_lessthanequal_constants<long> >(long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<long, custom_greaterthanequal_constants<long> >(long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned long, custom_two<unsigned long> >(unsigned long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned long, custom_or_constants<unsigned long> >(unsigned long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned long, custom_add_constants<unsigned long> >(unsigned long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned long, custom_and_constants<unsigned long> >(unsigned long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned long, custom_mod_constants<unsigned long> >(unsigned long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned long, custom_sub_constants<unsigned long> >(unsigned long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned long, custom_equal_constants<unsigned long> >(unsigned long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned long, custom_divide_constants<unsigned long> >(unsigned long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned long, custom_lessthan_constants<unsigned long> >(unsigned long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned long, custom_multiply_constants<unsigned long> >(unsigned long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned long, custom_notequal_constants<unsigned long> >(unsigned long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned long, custom_greaterthan_constants<unsigned long> >(unsigned long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned long, custom_lessthanequal_constants<unsigned long> >(unsigned long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned long, custom_greaterthanequal_constants<unsigned long> >(unsigned long*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned short, custom_or_constants<unsigned short> >(unsigned short*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned short, custom_and_constants<unsigned short> >(unsigned short*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned short, custom_xor_constants<unsigned short> >(unsigned short*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 void test_constant<unsigned short, custom_lessthanequal_constants<unsigned short> >(unsigned short*, int, char const*)
0.00 524.23 0.00 1 0.00 0.00 __static_initialization_and_destruction_0(int, int)
% the percentage of the total running time of the
time program used by this function.
cumulative a running sum of the number of seconds accounted
seconds for by this function and those listed above it.
self the number of seconds accounted for by this
seconds function alone. This is the major sort for this
listing.
calls the number of times this function was invoked, if
this function is profiled, else blank.
self the average number of milliseconds spent in this
ms/call function per call, if this function is profiled,
else blank.
total the average number of milliseconds spent in this
ms/call function and its descendents per call, if this
function is profiled, else blank.
name the name of the function. This is the minor sort
for this listing. The index shows the location of
the function in the gprof listing. If the index is
in parenthesis it shows where it would appear in
the gprof listing if it were to be printed.
\f
Call graph (explanation follows)
granularity: each sample hit covers 2 byte(s) for 0.00% of 524.23 seconds
index % time self children called name
<spontaneous>
[1] 100.0 98.57 425.66 main [1]
37.80 0.00 1/1 void test_constant<double, custom_multiple_constant_divide<double> >(double*, int, char const*) [2]
20.79 0.00 1/1 void test_constant<float, custom_multiple_constant_divide<float> >(float*, int, char const*) [3]
18.88 0.00 1/1 void test_constant<double, custom_constant_divide<double> >(double*, int, char const*) [4]
18.34 0.00 1/1 void test_constant<double, custom_add_constants<double> >(double*, int, char const*) [5]
18.33 0.00 1/1 void test_constant<float, custom_add_constants<float> >(float*, int, char const*) [6]
18.27 0.00 1/1 void test_constant<float, custom_divide_constants<float> >(float*, int, char const*) [7]
18.27 0.00 1/1 void test_constant<float, custom_sub_constants<float> >(float*, int, char const*) [9]
18.27 0.00 1/1 void test_constant<float, custom_multiply_constants<float> >(float*, int, char const*) [10]
18.27 0.00 1/1 void test_constant<double, custom_multiply_constants<double> >(double*, int, char const*) [8]
18.27 0.00 1/1 void test_constant<double, custom_two<double> >(double*, int, char const*) [11]
18.27 0.00 1/1 void test_constant<double, custom_sub_constants<double> >(double*, int, char const*) [12]
18.26 0.00 1/1 void test_constant<double, custom_divide_constants<double> >(double*, int, char const*) [13]
10.42 0.00 1/1 void test_constant<float, custom_constant_divide<float> >(float*, int, char const*) [14]
3.50 0.00 1/1 void test_constant<int, custom_multiple_constant_divide<int> >(int*, int, char const*) [15]
3.43 0.00 1/1 void test_constant<long, custom_multiple_constant_divide<long> >(long*, int, char const*) [16]
3.23 0.00 1/1 void test_constant<int, custom_constant_divide<int> >(int*, int, char const*) [17]
3.21 0.00 1/1 void test_constant<double, custom_multiple_constant_sub<double> >(double*, int, char const*) [18]
3.20 0.00 1/1 void test_constant<double, custom_multiple_constant_add<double> >(double*, int, char const*) [19]
3.10 0.00 1/1 void test_constant<long, custom_constant_divide<long> >(long*, int, char const*) [20]
3.07 0.00 1/1 void test_constant<float, custom_multiple_constant_sub<float> >(float*, int, char const*) [21]
3.06 0.00 1/1 void test_constant<float, custom_multiple_constant_add<float> >(float*, int, char const*) [22]
2.63 0.00 1/1 void test_constant<double, custom_multiple_constant_multiply<double> >(double*, int, char const*) [23]
2.52 0.00 1/1 void test_constant<unsigned int, custom_constant_divide<unsigned int> >(unsigned int*, int, char const*) [24]
2.52 0.00 1/1 void test_constant<unsigned int, custom_multiple_constant_divide<unsigned int> >(unsigned int*, int, char const*) [25]
2.46 0.00 1/1 void test_constant<float, custom_multiple_constant_multiply<float> >(float*, int, char const*) [26]
2.44 0.00 1/1 void test_constant<unsigned long, custom_constant_divide<unsigned long> >(unsigned long*, int, char const*) [27]
2.43 0.00 1/1 void test_constant<unsigned long, custom_multiple_constant_divide<unsigned long> >(unsigned long*, int, char const*) [28]
1.89 0.00 1/1 void test_constant<double, custom_multiple_constant_multiply2<double> >(double*, int, char const*) [29]
1.88 0.00 1/1 void test_constant<double, custom_constant_add<double> >(double*, int, char const*) [30]
1.88 0.00 1/1 void test_constant<double, custom_constant_sub<double> >(double*, int, char const*) [31]
1.88 0.00 1/1 void test_constant<double, custom_multiple_constant_divide2<double> >(double*, int, char const*) [32]
1.85 0.00 1/1 void test_constant<unsigned short, custom_multiple_constant_multiply<unsigned short> >(unsigned short*, int, char const*) [36]
1.85 0.00 1/1 void test_constant<long, custom_multiple_constant_multiply<long> >(long*, int, char const*) [35]
1.85 0.00 1/1 void test_constant<float, custom_constant_multiply<float> >(float*, int, char const*) [34]
1.85 0.00 1/1 void test_constant<double, custom_constant_multiply<double> >(double*, int, char const*) [33]
1.85 0.00 1/1 void test_constant<unsigned short, custom_constant_multiply<unsigned short> >(unsigned short*, int, char const*) [37]
1.84 0.00 1/1 void test_constant<long, custom_constant_multiply<long> >(long*, int, char const*) [40]
1.84 0.00 1/1 void test_constant<unsigned long, custom_constant_multiply<unsigned long> >(unsigned long*, int, char const*) [41]
1.84 0.00 1/1 void test_constant<float, custom_constant_sub<float> >(float*, int, char const*) [38]
1.84 0.00 1/1 void test_constant<float, custom_multiple_constant_mixed<float> >(float*, int, char const*) [39]
1.83 0.00 1/1 void test_constant<unsigned long, custom_multiple_constant_multiply<unsigned long> >(unsigned long*, int, char const*) [44]
1.83 0.00 1/1 void test_constant<float, custom_constant_add<float> >(float*, int, char const*) [42]
1.83 0.00 1/1 void test_constant<float, custom_multiple_constant_multiply2<float> >(float*, int, char const*) [43]
1.82 0.00 1/1 void test_constant<float, custom_multiple_constant_divide2<float> >(float*, int, char const*) [45]
1.79 0.00 1/1 void test_constant<unsigned short, custom_multiple_constant_divide<unsigned short> >(unsigned short*, int, char const*) [46]
1.78 0.00 1/1 void test_constant<unsigned short, custom_constant_divide<unsigned short> >(unsigned short*, int, char const*) [47]
1.77 0.00 1/1 void test_constant<int, custom_constant_multiply<int> >(int*, int, char const*) [48]
1.77 0.00 1/1 void test_constant<unsigned int, custom_constant_multiply<unsigned int> >(unsigned int*, int, char const*) [49]
1.76 0.00 1/1 void test_constant<int, custom_multiple_constant_multiply<int> >(int*, int, char const*) [50]
1.76 0.00 1/1 void test_constant<unsigned int, custom_multiple_constant_multiply<unsigned int> >(unsigned int*, int, char const*) [51]
1.43 0.00 1/1 void test_constant<long, custom_constant_and<long> >(long*, int, char const*) [52]
1.43 0.00 1/1 void test_constant<long, custom_constant_xor<long> >(long*, int, char const*) [53]
1.43 0.00 1/1 void test_constant<unsigned long, custom_multiple_constant_divide2<unsigned long> >(unsigned long*, int, char const*) [55]
1.43 0.00 1/1 void test_constant<unsigned long, custom_constant_xor<unsigned long> >(unsigned long*, int, char const*) [54]
1.43 0.00 1/1 void test_constant<long, custom_constant_add<long> >(long*, int, char const*) [57]
1.43 0.00 1/1 void test_constant<long, custom_multiple_constant_add<long> >(long*, int, char const*) [58]
1.43 0.00 1/1 void test_constant<long, custom_multiple_constant_multiply2<long> >(long*, int, char const*) [61]
1.43 0.00 1/1 void test_constant<long, custom_multiple_constant_divide2<long> >(long*, int, char const*) [60]
1.43 0.00 1/1 void test_constant<long, custom_constant_or<long> >(long*, int, char const*) [56]
1.43 0.00 1/1 void test_constant<long, custom_multiple_constant_xor<long> >(long*, int, char const*) [59]
1.43 0.00 1/1 void test_constant<unsigned long, custom_multiple_constant_add<unsigned long> >(unsigned long*, int, char const*) [64]
1.43 0.00 1/1 void test_constant<unsigned long, custom_multiple_constant_multiply2<unsigned long> >(unsigned long*, int, char const*) [66]
1.43 0.00 1/1 void test_constant<unsigned long, custom_constant_and<unsigned long> >(unsigned long*, int, char const*) [62]
1.43 0.00 1/1 void test_constant<unsigned long, custom_multiple_constant_and<unsigned long> >(unsigned long*, int, char const*) [65]
1.43 0.00 1/1 void test_constant<unsigned long, custom_multiple_constant_or<unsigned long> >(unsigned long*, int, char const*) [63]
1.43 0.00 1/1 void test_constant<long, custom_multiple_constant_sub<long> >(long*, int, char const*) [67]
1.43 0.00 1/1 void test_constant<unsigned long, custom_constant_sub<unsigned long> >(unsigned long*, int, char const*) [68]
1.42 0.00 1/1 void test_constant<long, custom_constant_sub<long> >(long*, int, char const*) [69]
1.42 0.00 1/1 void test_constant<unsigned long, custom_multiple_constant_xor<unsigned long> >(unsigned long*, int, char const*) [70]
1.42 0.00 1/1 void test_constant<long, custom_multiple_constant_and<long> >(long*, int, char const*) [72]
1.42 0.00 1/1 void test_constant<long, custom_multiple_constant_or<long> >(long*, int, char const*) [71]
1.42 0.00 1/1 void test_constant<unsigned long, custom_constant_add<unsigned long> >(unsigned long*, int, char const*) [74]
1.42 0.00 1/1 void test_constant<unsigned long, custom_multiple_constant_sub<unsigned long> >(unsigned long*, int, char const*) [75]
1.42 0.00 1/1 void test_constant<unsigned long, custom_constant_or<unsigned long> >(unsigned long*, int, char const*) [73]
1.40 0.00 1/1 void test_constant<unsigned short, custom_multiple_constant_divide2<unsigned short> >(unsigned short*, int, char const*) [77]
1.40 0.00 1/1 void test_constant<unsigned short, custom_multiple_constant_or<unsigned short> >(unsigned short*, int, char const*) [76]
1.39 0.00 1/1 void test_constant<unsigned short, custom_constant_add<unsigned short> >(unsigned short*, int, char const*) [78]
1.39 0.00 1/1 void test_constant<unsigned short, custom_constant_sub<unsigned short> >(unsigned short*, int, char const*) [80]
1.39 0.00 1/1 void test_constant<unsigned short, custom_constant_and<unsigned short> >(unsigned short*, int, char const*) [79]
1.39 0.00 1/1 void test_constant<unsigned short, custom_multiple_constant_xor<unsigned short> >(unsigned short*, int, char const*) [81]
1.39 0.00 1/1 void test_constant<unsigned short, custom_multiple_constant_and<unsigned short> >(unsigned short*, int, char const*) [83]
1.39 0.00 1/1 void test_constant<unsigned short, custom_constant_or<unsigned short> >(unsigned short*, int, char const*) [82]
1.38 0.00 1/1 void test_constant<unsigned short, custom_multiple_constant_add<unsigned short> >(unsigned short*, int, char const*) [94]
1.38 0.00 1/1 void test_constant<unsigned short, custom_multiple_constant_sub<unsigned short> >(unsigned short*, int, char const*) [95]
1.38 0.00 1/1 void test_constant<unsigned short, custom_multiple_constant_multiply2<unsigned short> >(unsigned short*, int, char const*) [96]
1.38 0.00 1/1 void test_constant<unsigned short, custom_constant_xor<unsigned short> >(unsigned short*, int, char const*) [93]
1.38 0.00 1/1 void test_constant<int, custom_constant_sub<int> >(int*, int, char const*) [86]
1.38 0.00 1/1 void test_constant<int, custom_constant_and<int> >(int*, int, char const*) [85]
1.38 0.00 1/1 void test_constant<int, custom_constant_or<int> >(int*, int, char const*) [84]
1.38 0.00 1/1 void test_constant<int, custom_multiple_constant_xor<int> >(int*, int, char const*) [87]
1.38 0.00 1/1 void test_constant<unsigned int, custom_constant_sub<unsigned int> >(unsigned int*, int, char const*) [88]
1.38 0.00 1/1 void test_constant<unsigned int, custom_multiple_constant_multiply2<unsigned int> >(unsigned int*, int, char const*) [92]
1.38 0.00 1/1 void test_constant<unsigned int, custom_multiple_constant_and<unsigned int> >(unsigned int*, int, char const*) [90]
1.38 0.00 1/1 void test_constant<unsigned int, custom_multiple_constant_or<unsigned int> >(unsigned int*, int, char const*) [89]
1.38 0.00 1/1 void test_constant<unsigned int, custom_multiple_constant_xor<unsigned int> >(unsigned int*, int, char const*) [91]
1.38 0.00 1/1 void test_constant<int, custom_multiple_constant_multiply2<int> >(int*, int, char const*) [97]
1.37 0.00 1/1 void test_constant<int, custom_constant_add<int> >(int*, int, char const*) [98]
1.37 0.00 1/1 void test_constant<int, custom_multiple_constant_add<int> >(int*, int, char const*) [101]
1.37 0.00 1/1 void test_constant<int, custom_multiple_constant_or<int> >(int*, int, char const*) [100]
1.37 0.00 1/1 void test_constant<int, custom_constant_xor<int> >(int*, int, char const*) [99]
1.37 0.00 1/1 void test_constant<unsigned int, custom_constant_add<unsigned int> >(unsigned int*, int, char const*) [103]
1.37 0.00 1/1 void test_constant<unsigned int, custom_multiple_constant_add<unsigned int> >(unsigned int*, int, char const*) [104]
1.37 0.00 1/1 void test_constant<unsigned int, custom_multiple_constant_sub<unsigned int> >(unsigned int*, int, char const*) [105]
1.37 0.00 1/1 void test_constant<unsigned int, custom_multiple_constant_divide2<unsigned int> >(unsigned int*, int, char const*) [106]
1.37 0.00 1/1 void test_constant<unsigned int, custom_constant_or<unsigned int> >(unsigned int*, int, char const*) [102]
1.37 0.00 1/1 void test_constant<int, custom_multiple_constant_sub<int> >(int*, int, char const*) [108]
1.37 0.00 1/1 void test_constant<int, custom_multiple_constant_divide2<int> >(int*, int, char const*) [109]
1.37 0.00 1/1 void test_constant<int, custom_multiple_constant_and<int> >(int*, int, char const*) [107]
1.37 0.00 1/1 void test_constant<unsigned int, custom_constant_and<unsigned int> >(unsigned int*, int, char const*) [110]
1.37 0.00 1/1 void test_constant<unsigned int, custom_constant_xor<unsigned int> >(unsigned int*, int, char const*) [111]
1.23 0.00 1/1 void test_constant<unsigned short, custom_multiple_constant_mixed<unsigned short> >(unsigned short*, int, char const*) [112]
1.22 0.00 1/1 void test_constant<long, custom_multiple_constant_mixed<long> >(long*, int, char const*) [113]
1.22 0.00 1/1 void test_constant<int, custom_multiple_constant_mixed<int> >(int*, int, char const*) [114]
1.22 0.00 1/1 void test_constant<unsigned int, custom_multiple_constant_mixed<unsigned int> >(unsigned int*, int, char const*) [115]
1.22 0.00 1/1 void test_constant<unsigned long, custom_multiple_constant_mixed<unsigned long> >(unsigned long*, int, char const*) [116]
0.02 0.00 2000000/2000000 void check_shifted_sum<short, custom_notequal_constants<short> >(short) [117]
0.02 0.00 200000/200000 void check_shifted_sum<signed char, custom_multiple_constant_divide<signed char> >(signed char) [118]
0.01 0.00 2000000/2000000 void check_shifted_sum<signed char, custom_multiply_constants<signed char> >(signed char) [122]
0.01 0.00 2000000/2000000 void check_shifted_sum<signed char, custom_notequal_constants<signed char> >(signed char) [123]
0.01 0.00 2000000/2000000 void check_shifted_sum<signed char, custom_lessthan_constants<signed char> >(signed char) [121]
0.01 0.00 2000000/2000000 void check_shifted_sum<signed char, custom_lessthanequal_constants<signed char> >(signed char) [124]
0.01 0.00 2000000/2000000 void check_shifted_sum<signed char, custom_and_constants<signed char> >(signed char) [120]
0.01 0.00 2000000/2000000 void check_shifted_sum<signed char, custom_or_constants<signed char> >(signed char) [119]
0.01 0.00 2000000/2000000 void check_shifted_sum<unsigned char, custom_lessthanequal_constants<unsigned char> >(unsigned char) [126]
0.01 0.00 2000000/2000000 void check_shifted_sum<unsigned char, custom_or_constants<unsigned char> >(unsigned char) [125]
0.01 0.00 2000000/2000000 void check_shifted_sum<short, custom_two<short> >(short) [127]
0.01 0.00 2000000/2000000 void check_shifted_sum<short, custom_mod_constants<short> >(short) [129]
0.01 0.00 2000000/2000000 void check_shifted_sum<short, custom_lessthan_constants<short> >(short) [130]
0.01 0.00 2000000/2000000 void check_shifted_sum<short, custom_greaterthanequal_constants<short> >(short) [131]
0.01 0.00 2000000/2000000 void check_shifted_sum<short, custom_or_constants<short> >(short) [128]
0.01 0.00 2000000/2000000 void check_shifted_sum<unsigned short, custom_mod_constants<unsigned short> >(unsigned short) [132]
0.01 0.00 2000000/2000000 void check_shifted_sum<unsigned short, custom_notequal_constants<unsigned short> >(unsigned short) [134]
0.01 0.00 2000000/2000000 void check_shifted_sum<unsigned short, custom_greaterthan_constants<unsigned short> >(unsigned short) [135]
0.01 0.00 2000000/2000000 void check_shifted_sum<unsigned short, custom_lessthan_constants<unsigned short> >(unsigned short) [133]
0.01 0.00 2000000/2000000 void check_shifted_sum<unsigned short, custom_greaterthanequal_constants<unsigned short> >(unsigned short) [136]
0.01 0.00 200000/200000 void check_shifted_sum<signed char, custom_multiple_constant_multiply2<signed char> >(signed char) [137]
0.01 0.00 200000/200000 void check_shifted_sum<short, custom_multiple_constant_add<short> >(short) [139]
0.01 0.00 200000/200000 void check_shifted_sum<double, custom_multiple_constant_mixed<double> >(double) [138]
0.01 0.00 1/1 void test_constant<int, custom_or_constants<int> >(int*, int, char const*) [140]
0.01 0.00 1/1 void test_constant<unsigned int, custom_or_constants<unsigned int> >(unsigned int*, int, char const*) [141]
0.01 0.00 1/1 void test_constant<unsigned long, custom_xor_constants<unsigned long> >(unsigned long*, int, char const*) [142]
0.01 0.00 2000000/2000000 void check_shifted_sum<unsigned short, custom_multiply_constants<unsigned short> >(unsigned short) [144]
0.01 0.00 2000000/2000000 void check_shifted_sum<unsigned short, custom_divide_constants<unsigned short> >(unsigned short) [143]
0.01 0.00 200000/200000 void check_shifted_sum<short, custom_multiple_constant_and<short> >(short) [146]
0.01 0.00 200000/200000 void check_shifted_sum<short, custom_constant_or<short> >(short) [145]
0.00 0.00 2000000/2000000 void check_shifted_sum<signed char, custom_two<signed char> >(signed char) [155]
0.00 0.00 2000000/2000000 void check_shifted_sum<signed char, custom_divide_constants<signed char> >(signed char) [159]
0.00 0.00 2000000/2000000 void check_shifted_sum<signed char, custom_mod_constants<signed char> >(signed char) [156]
0.00 0.00 2000000/2000000 void check_shifted_sum<signed char, custom_equal_constants<signed char> >(signed char) [158]
0.00 0.00 2000000/2000000 void check_shifted_sum<signed char, custom_greaterthan_constants<signed char> >(signed char) [160]
0.00 0.00 2000000/2000000 void check_shifted_sum<signed char, custom_greaterthanequal_constants<signed char> >(signed char) [161]
0.00 0.00 2000000/2000000 void check_shifted_sum<signed char, custom_xor_constants<signed char> >(signed char) [157]
0.00 0.00 2000000/2000000 void check_shifted_sum<unsigned char, custom_two<unsigned char> >(unsigned char) [163]
0.00 0.00 2000000/2000000 void check_shifted_sum<unsigned char, custom_add_constants<unsigned char> >(unsigned char) [164]
0.00 0.00 2000000/2000000 void check_shifted_sum<unsigned char, custom_sub_constants<unsigned char> >(unsigned char) [167]
0.00 0.00 2000000/2000000 void check_shifted_sum<unsigned char, custom_multiply_constants<unsigned char> >(unsigned char) [172]
0.00 0.00 2000000/2000000 void check_shifted_sum<unsigned char, custom_divide_constants<unsigned char> >(unsigned char) [170]
0.00 0.00 2000000/2000000 void check_shifted_sum<unsigned char, custom_mod_constants<unsigned char> >(unsigned char) [166]
0.00 0.00 2000000/2000000 void check_shifted_sum<unsigned char, custom_equal_constants<unsigned char> >(unsigned char) [169]
0.00 0.00 2000000/2000000 void check_shifted_sum<unsigned char, custom_notequal_constants<unsigned char> >(unsigned char) [173]
0.00 0.00 2000000/2000000 void check_shifted_sum<unsigned char, custom_greaterthan_constants<unsigned char> >(unsigned char) [174]
0.00 0.00 2000000/2000000 void check_shifted_sum<unsigned char, custom_lessthan_constants<unsigned char> >(unsigned char) [171]
0.00 0.00 2000000/2000000 void check_shifted_sum<unsigned char, custom_greaterthanequal_constants<unsigned char> >(unsigned char) [175]
0.00 0.00 2000000/2000000 void check_shifted_sum<unsigned char, custom_and_constants<unsigned char> >(unsigned char) [165]
0.00 0.00 2000000/2000000 void check_shifted_sum<unsigned char, custom_xor_constants<unsigned char> >(unsigned char) [168]
0.00 0.00 2000000/2000000 void check_shifted_sum<short, custom_add_constants<short> >(short) [177]
0.00 0.00 2000000/2000000 void check_shifted_sum<short, custom_sub_constants<short> >(short) [179]
0.00 0.00 2000000/2000000 void check_shifted_sum<short, custom_multiply_constants<short> >(short) [183]
0.00 0.00 2000000/2000000 void check_shifted_sum<short, custom_divide_constants<short> >(short) [182]
0.00 0.00 2000000/2000000 void check_shifted_sum<short, custom_equal_constants<short> >(short) [181]
0.00 0.00 2000000/2000000 void check_shifted_sum<short, custom_greaterthan_constants<short> >(short) [184]
0.00 0.00 2000000/2000000 void check_shifted_sum<short, custom_lessthanequal_constants<short> >(short) [185]
0.00 0.00 2000000/2000000 void check_shifted_sum<short, custom_and_constants<short> >(short) [178]
0.00 0.00 2000000/2000000 void check_shifted_sum<short, custom_xor_constants<short> >(short) [180]
0.00 0.00 2000000/2000000 void check_shifted_sum<unsigned short, custom_two<unsigned short> >(unsigned short) [186]
0.00 0.00 2000000/2000000 void check_shifted_sum<unsigned short, custom_add_constants<unsigned short> >(unsigned short) [187]
0.00 0.00 2000000/2000000 void check_shifted_sum<unsigned short, custom_sub_constants<unsigned short> >(unsigned short) [188]
0.00 0.00 2000000/2000000 void check_shifted_sum<unsigned short, custom_equal_constants<unsigned short> >(unsigned short) [189]
0.00 0.00 2000000/2000000 void check_shifted_sum<unsigned int, custom_two<unsigned int> >(unsigned int) [176]
0.00 0.00 2000000/2000000 void check_shifted_sum<float, custom_two<float> >(float) [162]
0.00 0.00 200000/200000 void check_shifted_sum<signed char, custom_constant_add<signed char> >(signed char) [191]
0.00 0.00 200000/200000 void check_shifted_sum<signed char, custom_multiple_constant_add<signed char> >(signed char) [198]
0.00 0.00 200000/200000 void check_shifted_sum<signed char, custom_constant_sub<signed char> >(signed char) [193]
0.00 0.00 200000/200000 void check_shifted_sum<signed char, custom_multiple_constant_sub<signed char> >(signed char) [200]
0.00 0.00 200000/200000 void check_shifted_sum<signed char, custom_constant_multiply<signed char> >(signed char) [196]
0.00 0.00 200000/200000 void check_shifted_sum<signed char, custom_multiple_constant_multiply<signed char> >(signed char) [204]
0.00 0.00 200000/200000 void check_shifted_sum<signed char, custom_constant_divide<signed char> >(signed char) [195]
0.00 0.00 200000/200000 void check_shifted_sum<signed char, custom_multiple_constant_divide2<signed char> >(signed char) [203]
0.00 0.00 200000/200000 void check_shifted_sum<signed char, custom_multiple_constant_mixed<signed char> >(signed char) [202]
0.00 0.00 200000/200000 void check_shifted_sum<signed char, custom_constant_and<signed char> >(signed char) [192]
0.00 0.00 200000/200000 void check_shifted_sum<signed char, custom_multiple_constant_and<signed char> >(signed char) [199]
0.00 0.00 200000/200000 void check_shifted_sum<signed char, custom_constant_or<signed char> >(signed char) [190]
0.00 0.00 200000/200000 void check_shifted_sum<signed char, custom_multiple_constant_or<signed char> >(signed char) [197]
0.00 0.00 200000/200000 void check_shifted_sum<signed char, custom_constant_xor<signed char> >(signed char) [194]
0.00 0.00 200000/200000 void check_shifted_sum<signed char, custom_multiple_constant_xor<signed char> >(signed char) [201]
0.00 0.00 200000/200000 void check_shifted_sum<unsigned char, custom_constant_add<unsigned char> >(unsigned char) [206]
0.00 0.00 200000/200000 void check_shifted_sum<unsigned char, custom_multiple_constant_add<unsigned char> >(unsigned char) [213]
0.00 0.00 200000/200000 void check_shifted_sum<unsigned char, custom_constant_sub<unsigned char> >(unsigned char) [208]
0.00 0.00 200000/200000 void check_shifted_sum<unsigned char, custom_multiple_constant_sub<unsigned char> >(unsigned char) [215]
0.00 0.00 200000/200000 void check_shifted_sum<unsigned char, custom_constant_multiply<unsigned char> >(unsigned char) [211]
0.00 0.00 200000/200000 void check_shifted_sum<unsigned char, custom_multiple_constant_multiply<unsigned char> >(unsigned char) [220]
0.00 0.00 200000/200000 void check_shifted_sum<unsigned char, custom_multiple_constant_multiply2<unsigned char> >(unsigned char) [221]
0.00 0.00 200000/200000 void check_shifted_sum<unsigned char, custom_constant_divide<unsigned char> >(unsigned char) [210]
0.00 0.00 200000/200000 void check_shifted_sum<unsigned char, custom_multiple_constant_divide<unsigned char> >(unsigned char) [218]
0.00 0.00 200000/200000 void check_shifted_sum<unsigned char, custom_multiple_constant_divide2<unsigned char> >(unsigned char) [219]
0.00 0.00 200000/200000 void check_shifted_sum<unsigned char, custom_multiple_constant_mixed<unsigned char> >(unsigned char) [217]
0.00 0.00 200000/200000 void check_shifted_sum<unsigned char, custom_constant_and<unsigned char> >(unsigned char) [207]
0.00 0.00 200000/200000 void check_shifted_sum<unsigned char, custom_multiple_constant_and<unsigned char> >(unsigned char) [214]
0.00 0.00 200000/200000 void check_shifted_sum<unsigned char, custom_constant_or<unsigned char> >(unsigned char) [205]
0.00 0.00 200000/200000 void check_shifted_sum<unsigned char, custom_multiple_constant_or<unsigned char> >(unsigned char) [212]
0.00 0.00 200000/200000 void check_shifted_sum<unsigned char, custom_constant_xor<unsigned char> >(unsigned char) [209]
0.00 0.00 200000/200000 void check_shifted_sum<unsigned char, custom_multiple_constant_xor<unsigned char> >(unsigned char) [216]
0.00 0.00 200000/200000 void check_shifted_sum<short, custom_constant_add<short> >(short) [222]
0.00 0.00 200000/200000 void check_shifted_sum<short, custom_constant_sub<short> >(short) [224]
0.00 0.00 200000/200000 void check_shifted_sum<short, custom_multiple_constant_sub<short> >(short) [229]
0.00 0.00 200000/200000 void check_shifted_sum<short, custom_constant_multiply<short> >(short) [227]
0.00 0.00 200000/200000 void check_shifted_sum<short, custom_multiple_constant_multiply<short> >(short) [234]
0.00 0.00 200000/200000 void check_shifted_sum<short, custom_multiple_constant_multiply2<short> >(short) [235]
0.00 0.00 200000/200000 void check_shifted_sum<short, custom_constant_divide<short> >(short) [226]
0.00 0.00 200000/200000 void check_shifted_sum<short, custom_multiple_constant_divide<short> >(short) [232]
0.00 0.00 200000/200000 void check_shifted_sum<short, custom_multiple_constant_divide2<short> >(short) [233]
0.00 0.00 200000/200000 void check_shifted_sum<short, custom_multiple_constant_mixed<short> >(short) [231]
0.00 0.00 200000/200000 void check_shifted_sum<short, custom_constant_and<short> >(short) [223]
0.00 0.00 200000/200000 void check_shifted_sum<short, custom_multiple_constant_or<short> >(short) [228]
0.00 0.00 200000/200000 void check_shifted_sum<short, custom_constant_xor<short> >(short) [225]
0.00 0.00 200000/200000 void check_shifted_sum<short, custom_multiple_constant_xor<short> >(short) [230]
0.00 0.00 110/110 start_timer() [236]
0.00 0.00 110/110 timer() [238]
0.00 0.00 110/110 record_result(double, char const*) [237]
0.00 0.00 20/20 summarize(char const*, int, int, int, int) [239]
0.00 0.00 1/1 void test_constant<unsigned short, custom_lessthanequal_constants<unsigned short> >(unsigned short*, int, char const*) [300]
0.00 0.00 1/1 void test_constant<unsigned short, custom_and_constants<unsigned short> >(unsigned short*, int, char const*) [298]
0.00 0.00 1/1 void test_constant<unsigned short, custom_or_constants<unsigned short> >(unsigned short*, int, char const*) [297]
0.00 0.00 1/1 void test_constant<unsigned short, custom_xor_constants<unsigned short> >(unsigned short*, int, char const*) [299]
0.00 0.00 1/1 void test_constant<int, custom_two<int> >(int*, int, char const*) [241]
0.00 0.00 1/1 void test_constant<int, custom_add_constants<int> >(int*, int, char const*) [242]
0.00 0.00 1/1 void test_constant<int, custom_sub_constants<int> >(int*, int, char const*) [245]
0.00 0.00 1/1 void test_constant<int, custom_multiply_constants<int> >(int*, int, char const*) [250]
0.00 0.00 1/1 void test_constant<int, custom_divide_constants<int> >(int*, int, char const*) [248]
0.00 0.00 1/1 void test_constant<int, custom_mod_constants<int> >(int*, int, char const*) [244]
0.00 0.00 1/1 void test_constant<int, custom_equal_constants<int> >(int*, int, char const*) [247]
0.00 0.00 1/1 void test_constant<int, custom_notequal_constants<int> >(int*, int, char const*) [251]
0.00 0.00 1/1 void test_constant<int, custom_greaterthan_constants<int> >(int*, int, char const*) [252]
0.00 0.00 1/1 void test_constant<int, custom_lessthan_constants<int> >(int*, int, char const*) [249]
0.00 0.00 1/1 void test_constant<int, custom_greaterthanequal_constants<int> >(int*, int, char const*) [254]
0.00 0.00 1/1 void test_constant<int, custom_lessthanequal_constants<int> >(int*, int, char const*) [253]
0.00 0.00 1/1 void test_constant<int, custom_and_constants<int> >(int*, int, char const*) [243]
0.00 0.00 1/1 void test_constant<int, custom_xor_constants<int> >(int*, int, char const*) [246]
0.00 0.00 1/1 void test_constant<unsigned int, custom_add_constants<unsigned int> >(unsigned int*, int, char const*) [255]
0.00 0.00 1/1 void test_constant<unsigned int, custom_sub_constants<unsigned int> >(unsigned int*, int, char const*) [258]
0.00 0.00 1/1 void test_constant<unsigned int, custom_multiply_constants<unsigned int> >(unsigned int*, int, char const*) [263]
0.00 0.00 1/1 void test_constant<unsigned int, custom_divide_constants<unsigned int> >(unsigned int*, int, char const*) [261]
0.00 0.00 1/1 void test_constant<unsigned int, custom_mod_constants<unsigned int> >(unsigned int*, int, char const*) [257]
0.00 0.00 1/1 void test_constant<unsigned int, custom_equal_constants<unsigned int> >(unsigned int*, int, char const*) [260]
0.00 0.00 1/1 void test_constant<unsigned int, custom_notequal_constants<unsigned int> >(unsigned int*, int, char const*) [264]
0.00 0.00 1/1 void test_constant<unsigned int, custom_greaterthan_constants<unsigned int> >(unsigned int*, int, char const*) [265]
0.00 0.00 1/1 void test_constant<unsigned int, custom_lessthan_constants<unsigned int> >(unsigned int*, int, char const*) [262]
0.00 0.00 1/1 void test_constant<unsigned int, custom_greaterthanequal_constants<unsigned int> >(unsigned int*, int, char const*) [267]
0.00 0.00 1/1 void test_constant<unsigned int, custom_lessthanequal_constants<unsigned int> >(unsigned int*, int, char const*) [266]
0.00 0.00 1/1 void test_constant<unsigned int, custom_and_constants<unsigned int> >(unsigned int*, int, char const*) [256]
0.00 0.00 1/1 void test_constant<unsigned int, custom_xor_constants<unsigned int> >(unsigned int*, int, char const*) [259]
0.00 0.00 1/1 void test_constant<long, custom_two<long> >(long*, int, char const*) [268]
0.00 0.00 1/1 void test_constant<long, custom_add_constants<long> >(long*, int, char const*) [270]
0.00 0.00 1/1 void test_constant<long, custom_sub_constants<long> >(long*, int, char const*) [273]
0.00 0.00 1/1 void test_constant<long, custom_multiply_constants<long> >(long*, int, char const*) [278]
0.00 0.00 1/1 void test_constant<long, custom_divide_constants<long> >(long*, int, char const*) [276]
0.00 0.00 1/1 void test_constant<long, custom_mod_constants<long> >(long*, int, char const*) [272]
0.00 0.00 1/1 void test_constant<long, custom_equal_constants<long> >(long*, int, char const*) [275]
0.00 0.00 1/1 void test_constant<long, custom_notequal_constants<long> >(long*, int, char const*) [279]
0.00 0.00 1/1 void test_constant<long, custom_greaterthan_constants<long> >(long*, int, char const*) [280]
0.00 0.00 1/1 void test_constant<long, custom_lessthan_constants<long> >(long*, int, char const*) [277]
0.00 0.00 1/1 void test_constant<long, custom_greaterthanequal_constants<long> >(long*, int, char const*) [282]
0.00 0.00 1/1 void test_constant<long, custom_lessthanequal_constants<long> >(long*, int, char const*) [281]
0.00 0.00 1/1 void test_constant<long, custom_and_constants<long> >(long*, int, char const*) [271]
0.00 0.00 1/1 void test_constant<long, custom_or_constants<long> >(long*, int, char const*) [269]
0.00 0.00 1/1 void test_constant<long, custom_xor_constants<long> >(long*, int, char const*) [274]
0.00 0.00 1/1 void test_constant<unsigned long, custom_two<unsigned long> >(unsigned long*, int, char const*) [283]
0.00 0.00 1/1 void test_constant<unsigned long, custom_add_constants<unsigned long> >(unsigned long*, int, char const*) [285]
0.00 0.00 1/1 void test_constant<unsigned long, custom_sub_constants<unsigned long> >(unsigned long*, int, char const*) [288]
0.00 0.00 1/1 void test_constant<unsigned long, custom_multiply_constants<unsigned long> >(unsigned long*, int, char const*) [292]
0.00 0.00 1/1 void test_constant<unsigned long, custom_divide_constants<unsigned long> >(unsigned long*, int, char const*) [290]
0.00 0.00 1/1 void test_constant<unsigned long, custom_mod_constants<unsigned long> >(unsigned long*, int, char const*) [287]
0.00 0.00 1/1 void test_constant<unsigned long, custom_equal_constants<unsigned long> >(unsigned long*, int, char const*) [289]
0.00 0.00 1/1 void test_constant<unsigned long, custom_notequal_constants<unsigned long> >(unsigned long*, int, char const*) [293]
0.00 0.00 1/1 void test_constant<unsigned long, custom_greaterthan_constants<unsigned long> >(unsigned long*, int, char const*) [294]
0.00 0.00 1/1 void test_constant<unsigned long, custom_lessthan_constants<unsigned long> >(unsigned long*, int, char const*) [291]
0.00 0.00 1/1 void test_constant<unsigned long, custom_greaterthanequal_constants<unsigned long> >(unsigned long*, int, char const*) [296]
0.00 0.00 1/1 void test_constant<unsigned long, custom_lessthanequal_constants<unsigned long> >(unsigned long*, int, char const*) [295]
0.00 0.00 1/1 void test_constant<unsigned long, custom_and_constants<unsigned long> >(unsigned long*, int, char const*) [286]
0.00 0.00 1/1 void test_constant<unsigned long, custom_or_constants<unsigned long> >(unsigned long*, int, char const*) [284]
-----------------------------------------------
37.80 0.00 1/1 main [1]
[2] 7.2 37.80 0.00 1 void test_constant<double, custom_multiple_constant_divide<double> >(double*, int, char const*) [2]
-----------------------------------------------
20.79 0.00 1/1 main [1]
[3] 4.0 20.79 0.00 1 void test_constant<float, custom_multiple_constant_divide<float> >(float*, int, char const*) [3]
-----------------------------------------------
18.88 0.00 1/1 main [1]
[4] 3.6 18.88 0.00 1 void test_constant<double, custom_constant_divide<double> >(double*, int, char const*) [4]
-----------------------------------------------
18.34 0.00 1/1 main [1]
[5] 3.5 18.34 0.00 1 void test_constant<double, custom_add_constants<double> >(double*, int, char const*) [5]
-----------------------------------------------
18.33 0.00 1/1 main [1]
[6] 3.5 18.33 0.00 1 void test_constant<float, custom_add_constants<float> >(float*, int, char const*) [6]
-----------------------------------------------
18.27 0.00 1/1 main [1]
[7] 3.5 18.27 0.00 1 void test_constant<float, custom_divide_constants<float> >(float*, int, char const*) [7]
-----------------------------------------------
18.27 0.00 1/1 main [1]
[8] 3.5 18.27 0.00 1 void test_constant<double, custom_multiply_constants<double> >(double*, int, char const*) [8]
-----------------------------------------------
18.27 0.00 1/1 main [1]
[9] 3.5 18.27 0.00 1 void test_constant<float, custom_sub_constants<float> >(float*, int, char const*) [9]
-----------------------------------------------
18.27 0.00 1/1 main [1]
[10] 3.5 18.27 0.00 1 void test_constant<float, custom_multiply_constants<float> >(float*, int, char const*) [10]
-----------------------------------------------
18.27 0.00 1/1 main [1]
[11] 3.5 18.27 0.00 1 void test_constant<double, custom_two<double> >(double*, int, char const*) [11]
-----------------------------------------------
18.27 0.00 1/1 main [1]
[12] 3.5 18.27 0.00 1 void test_constant<double, custom_sub_constants<double> >(double*, int, char const*) [12]
-----------------------------------------------
18.26 0.00 1/1 main [1]
[13] 3.5 18.26 0.00 1 void test_constant<double, custom_divide_constants<double> >(double*, int, char const*) [13]
-----------------------------------------------
10.42 0.00 1/1 main [1]
[14] 2.0 10.42 0.00 1 void test_constant<float, custom_constant_divide<float> >(float*, int, char const*) [14]
-----------------------------------------------
3.50 0.00 1/1 main [1]
[15] 0.7 3.50 0.00 1 void test_constant<int, custom_multiple_constant_divide<int> >(int*, int, char const*) [15]
-----------------------------------------------
3.43 0.00 1/1 main [1]
[16] 0.7 3.43 0.00 1 void test_constant<long, custom_multiple_constant_divide<long> >(long*, int, char const*) [16]
-----------------------------------------------
3.23 0.00 1/1 main [1]
[17] 0.6 3.23 0.00 1 void test_constant<int, custom_constant_divide<int> >(int*, int, char const*) [17]
-----------------------------------------------
3.21 0.00 1/1 main [1]
[18] 0.6 3.21 0.00 1 void test_constant<double, custom_multiple_constant_sub<double> >(double*, int, char const*) [18]
-----------------------------------------------
3.20 0.00 1/1 main [1]
[19] 0.6 3.20 0.00 1 void test_constant<double, custom_multiple_constant_add<double> >(double*, int, char const*) [19]
-----------------------------------------------
3.10 0.00 1/1 main [1]
[20] 0.6 3.10 0.00 1 void test_constant<long, custom_constant_divide<long> >(long*, int, char const*) [20]
-----------------------------------------------
3.07 0.00 1/1 main [1]
[21] 0.6 3.07 0.00 1 void test_constant<float, custom_multiple_constant_sub<float> >(float*, int, char const*) [21]
-----------------------------------------------
3.06 0.00 1/1 main [1]
[22] 0.6 3.06 0.00 1 void test_constant<float, custom_multiple_constant_add<float> >(float*, int, char const*) [22]
-----------------------------------------------
2.63 0.00 1/1 main [1]
[23] 0.5 2.63 0.00 1 void test_constant<double, custom_multiple_constant_multiply<double> >(double*, int, char const*) [23]
-----------------------------------------------
2.52 0.00 1/1 main [1]
[24] 0.5 2.52 0.00 1 void test_constant<unsigned int, custom_constant_divide<unsigned int> >(unsigned int*, int, char const*) [24]
-----------------------------------------------
2.52 0.00 1/1 main [1]
[25] 0.5 2.52 0.00 1 void test_constant<unsigned int, custom_multiple_constant_divide<unsigned int> >(unsigned int*, int, char const*) [25]
-----------------------------------------------
2.46 0.00 1/1 main [1]
[26] 0.5 2.46 0.00 1 void test_constant<float, custom_multiple_constant_multiply<float> >(float*, int, char const*) [26]
-----------------------------------------------
2.44 0.00 1/1 main [1]
[27] 0.5 2.44 0.00 1 void test_constant<unsigned long, custom_constant_divide<unsigned long> >(unsigned long*, int, char const*) [27]
-----------------------------------------------
2.43 0.00 1/1 main [1]
[28] 0.5 2.43 0.00 1 void test_constant<unsigned long, custom_multiple_constant_divide<unsigned long> >(unsigned long*, int, char const*) [28]
-----------------------------------------------
1.89 0.00 1/1 main [1]
[29] 0.4 1.89 0.00 1 void test_constant<double, custom_multiple_constant_multiply2<double> >(double*, int, char const*) [29]
-----------------------------------------------
1.88 0.00 1/1 main [1]
[30] 0.4 1.88 0.00 1 void test_constant<double, custom_constant_add<double> >(double*, int, char const*) [30]
-----------------------------------------------
1.88 0.00 1/1 main [1]
[31] 0.4 1.88 0.00 1 void test_constant<double, custom_constant_sub<double> >(double*, int, char const*) [31]
-----------------------------------------------
1.88 0.00 1/1 main [1]
[32] 0.4 1.88 0.00 1 void test_constant<double, custom_multiple_constant_divide2<double> >(double*, int, char const*) [32]
-----------------------------------------------
1.85 0.00 1/1 main [1]
[33] 0.4 1.85 0.00 1 void test_constant<double, custom_constant_multiply<double> >(double*, int, char const*) [33]
-----------------------------------------------
1.85 0.00 1/1 main [1]
[34] 0.4 1.85 0.00 1 void test_constant<float, custom_constant_multiply<float> >(float*, int, char const*) [34]
-----------------------------------------------
1.85 0.00 1/1 main [1]
[35] 0.4 1.85 0.00 1 void test_constant<long, custom_multiple_constant_multiply<long> >(long*, int, char const*) [35]
-----------------------------------------------
1.85 0.00 1/1 main [1]
[36] 0.4 1.85 0.00 1 void test_constant<unsigned short, custom_multiple_constant_multiply<unsigned short> >(unsigned short*, int, char const*) [36]
-----------------------------------------------
1.85 0.00 1/1 main [1]
[37] 0.4 1.85 0.00 1 void test_constant<unsigned short, custom_constant_multiply<unsigned short> >(unsigned short*, int, char const*) [37]
-----------------------------------------------
1.84 0.00 1/1 main [1]
[38] 0.4 1.84 0.00 1 void test_constant<float, custom_constant_sub<float> >(float*, int, char const*) [38]
-----------------------------------------------
1.84 0.00 1/1 main [1]
[39] 0.4 1.84 0.00 1 void test_constant<float, custom_multiple_constant_mixed<float> >(float*, int, char const*) [39]
-----------------------------------------------
1.84 0.00 1/1 main [1]
[40] 0.4 1.84 0.00 1 void test_constant<long, custom_constant_multiply<long> >(long*, int, char const*) [40]
-----------------------------------------------
1.84 0.00 1/1 main [1]
[41] 0.4 1.84 0.00 1 void test_constant<unsigned long, custom_constant_multiply<unsigned long> >(unsigned long*, int, char const*) [41]
-----------------------------------------------
1.83 0.00 1/1 main [1]
[42] 0.3 1.83 0.00 1 void test_constant<float, custom_constant_add<float> >(float*, int, char const*) [42]
-----------------------------------------------
1.83 0.00 1/1 main [1]
[43] 0.3 1.83 0.00 1 void test_constant<float, custom_multiple_constant_multiply2<float> >(float*, int, char const*) [43]
-----------------------------------------------
1.83 0.00 1/1 main [1]
[44] 0.3 1.83 0.00 1 void test_constant<unsigned long, custom_multiple_constant_multiply<unsigned long> >(unsigned long*, int, char const*) [44]
-----------------------------------------------
1.82 0.00 1/1 main [1]
[45] 0.3 1.82 0.00 1 void test_constant<float, custom_multiple_constant_divide2<float> >(float*, int, char const*) [45]
-----------------------------------------------
1.79 0.00 1/1 main [1]
[46] 0.3 1.79 0.00 1 void test_constant<unsigned short, custom_multiple_constant_divide<unsigned short> >(unsigned short*, int, char const*) [46]
-----------------------------------------------
1.78 0.00 1/1 main [1]
[47] 0.3 1.78 0.00 1 void test_constant<unsigned short, custom_constant_divide<unsigned short> >(unsigned short*, int, char const*) [47]
-----------------------------------------------
1.77 0.00 1/1 main [1]
[48] 0.3 1.77 0.00 1 void test_constant<int, custom_constant_multiply<int> >(int*, int, char const*) [48]
-----------------------------------------------
1.77 0.00 1/1 main [1]
[49] 0.3 1.77 0.00 1 void test_constant<unsigned int, custom_constant_multiply<unsigned int> >(unsigned int*, int, char const*) [49]
-----------------------------------------------
1.76 0.00 1/1 main [1]
[50] 0.3 1.76 0.00 1 void test_constant<int, custom_multiple_constant_multiply<int> >(int*, int, char const*) [50]
-----------------------------------------------
1.76 0.00 1/1 main [1]
[51] 0.3 1.76 0.00 1 void test_constant<unsigned int, custom_multiple_constant_multiply<unsigned int> >(unsigned int*, int, char const*) [51]
-----------------------------------------------
1.43 0.00 1/1 main [1]
[52] 0.3 1.43 0.00 1 void test_constant<long, custom_constant_and<long> >(long*, int, char const*) [52]
-----------------------------------------------
1.43 0.00 1/1 main [1]
[53] 0.3 1.43 0.00 1 void test_constant<long, custom_constant_xor<long> >(long*, int, char const*) [53]
-----------------------------------------------
1.43 0.00 1/1 main [1]
[54] 0.3 1.43 0.00 1 void test_constant<unsigned long, custom_constant_xor<unsigned long> >(unsigned long*, int, char const*) [54]
-----------------------------------------------
1.43 0.00 1/1 main [1]
[55] 0.3 1.43 0.00 1 void test_constant<unsigned long, custom_multiple_constant_divide2<unsigned long> >(unsigned long*, int, char const*) [55]
-----------------------------------------------
1.43 0.00 1/1 main [1]
[56] 0.3 1.43 0.00 1 void test_constant<long, custom_constant_or<long> >(long*, int, char const*) [56]
-----------------------------------------------
1.43 0.00 1/1 main [1]
[57] 0.3 1.43 0.00 1 void test_constant<long, custom_constant_add<long> >(long*, int, char const*) [57]
-----------------------------------------------
1.43 0.00 1/1 main [1]
[58] 0.3 1.43 0.00 1 void test_constant<long, custom_multiple_constant_add<long> >(long*, int, char const*) [58]
-----------------------------------------------
1.43 0.00 1/1 main [1]
[59] 0.3 1.43 0.00 1 void test_constant<long, custom_multiple_constant_xor<long> >(long*, int, char const*) [59]
-----------------------------------------------
1.43 0.00 1/1 main [1]
[60] 0.3 1.43 0.00 1 void test_constant<long, custom_multiple_constant_divide2<long> >(long*, int, char const*) [60]
-----------------------------------------------
1.43 0.00 1/1 main [1]
[61] 0.3 1.43 0.00 1 void test_constant<long, custom_multiple_constant_multiply2<long> >(long*, int, char const*) [61]
-----------------------------------------------
1.43 0.00 1/1 main [1]
[62] 0.3 1.43 0.00 1 void test_constant<unsigned long, custom_constant_and<unsigned long> >(unsigned long*, int, char const*) [62]
-----------------------------------------------
1.43 0.00 1/1 main [1]
[63] 0.3 1.43 0.00 1 void test_constant<unsigned long, custom_multiple_constant_or<unsigned long> >(unsigned long*, int, char const*) [63]
-----------------------------------------------
1.43 0.00 1/1 main [1]
[64] 0.3 1.43 0.00 1 void test_constant<unsigned long, custom_multiple_constant_add<unsigned long> >(unsigned long*, int, char const*) [64]
-----------------------------------------------
1.43 0.00 1/1 main [1]
[65] 0.3 1.43 0.00 1 void test_constant<unsigned long, custom_multiple_constant_and<unsigned long> >(unsigned long*, int, char const*) [65]
-----------------------------------------------
1.43 0.00 1/1 main [1]
[66] 0.3 1.43 0.00 1 void test_constant<unsigned long, custom_multiple_constant_multiply2<unsigned long> >(unsigned long*, int, char const*) [66]
-----------------------------------------------
1.43 0.00 1/1 main [1]
[67] 0.3 1.43 0.00 1 void test_constant<long, custom_multiple_constant_sub<long> >(long*, int, char const*) [67]
-----------------------------------------------
1.43 0.00 1/1 main [1]
[68] 0.3 1.43 0.00 1 void test_constant<unsigned long, custom_constant_sub<unsigned long> >(unsigned long*, int, char const*) [68]
-----------------------------------------------
1.42 0.00 1/1 main [1]
[69] 0.3 1.42 0.00 1 void test_constant<long, custom_constant_sub<long> >(long*, int, char const*) [69]
-----------------------------------------------
1.42 0.00 1/1 main [1]
[70] 0.3 1.42 0.00 1 void test_constant<unsigned long, custom_multiple_constant_xor<unsigned long> >(unsigned long*, int, char const*) [70]
-----------------------------------------------
1.42 0.00 1/1 main [1]
[71] 0.3 1.42 0.00 1 void test_constant<long, custom_multiple_constant_or<long> >(long*, int, char const*) [71]
-----------------------------------------------
1.42 0.00 1/1 main [1]
[72] 0.3 1.42 0.00 1 void test_constant<long, custom_multiple_constant_and<long> >(long*, int, char const*) [72]
-----------------------------------------------
1.42 0.00 1/1 main [1]
[73] 0.3 1.42 0.00 1 void test_constant<unsigned long, custom_constant_or<unsigned long> >(unsigned long*, int, char const*) [73]
-----------------------------------------------
1.42 0.00 1/1 main [1]
[74] 0.3 1.42 0.00 1 void test_constant<unsigned long, custom_constant_add<unsigned long> >(unsigned long*, int, char const*) [74]
-----------------------------------------------
1.42 0.00 1/1 main [1]
[75] 0.3 1.42 0.00 1 void test_constant<unsigned long, custom_multiple_constant_sub<unsigned long> >(unsigned long*, int, char const*) [75]
-----------------------------------------------
1.40 0.00 1/1 main [1]
[76] 0.3 1.40 0.00 1 void test_constant<unsigned short, custom_multiple_constant_or<unsigned short> >(unsigned short*, int, char const*) [76]
-----------------------------------------------
1.40 0.00 1/1 main [1]
[77] 0.3 1.40 0.00 1 void test_constant<unsigned short, custom_multiple_constant_divide2<unsigned short> >(unsigned short*, int, char const*) [77]
-----------------------------------------------
1.39 0.00 1/1 main [1]
[78] 0.3 1.39 0.00 1 void test_constant<unsigned short, custom_constant_add<unsigned short> >(unsigned short*, int, char const*) [78]
-----------------------------------------------
1.39 0.00 1/1 main [1]
[79] 0.3 1.39 0.00 1 void test_constant<unsigned short, custom_constant_and<unsigned short> >(unsigned short*, int, char const*) [79]
-----------------------------------------------
1.39 0.00 1/1 main [1]
[80] 0.3 1.39 0.00 1 void test_constant<unsigned short, custom_constant_sub<unsigned short> >(unsigned short*, int, char const*) [80]
-----------------------------------------------
1.39 0.00 1/1 main [1]
[81] 0.3 1.39 0.00 1 void test_constant<unsigned short, custom_multiple_constant_xor<unsigned short> >(unsigned short*, int, char const*) [81]
-----------------------------------------------
1.39 0.00 1/1 main [1]
[82] 0.3 1.39 0.00 1 void test_constant<unsigned short, custom_constant_or<unsigned short> >(unsigned short*, int, char const*) [82]
-----------------------------------------------
1.39 0.00 1/1 main [1]
[83] 0.3 1.39 0.00 1 void test_constant<unsigned short, custom_multiple_constant_and<unsigned short> >(unsigned short*, int, char const*) [83]
-----------------------------------------------
1.38 0.00 1/1 main [1]
[84] 0.3 1.38 0.00 1 void test_constant<int, custom_constant_or<int> >(int*, int, char const*) [84]
-----------------------------------------------
1.38 0.00 1/1 main [1]
[85] 0.3 1.38 0.00 1 void test_constant<int, custom_constant_and<int> >(int*, int, char const*) [85]
-----------------------------------------------
1.38 0.00 1/1 main [1]
[86] 0.3 1.38 0.00 1 void test_constant<int, custom_constant_sub<int> >(int*, int, char const*) [86]
-----------------------------------------------
1.38 0.00 1/1 main [1]
[87] 0.3 1.38 0.00 1 void test_constant<int, custom_multiple_constant_xor<int> >(int*, int, char const*) [87]
-----------------------------------------------
1.38 0.00 1/1 main [1]
[88] 0.3 1.38 0.00 1 void test_constant<unsigned int, custom_constant_sub<unsigned int> >(unsigned int*, int, char const*) [88]
-----------------------------------------------
1.38 0.00 1/1 main [1]
[89] 0.3 1.38 0.00 1 void test_constant<unsigned int, custom_multiple_constant_or<unsigned int> >(unsigned int*, int, char const*) [89]
-----------------------------------------------
1.38 0.00 1/1 main [1]
[90] 0.3 1.38 0.00 1 void test_constant<unsigned int, custom_multiple_constant_and<unsigned int> >(unsigned int*, int, char const*) [90]
-----------------------------------------------
1.38 0.00 1/1 main [1]
[91] 0.3 1.38 0.00 1 void test_constant<unsigned int, custom_multiple_constant_xor<unsigned int> >(unsigned int*, int, char const*) [91]
-----------------------------------------------
1.38 0.00 1/1 main [1]
[92] 0.3 1.38 0.00 1 void test_constant<unsigned int, custom_multiple_constant_multiply2<unsigned int> >(unsigned int*, int, char const*) [92]
-----------------------------------------------
1.38 0.00 1/1 main [1]
[93] 0.3 1.38 0.00 1 void test_constant<unsigned short, custom_constant_xor<unsigned short> >(unsigned short*, int, char const*) [93]
-----------------------------------------------
1.38 0.00 1/1 main [1]
[94] 0.3 1.38 0.00 1 void test_constant<unsigned short, custom_multiple_constant_add<unsigned short> >(unsigned short*, int, char const*) [94]
-----------------------------------------------
1.38 0.00 1/1 main [1]
[95] 0.3 1.38 0.00 1 void test_constant<unsigned short, custom_multiple_constant_sub<unsigned short> >(unsigned short*, int, char const*) [95]
-----------------------------------------------
1.38 0.00 1/1 main [1]
[96] 0.3 1.38 0.00 1 void test_constant<unsigned short, custom_multiple_constant_multiply2<unsigned short> >(unsigned short*, int, char const*) [96]
-----------------------------------------------
1.38 0.00 1/1 main [1]
[97] 0.3 1.38 0.00 1 void test_constant<int, custom_multiple_constant_multiply2<int> >(int*, int, char const*) [97]
-----------------------------------------------
1.37 0.00 1/1 main [1]
[98] 0.3 1.37 0.00 1 void test_constant<int, custom_constant_add<int> >(int*, int, char const*) [98]
-----------------------------------------------
1.37 0.00 1/1 main [1]
[99] 0.3 1.37 0.00 1 void test_constant<int, custom_constant_xor<int> >(int*, int, char const*) [99]
-----------------------------------------------
1.37 0.00 1/1 main [1]
[100] 0.3 1.37 0.00 1 void test_constant<int, custom_multiple_constant_or<int> >(int*, int, char const*) [100]
-----------------------------------------------
1.37 0.00 1/1 main [1]
[101] 0.3 1.37 0.00 1 void test_constant<int, custom_multiple_constant_add<int> >(int*, int, char const*) [101]
-----------------------------------------------
1.37 0.00 1/1 main [1]
[102] 0.3 1.37 0.00 1 void test_constant<unsigned int, custom_constant_or<unsigned int> >(unsigned int*, int, char const*) [102]
-----------------------------------------------
1.37 0.00 1/1 main [1]
[103] 0.3 1.37 0.00 1 void test_constant<unsigned int, custom_constant_add<unsigned int> >(unsigned int*, int, char const*) [103]
-----------------------------------------------
1.37 0.00 1/1 main [1]
[104] 0.3 1.37 0.00 1 void test_constant<unsigned int, custom_multiple_constant_add<unsigned int> >(unsigned int*, int, char const*) [104]
-----------------------------------------------
1.37 0.00 1/1 main [1]
[105] 0.3 1.37 0.00 1 void test_constant<unsigned int, custom_multiple_constant_sub<unsigned int> >(unsigned int*, int, char const*) [105]
-----------------------------------------------
1.37 0.00 1/1 main [1]
[106] 0.3 1.37 0.00 1 void test_constant<unsigned int, custom_multiple_constant_divide2<unsigned int> >(unsigned int*, int, char const*) [106]
-----------------------------------------------
1.37 0.00 1/1 main [1]
[107] 0.3 1.37 0.00 1 void test_constant<int, custom_multiple_constant_and<int> >(int*, int, char const*) [107]
-----------------------------------------------
1.37 0.00 1/1 main [1]
[108] 0.3 1.37 0.00 1 void test_constant<int, custom_multiple_constant_sub<int> >(int*, int, char const*) [108]
-----------------------------------------------
1.37 0.00 1/1 main [1]
[109] 0.3 1.37 0.00 1 void test_constant<int, custom_multiple_constant_divide2<int> >(int*, int, char const*) [109]
-----------------------------------------------
1.37 0.00 1/1 main [1]
[110] 0.3 1.37 0.00 1 void test_constant<unsigned int, custom_constant_and<unsigned int> >(unsigned int*, int, char const*) [110]
-----------------------------------------------
1.37 0.00 1/1 main [1]
[111] 0.3 1.37 0.00 1 void test_constant<unsigned int, custom_constant_xor<unsigned int> >(unsigned int*, int, char const*) [111]
-----------------------------------------------
1.23 0.00 1/1 main [1]
[112] 0.2 1.23 0.00 1 void test_constant<unsigned short, custom_multiple_constant_mixed<unsigned short> >(unsigned short*, int, char const*) [112]
-----------------------------------------------
1.22 0.00 1/1 main [1]
[113] 0.2 1.22 0.00 1 void test_constant<long, custom_multiple_constant_mixed<long> >(long*, int, char const*) [113]
-----------------------------------------------
1.22 0.00 1/1 main [1]
[114] 0.2 1.22 0.00 1 void test_constant<int, custom_multiple_constant_mixed<int> >(int*, int, char const*) [114]
-----------------------------------------------
1.22 0.00 1/1 main [1]
[115] 0.2 1.22 0.00 1 void test_constant<unsigned int, custom_multiple_constant_mixed<unsigned int> >(unsigned int*, int, char const*) [115]
-----------------------------------------------
1.22 0.00 1/1 main [1]
[116] 0.2 1.22 0.00 1 void test_constant<unsigned long, custom_multiple_constant_mixed<unsigned long> >(unsigned long*, int, char const*) [116]
-----------------------------------------------
0.02 0.00 2000000/2000000 main [1]
[117] 0.0 0.02 0.00 2000000 void check_shifted_sum<short, custom_notequal_constants<short> >(short) [117]
-----------------------------------------------
0.02 0.00 200000/200000 main [1]
[118] 0.0 0.02 0.00 200000 void check_shifted_sum<signed char, custom_multiple_constant_divide<signed char> >(signed char) [118]
-----------------------------------------------
0.01 0.00 2000000/2000000 main [1]
[119] 0.0 0.01 0.00 2000000 void check_shifted_sum<signed char, custom_or_constants<signed char> >(signed char) [119]
-----------------------------------------------
0.01 0.00 2000000/2000000 main [1]
[120] 0.0 0.01 0.00 2000000 void check_shifted_sum<signed char, custom_and_constants<signed char> >(signed char) [120]
-----------------------------------------------
0.01 0.00 2000000/2000000 main [1]
[121] 0.0 0.01 0.00 2000000 void check_shifted_sum<signed char, custom_lessthan_constants<signed char> >(signed char) [121]
-----------------------------------------------
0.01 0.00 2000000/2000000 main [1]
[122] 0.0 0.01 0.00 2000000 void check_shifted_sum<signed char, custom_multiply_constants<signed char> >(signed char) [122]
-----------------------------------------------
0.01 0.00 2000000/2000000 main [1]
[123] 0.0 0.01 0.00 2000000 void check_shifted_sum<signed char, custom_notequal_constants<signed char> >(signed char) [123]
-----------------------------------------------
0.01 0.00 2000000/2000000 main [1]
[124] 0.0 0.01 0.00 2000000 void check_shifted_sum<signed char, custom_lessthanequal_constants<signed char> >(signed char) [124]
-----------------------------------------------
0.01 0.00 2000000/2000000 main [1]
[125] 0.0 0.01 0.00 2000000 void check_shifted_sum<unsigned char, custom_or_constants<unsigned char> >(unsigned char) [125]
-----------------------------------------------
0.01 0.00 2000000/2000000 main [1]
[126] 0.0 0.01 0.00 2000000 void check_shifted_sum<unsigned char, custom_lessthanequal_constants<unsigned char> >(unsigned char) [126]
-----------------------------------------------
0.01 0.00 2000000/2000000 main [1]
[127] 0.0 0.01 0.00 2000000 void check_shifted_sum<short, custom_two<short> >(short) [127]
-----------------------------------------------
0.01 0.00 2000000/2000000 main [1]
[128] 0.0 0.01 0.00 2000000 void check_shifted_sum<short, custom_or_constants<short> >(short) [128]
-----------------------------------------------
0.01 0.00 2000000/2000000 main [1]
[129] 0.0 0.01 0.00 2000000 void check_shifted_sum<short, custom_mod_constants<short> >(short) [129]
-----------------------------------------------
0.01 0.00 2000000/2000000 main [1]
[130] 0.0 0.01 0.00 2000000 void check_shifted_sum<short, custom_lessthan_constants<short> >(short) [130]
-----------------------------------------------
0.01 0.00 2000000/2000000 main [1]
[131] 0.0 0.01 0.00 2000000 void check_shifted_sum<short, custom_greaterthanequal_constants<short> >(short) [131]
-----------------------------------------------
0.01 0.00 2000000/2000000 main [1]
[132] 0.0 0.01 0.00 2000000 void check_shifted_sum<unsigned short, custom_mod_constants<unsigned short> >(unsigned short) [132]
-----------------------------------------------
0.01 0.00 2000000/2000000 main [1]
[133] 0.0 0.01 0.00 2000000 void check_shifted_sum<unsigned short, custom_lessthan_constants<unsigned short> >(unsigned short) [133]
-----------------------------------------------
0.01 0.00 2000000/2000000 main [1]
[134] 0.0 0.01 0.00 2000000 void check_shifted_sum<unsigned short, custom_notequal_constants<unsigned short> >(unsigned short) [134]
-----------------------------------------------
0.01 0.00 2000000/2000000 main [1]
[135] 0.0 0.01 0.00 2000000 void check_shifted_sum<unsigned short, custom_greaterthan_constants<unsigned short> >(unsigned short) [135]
-----------------------------------------------
0.01 0.00 2000000/2000000 main [1]
[136] 0.0 0.01 0.00 2000000 void check_shifted_sum<unsigned short, custom_greaterthanequal_constants<unsigned short> >(unsigned short) [136]
-----------------------------------------------
0.01 0.00 200000/200000 main [1]
[137] 0.0 0.01 0.00 200000 void check_shifted_sum<signed char, custom_multiple_constant_multiply2<signed char> >(signed char) [137]
-----------------------------------------------
0.01 0.00 200000/200000 main [1]
[138] 0.0 0.01 0.00 200000 void check_shifted_sum<double, custom_multiple_constant_mixed<double> >(double) [138]
-----------------------------------------------
0.01 0.00 200000/200000 main [1]
[139] 0.0 0.01 0.00 200000 void check_shifted_sum<short, custom_multiple_constant_add<short> >(short) [139]
-----------------------------------------------
0.01 0.00 1/1 main [1]
[140] 0.0 0.01 0.00 1 void test_constant<int, custom_or_constants<int> >(int*, int, char const*) [140]
-----------------------------------------------
0.01 0.00 1/1 main [1]
[141] 0.0 0.01 0.00 1 void test_constant<unsigned int, custom_or_constants<unsigned int> >(unsigned int*, int, char const*) [141]
-----------------------------------------------
0.01 0.00 1/1 main [1]
[142] 0.0 0.01 0.00 1 void test_constant<unsigned long, custom_xor_constants<unsigned long> >(unsigned long*, int, char const*) [142]
-----------------------------------------------
0.01 0.00 2000000/2000000 main [1]
[143] 0.0 0.01 0.00 2000000 void check_shifted_sum<unsigned short, custom_divide_constants<unsigned short> >(unsigned short) [143]
-----------------------------------------------
0.01 0.00 2000000/2000000 main [1]
[144] 0.0 0.01 0.00 2000000 void check_shifted_sum<unsigned short, custom_multiply_constants<unsigned short> >(unsigned short) [144]
-----------------------------------------------
0.01 0.00 200000/200000 main [1]
[145] 0.0 0.01 0.00 200000 void check_shifted_sum<short, custom_constant_or<short> >(short) [145]
-----------------------------------------------
0.01 0.00 200000/200000 main [1]
[146] 0.0 0.01 0.00 200000 void check_shifted_sum<short, custom_multiple_constant_and<short> >(short) [146]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[155] 0.0 0.00 0.00 2000000 void check_shifted_sum<signed char, custom_two<signed char> >(signed char) [155]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[156] 0.0 0.00 0.00 2000000 void check_shifted_sum<signed char, custom_mod_constants<signed char> >(signed char) [156]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[157] 0.0 0.00 0.00 2000000 void check_shifted_sum<signed char, custom_xor_constants<signed char> >(signed char) [157]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[158] 0.0 0.00 0.00 2000000 void check_shifted_sum<signed char, custom_equal_constants<signed char> >(signed char) [158]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[159] 0.0 0.00 0.00 2000000 void check_shifted_sum<signed char, custom_divide_constants<signed char> >(signed char) [159]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[160] 0.0 0.00 0.00 2000000 void check_shifted_sum<signed char, custom_greaterthan_constants<signed char> >(signed char) [160]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[161] 0.0 0.00 0.00 2000000 void check_shifted_sum<signed char, custom_greaterthanequal_constants<signed char> >(signed char) [161]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[162] 0.0 0.00 0.00 2000000 void check_shifted_sum<float, custom_two<float> >(float) [162]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[163] 0.0 0.00 0.00 2000000 void check_shifted_sum<unsigned char, custom_two<unsigned char> >(unsigned char) [163]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[164] 0.0 0.00 0.00 2000000 void check_shifted_sum<unsigned char, custom_add_constants<unsigned char> >(unsigned char) [164]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[165] 0.0 0.00 0.00 2000000 void check_shifted_sum<unsigned char, custom_and_constants<unsigned char> >(unsigned char) [165]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[166] 0.0 0.00 0.00 2000000 void check_shifted_sum<unsigned char, custom_mod_constants<unsigned char> >(unsigned char) [166]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[167] 0.0 0.00 0.00 2000000 void check_shifted_sum<unsigned char, custom_sub_constants<unsigned char> >(unsigned char) [167]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[168] 0.0 0.00 0.00 2000000 void check_shifted_sum<unsigned char, custom_xor_constants<unsigned char> >(unsigned char) [168]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[169] 0.0 0.00 0.00 2000000 void check_shifted_sum<unsigned char, custom_equal_constants<unsigned char> >(unsigned char) [169]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[170] 0.0 0.00 0.00 2000000 void check_shifted_sum<unsigned char, custom_divide_constants<unsigned char> >(unsigned char) [170]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[171] 0.0 0.00 0.00 2000000 void check_shifted_sum<unsigned char, custom_lessthan_constants<unsigned char> >(unsigned char) [171]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[172] 0.0 0.00 0.00 2000000 void check_shifted_sum<unsigned char, custom_multiply_constants<unsigned char> >(unsigned char) [172]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[173] 0.0 0.00 0.00 2000000 void check_shifted_sum<unsigned char, custom_notequal_constants<unsigned char> >(unsigned char) [173]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[174] 0.0 0.00 0.00 2000000 void check_shifted_sum<unsigned char, custom_greaterthan_constants<unsigned char> >(unsigned char) [174]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[175] 0.0 0.00 0.00 2000000 void check_shifted_sum<unsigned char, custom_greaterthanequal_constants<unsigned char> >(unsigned char) [175]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[176] 0.0 0.00 0.00 2000000 void check_shifted_sum<unsigned int, custom_two<unsigned int> >(unsigned int) [176]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[177] 0.0 0.00 0.00 2000000 void check_shifted_sum<short, custom_add_constants<short> >(short) [177]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[178] 0.0 0.00 0.00 2000000 void check_shifted_sum<short, custom_and_constants<short> >(short) [178]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[179] 0.0 0.00 0.00 2000000 void check_shifted_sum<short, custom_sub_constants<short> >(short) [179]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[180] 0.0 0.00 0.00 2000000 void check_shifted_sum<short, custom_xor_constants<short> >(short) [180]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[181] 0.0 0.00 0.00 2000000 void check_shifted_sum<short, custom_equal_constants<short> >(short) [181]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[182] 0.0 0.00 0.00 2000000 void check_shifted_sum<short, custom_divide_constants<short> >(short) [182]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[183] 0.0 0.00 0.00 2000000 void check_shifted_sum<short, custom_multiply_constants<short> >(short) [183]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[184] 0.0 0.00 0.00 2000000 void check_shifted_sum<short, custom_greaterthan_constants<short> >(short) [184]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[185] 0.0 0.00 0.00 2000000 void check_shifted_sum<short, custom_lessthanequal_constants<short> >(short) [185]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[186] 0.0 0.00 0.00 2000000 void check_shifted_sum<unsigned short, custom_two<unsigned short> >(unsigned short) [186]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[187] 0.0 0.00 0.00 2000000 void check_shifted_sum<unsigned short, custom_add_constants<unsigned short> >(unsigned short) [187]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[188] 0.0 0.00 0.00 2000000 void check_shifted_sum<unsigned short, custom_sub_constants<unsigned short> >(unsigned short) [188]
-----------------------------------------------
0.00 0.00 2000000/2000000 main [1]
[189] 0.0 0.00 0.00 2000000 void check_shifted_sum<unsigned short, custom_equal_constants<unsigned short> >(unsigned short) [189]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[190] 0.0 0.00 0.00 200000 void check_shifted_sum<signed char, custom_constant_or<signed char> >(signed char) [190]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[191] 0.0 0.00 0.00 200000 void check_shifted_sum<signed char, custom_constant_add<signed char> >(signed char) [191]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[192] 0.0 0.00 0.00 200000 void check_shifted_sum<signed char, custom_constant_and<signed char> >(signed char) [192]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[193] 0.0 0.00 0.00 200000 void check_shifted_sum<signed char, custom_constant_sub<signed char> >(signed char) [193]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[194] 0.0 0.00 0.00 200000 void check_shifted_sum<signed char, custom_constant_xor<signed char> >(signed char) [194]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[195] 0.0 0.00 0.00 200000 void check_shifted_sum<signed char, custom_constant_divide<signed char> >(signed char) [195]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[196] 0.0 0.00 0.00 200000 void check_shifted_sum<signed char, custom_constant_multiply<signed char> >(signed char) [196]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[197] 0.0 0.00 0.00 200000 void check_shifted_sum<signed char, custom_multiple_constant_or<signed char> >(signed char) [197]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[198] 0.0 0.00 0.00 200000 void check_shifted_sum<signed char, custom_multiple_constant_add<signed char> >(signed char) [198]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[199] 0.0 0.00 0.00 200000 void check_shifted_sum<signed char, custom_multiple_constant_and<signed char> >(signed char) [199]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[200] 0.0 0.00 0.00 200000 void check_shifted_sum<signed char, custom_multiple_constant_sub<signed char> >(signed char) [200]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[201] 0.0 0.00 0.00 200000 void check_shifted_sum<signed char, custom_multiple_constant_xor<signed char> >(signed char) [201]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[202] 0.0 0.00 0.00 200000 void check_shifted_sum<signed char, custom_multiple_constant_mixed<signed char> >(signed char) [202]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[203] 0.0 0.00 0.00 200000 void check_shifted_sum<signed char, custom_multiple_constant_divide2<signed char> >(signed char) [203]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[204] 0.0 0.00 0.00 200000 void check_shifted_sum<signed char, custom_multiple_constant_multiply<signed char> >(signed char) [204]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[205] 0.0 0.00 0.00 200000 void check_shifted_sum<unsigned char, custom_constant_or<unsigned char> >(unsigned char) [205]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[206] 0.0 0.00 0.00 200000 void check_shifted_sum<unsigned char, custom_constant_add<unsigned char> >(unsigned char) [206]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[207] 0.0 0.00 0.00 200000 void check_shifted_sum<unsigned char, custom_constant_and<unsigned char> >(unsigned char) [207]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[208] 0.0 0.00 0.00 200000 void check_shifted_sum<unsigned char, custom_constant_sub<unsigned char> >(unsigned char) [208]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[209] 0.0 0.00 0.00 200000 void check_shifted_sum<unsigned char, custom_constant_xor<unsigned char> >(unsigned char) [209]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[210] 0.0 0.00 0.00 200000 void check_shifted_sum<unsigned char, custom_constant_divide<unsigned char> >(unsigned char) [210]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[211] 0.0 0.00 0.00 200000 void check_shifted_sum<unsigned char, custom_constant_multiply<unsigned char> >(unsigned char) [211]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[212] 0.0 0.00 0.00 200000 void check_shifted_sum<unsigned char, custom_multiple_constant_or<unsigned char> >(unsigned char) [212]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[213] 0.0 0.00 0.00 200000 void check_shifted_sum<unsigned char, custom_multiple_constant_add<unsigned char> >(unsigned char) [213]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[214] 0.0 0.00 0.00 200000 void check_shifted_sum<unsigned char, custom_multiple_constant_and<unsigned char> >(unsigned char) [214]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[215] 0.0 0.00 0.00 200000 void check_shifted_sum<unsigned char, custom_multiple_constant_sub<unsigned char> >(unsigned char) [215]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[216] 0.0 0.00 0.00 200000 void check_shifted_sum<unsigned char, custom_multiple_constant_xor<unsigned char> >(unsigned char) [216]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[217] 0.0 0.00 0.00 200000 void check_shifted_sum<unsigned char, custom_multiple_constant_mixed<unsigned char> >(unsigned char) [217]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[218] 0.0 0.00 0.00 200000 void check_shifted_sum<unsigned char, custom_multiple_constant_divide<unsigned char> >(unsigned char) [218]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[219] 0.0 0.00 0.00 200000 void check_shifted_sum<unsigned char, custom_multiple_constant_divide2<unsigned char> >(unsigned char) [219]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[220] 0.0 0.00 0.00 200000 void check_shifted_sum<unsigned char, custom_multiple_constant_multiply<unsigned char> >(unsigned char) [220]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[221] 0.0 0.00 0.00 200000 void check_shifted_sum<unsigned char, custom_multiple_constant_multiply2<unsigned char> >(unsigned char) [221]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[222] 0.0 0.00 0.00 200000 void check_shifted_sum<short, custom_constant_add<short> >(short) [222]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[223] 0.0 0.00 0.00 200000 void check_shifted_sum<short, custom_constant_and<short> >(short) [223]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[224] 0.0 0.00 0.00 200000 void check_shifted_sum<short, custom_constant_sub<short> >(short) [224]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[225] 0.0 0.00 0.00 200000 void check_shifted_sum<short, custom_constant_xor<short> >(short) [225]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[226] 0.0 0.00 0.00 200000 void check_shifted_sum<short, custom_constant_divide<short> >(short) [226]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[227] 0.0 0.00 0.00 200000 void check_shifted_sum<short, custom_constant_multiply<short> >(short) [227]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[228] 0.0 0.00 0.00 200000 void check_shifted_sum<short, custom_multiple_constant_or<short> >(short) [228]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[229] 0.0 0.00 0.00 200000 void check_shifted_sum<short, custom_multiple_constant_sub<short> >(short) [229]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[230] 0.0 0.00 0.00 200000 void check_shifted_sum<short, custom_multiple_constant_xor<short> >(short) [230]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[231] 0.0 0.00 0.00 200000 void check_shifted_sum<short, custom_multiple_constant_mixed<short> >(short) [231]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[232] 0.0 0.00 0.00 200000 void check_shifted_sum<short, custom_multiple_constant_divide<short> >(short) [232]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[233] 0.0 0.00 0.00 200000 void check_shifted_sum<short, custom_multiple_constant_divide2<short> >(short) [233]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[234] 0.0 0.00 0.00 200000 void check_shifted_sum<short, custom_multiple_constant_multiply<short> >(short) [234]
-----------------------------------------------
0.00 0.00 200000/200000 main [1]
[235] 0.0 0.00 0.00 200000 void check_shifted_sum<short, custom_multiple_constant_multiply2<short> >(short) [235]
-----------------------------------------------
0.00 0.00 110/110 main [1]
[236] 0.0 0.00 0.00 110 start_timer() [236]
-----------------------------------------------
0.00 0.00 110/110 main [1]
[237] 0.0 0.00 0.00 110 record_result(double, char const*) [237]
-----------------------------------------------
0.00 0.00 110/110 main [1]
[238] 0.0 0.00 0.00 110 timer() [238]
-----------------------------------------------
0.00 0.00 20/20 main [1]
[239] 0.0 0.00 0.00 20 summarize(char const*, int, int, int, int) [239]
-----------------------------------------------
0.00 0.00 1/1 __do_global_ctors_aux [303]
[240] 0.0 0.00 0.00 1 global constructors keyed to results [240]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[241] 0.0 0.00 0.00 1 void test_constant<int, custom_two<int> >(int*, int, char const*) [241]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[242] 0.0 0.00 0.00 1 void test_constant<int, custom_add_constants<int> >(int*, int, char const*) [242]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[243] 0.0 0.00 0.00 1 void test_constant<int, custom_and_constants<int> >(int*, int, char const*) [243]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[244] 0.0 0.00 0.00 1 void test_constant<int, custom_mod_constants<int> >(int*, int, char const*) [244]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[245] 0.0 0.00 0.00 1 void test_constant<int, custom_sub_constants<int> >(int*, int, char const*) [245]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[246] 0.0 0.00 0.00 1 void test_constant<int, custom_xor_constants<int> >(int*, int, char const*) [246]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[247] 0.0 0.00 0.00 1 void test_constant<int, custom_equal_constants<int> >(int*, int, char const*) [247]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[248] 0.0 0.00 0.00 1 void test_constant<int, custom_divide_constants<int> >(int*, int, char const*) [248]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[249] 0.0 0.00 0.00 1 void test_constant<int, custom_lessthan_constants<int> >(int*, int, char const*) [249]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[250] 0.0 0.00 0.00 1 void test_constant<int, custom_multiply_constants<int> >(int*, int, char const*) [250]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[251] 0.0 0.00 0.00 1 void test_constant<int, custom_notequal_constants<int> >(int*, int, char const*) [251]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[252] 0.0 0.00 0.00 1 void test_constant<int, custom_greaterthan_constants<int> >(int*, int, char const*) [252]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[253] 0.0 0.00 0.00 1 void test_constant<int, custom_lessthanequal_constants<int> >(int*, int, char const*) [253]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[254] 0.0 0.00 0.00 1 void test_constant<int, custom_greaterthanequal_constants<int> >(int*, int, char const*) [254]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[255] 0.0 0.00 0.00 1 void test_constant<unsigned int, custom_add_constants<unsigned int> >(unsigned int*, int, char const*) [255]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[256] 0.0 0.00 0.00 1 void test_constant<unsigned int, custom_and_constants<unsigned int> >(unsigned int*, int, char const*) [256]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[257] 0.0 0.00 0.00 1 void test_constant<unsigned int, custom_mod_constants<unsigned int> >(unsigned int*, int, char const*) [257]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[258] 0.0 0.00 0.00 1 void test_constant<unsigned int, custom_sub_constants<unsigned int> >(unsigned int*, int, char const*) [258]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[259] 0.0 0.00 0.00 1 void test_constant<unsigned int, custom_xor_constants<unsigned int> >(unsigned int*, int, char const*) [259]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[260] 0.0 0.00 0.00 1 void test_constant<unsigned int, custom_equal_constants<unsigned int> >(unsigned int*, int, char const*) [260]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[261] 0.0 0.00 0.00 1 void test_constant<unsigned int, custom_divide_constants<unsigned int> >(unsigned int*, int, char const*) [261]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[262] 0.0 0.00 0.00 1 void test_constant<unsigned int, custom_lessthan_constants<unsigned int> >(unsigned int*, int, char const*) [262]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[263] 0.0 0.00 0.00 1 void test_constant<unsigned int, custom_multiply_constants<unsigned int> >(unsigned int*, int, char const*) [263]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[264] 0.0 0.00 0.00 1 void test_constant<unsigned int, custom_notequal_constants<unsigned int> >(unsigned int*, int, char const*) [264]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[265] 0.0 0.00 0.00 1 void test_constant<unsigned int, custom_greaterthan_constants<unsigned int> >(unsigned int*, int, char const*) [265]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[266] 0.0 0.00 0.00 1 void test_constant<unsigned int, custom_lessthanequal_constants<unsigned int> >(unsigned int*, int, char const*) [266]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[267] 0.0 0.00 0.00 1 void test_constant<unsigned int, custom_greaterthanequal_constants<unsigned int> >(unsigned int*, int, char const*) [267]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[268] 0.0 0.00 0.00 1 void test_constant<long, custom_two<long> >(long*, int, char const*) [268]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[269] 0.0 0.00 0.00 1 void test_constant<long, custom_or_constants<long> >(long*, int, char const*) [269]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[270] 0.0 0.00 0.00 1 void test_constant<long, custom_add_constants<long> >(long*, int, char const*) [270]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[271] 0.0 0.00 0.00 1 void test_constant<long, custom_and_constants<long> >(long*, int, char const*) [271]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[272] 0.0 0.00 0.00 1 void test_constant<long, custom_mod_constants<long> >(long*, int, char const*) [272]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[273] 0.0 0.00 0.00 1 void test_constant<long, custom_sub_constants<long> >(long*, int, char const*) [273]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[274] 0.0 0.00 0.00 1 void test_constant<long, custom_xor_constants<long> >(long*, int, char const*) [274]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[275] 0.0 0.00 0.00 1 void test_constant<long, custom_equal_constants<long> >(long*, int, char const*) [275]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[276] 0.0 0.00 0.00 1 void test_constant<long, custom_divide_constants<long> >(long*, int, char const*) [276]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[277] 0.0 0.00 0.00 1 void test_constant<long, custom_lessthan_constants<long> >(long*, int, char const*) [277]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[278] 0.0 0.00 0.00 1 void test_constant<long, custom_multiply_constants<long> >(long*, int, char const*) [278]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[279] 0.0 0.00 0.00 1 void test_constant<long, custom_notequal_constants<long> >(long*, int, char const*) [279]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[280] 0.0 0.00 0.00 1 void test_constant<long, custom_greaterthan_constants<long> >(long*, int, char const*) [280]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[281] 0.0 0.00 0.00 1 void test_constant<long, custom_lessthanequal_constants<long> >(long*, int, char const*) [281]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[282] 0.0 0.00 0.00 1 void test_constant<long, custom_greaterthanequal_constants<long> >(long*, int, char const*) [282]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[283] 0.0 0.00 0.00 1 void test_constant<unsigned long, custom_two<unsigned long> >(unsigned long*, int, char const*) [283]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[284] 0.0 0.00 0.00 1 void test_constant<unsigned long, custom_or_constants<unsigned long> >(unsigned long*, int, char const*) [284]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[285] 0.0 0.00 0.00 1 void test_constant<unsigned long, custom_add_constants<unsigned long> >(unsigned long*, int, char const*) [285]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[286] 0.0 0.00 0.00 1 void test_constant<unsigned long, custom_and_constants<unsigned long> >(unsigned long*, int, char const*) [286]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[287] 0.0 0.00 0.00 1 void test_constant<unsigned long, custom_mod_constants<unsigned long> >(unsigned long*, int, char const*) [287]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[288] 0.0 0.00 0.00 1 void test_constant<unsigned long, custom_sub_constants<unsigned long> >(unsigned long*, int, char const*) [288]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[289] 0.0 0.00 0.00 1 void test_constant<unsigned long, custom_equal_constants<unsigned long> >(unsigned long*, int, char const*) [289]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[290] 0.0 0.00 0.00 1 void test_constant<unsigned long, custom_divide_constants<unsigned long> >(unsigned long*, int, char const*) [290]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[291] 0.0 0.00 0.00 1 void test_constant<unsigned long, custom_lessthan_constants<unsigned long> >(unsigned long*, int, char const*) [291]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[292] 0.0 0.00 0.00 1 void test_constant<unsigned long, custom_multiply_constants<unsigned long> >(unsigned long*, int, char const*) [292]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[293] 0.0 0.00 0.00 1 void test_constant<unsigned long, custom_notequal_constants<unsigned long> >(unsigned long*, int, char const*) [293]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[294] 0.0 0.00 0.00 1 void test_constant<unsigned long, custom_greaterthan_constants<unsigned long> >(unsigned long*, int, char const*) [294]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[295] 0.0 0.00 0.00 1 void test_constant<unsigned long, custom_lessthanequal_constants<unsigned long> >(unsigned long*, int, char const*) [295]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[296] 0.0 0.00 0.00 1 void test_constant<unsigned long, custom_greaterthanequal_constants<unsigned long> >(unsigned long*, int, char const*) [296]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[297] 0.0 0.00 0.00 1 void test_constant<unsigned short, custom_or_constants<unsigned short> >(unsigned short*, int, char const*) [297]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[298] 0.0 0.00 0.00 1 void test_constant<unsigned short, custom_and_constants<unsigned short> >(unsigned short*, int, char const*) [298]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[299] 0.0 0.00 0.00 1 void test_constant<unsigned short, custom_xor_constants<unsigned short> >(unsigned short*, int, char const*) [299]
-----------------------------------------------
0.00 0.00 1/1 main [1]
[300] 0.0 0.00 0.00 1 void test_constant<unsigned short, custom_lessthanequal_constants<unsigned short> >(unsigned short*, int, char const*) [300]
-----------------------------------------------
0.00 0.00 1/1 __do_global_ctors_aux [303]
[301] 0.0 0.00 0.00 1 __static_initialization_and_destruction_0(int, int) [301]
-----------------------------------------------
This table describes the call tree of the program, and was sorted by
the total amount of time spent in each function and its children.
Each entry in this table consists of several lines. The line with the
index number at the left hand margin lists the current function.
The lines above it list the functions that called this function,
and the lines below it list the functions this one called.
This line lists:
index A unique number given to each element of the table.
Index numbers are sorted numerically.
The index number is printed next to every function name so
it is easier to look up where the function in the table.
% time This is the percentage of the `total' time that was spent
in this function and its children. Note that due to
different viewpoints, functions excluded by options, etc,
these numbers will NOT add up to 100%.
self This is the total amount of time spent in this function.
children This is the total amount of time propagated into this
function by its children.
called This is the number of times the function was called.
If the function called itself recursively, the number
only includes non-recursive calls, and is followed by
a `+' and the number of recursive calls.
name The name of the current function. The index number is
printed after it. If the function is a member of a
cycle, the cycle number is printed between the
function's name and the index number.
For the function's parents, the fields have the following meanings:
self This is the amount of time that was propagated directly
from the function into this parent.
children This is the amount of time that was propagated from
the function's children into this parent.
called This is the number of times this parent called the
function `/' the total number of times the function
was called. Recursive calls to the function are not
included in the number after the `/'.
name This is the name of the parent. The parent's index
number is printed after it. If the parent is a
member of a cycle, the cycle number is printed between
the name and the index number.
If the parents of the function cannot be determined, the word
`<spontaneous>' is printed in the `name' field, and all the other
fields are blank.
For the function's children, the fields have the following meanings:
self This is the amount of time that was propagated directly
from the child into the function.
children This is the amount of time that was propagated from the
child's children to the function.
called This is the number of times the function called
this child `/' the total number of times the child
was called. Recursive calls by the child are not
listed in the number after the `/'.
name This is the name of the child. The child's index
number is printed after it. If the child is a
member of a cycle, the cycle number is printed
between the name and the index number.
If there are any cycles (circles) in the call graph, there is an
entry for the cycle-as-a-whole. This entry shows who called the
cycle (as parents) and the members of the cycle (as children.)
The `+' recursive calls entry shows the number of function calls that
were internal to the cycle, and the calls entry for each member shows,
for that member, how many times it was called from other members of
the cycle.
\f
Index by function name
[240] global constructors keyed to results (simple_types_constant_folding.cpp) [57] void test_constant<long, custom_constant_add<long> >(long*, int, char const*) [122] void check_shifted_sum<signed char, custom_multiply_constants<signed char> >(signed char)
[236] start_timer() [52] void test_constant<long, custom_constant_and<long> >(long*, int, char const*) [123] void check_shifted_sum<signed char, custom_notequal_constants<signed char> >(signed char)
[237] record_result(double, char const*) [69] void test_constant<long, custom_constant_sub<long> >(long*, int, char const*) [197] void check_shifted_sum<signed char, custom_multiple_constant_or<signed char> >(signed char)
[11] void test_constant<double, custom_two<double> >(double*, int, char const*) [53] void test_constant<long, custom_constant_xor<long> >(long*, int, char const*) [160] void check_shifted_sum<signed char, custom_greaterthan_constants<signed char> >(signed char)
[30] void test_constant<double, custom_constant_add<double> >(double*, int, char const*) [269] void test_constant<long, custom_or_constants<long> >(long*, int, char const*) [198] void check_shifted_sum<signed char, custom_multiple_constant_add<signed char> >(signed char)
[31] void test_constant<double, custom_constant_sub<double> >(double*, int, char const*) [270] void test_constant<long, custom_add_constants<long> >(long*, int, char const*) [199] void check_shifted_sum<signed char, custom_multiple_constant_and<signed char> >(signed char)
[5] void test_constant<double, custom_add_constants<double> >(double*, int, char const*) [271] void test_constant<long, custom_and_constants<long> >(long*, int, char const*) [200] void check_shifted_sum<signed char, custom_multiple_constant_sub<signed char> >(signed char)
[12] void test_constant<double, custom_sub_constants<double> >(double*, int, char const*) [272] void test_constant<long, custom_mod_constants<long> >(long*, int, char const*) [201] void check_shifted_sum<signed char, custom_multiple_constant_xor<signed char> >(signed char)
[4] void test_constant<double, custom_constant_divide<double> >(double*, int, char const*) [273] void test_constant<long, custom_sub_constants<long> >(long*, int, char const*) [124] void check_shifted_sum<signed char, custom_lessthanequal_constants<signed char> >(signed char)
[13] void test_constant<double, custom_divide_constants<double> >(double*, int, char const*) [274] void test_constant<long, custom_xor_constants<long> >(long*, int, char const*) [202] void check_shifted_sum<signed char, custom_multiple_constant_mixed<signed char> >(signed char)
[33] void test_constant<double, custom_constant_multiply<double> >(double*, int, char const*) [20] void test_constant<long, custom_constant_divide<long> >(long*, int, char const*) [118] void check_shifted_sum<signed char, custom_multiple_constant_divide<signed char> >(signed char)
[8] void test_constant<double, custom_multiply_constants<double> >(double*, int, char const*) [275] void test_constant<long, custom_equal_constants<long> >(long*, int, char const*) [203] void check_shifted_sum<signed char, custom_multiple_constant_divide2<signed char> >(signed char)
[19] void test_constant<double, custom_multiple_constant_add<double> >(double*, int, char const*) [276] void test_constant<long, custom_divide_constants<long> >(long*, int, char const*) [161] void check_shifted_sum<signed char, custom_greaterthanequal_constants<signed char> >(signed char)
[18] void test_constant<double, custom_multiple_constant_sub<double> >(double*, int, char const*) [40] void test_constant<long, custom_constant_multiply<long> >(long*, int, char const*) [204] void check_shifted_sum<signed char, custom_multiple_constant_multiply<signed char> >(signed char)
[2] void test_constant<double, custom_multiple_constant_divide<double> >(double*, int, char const*) [277] void test_constant<long, custom_lessthan_constants<long> >(long*, int, char const*) [137] void check_shifted_sum<signed char, custom_multiple_constant_multiply2<signed char> >(signed char)
[32] void test_constant<double, custom_multiple_constant_divide2<double> >(double*, int, char const*) [278] void test_constant<long, custom_multiply_constants<long> >(long*, int, char const*) [138] void check_shifted_sum<double, custom_multiple_constant_mixed<double> >(double)
[23] void test_constant<double, custom_multiple_constant_multiply<double> >(double*, int, char const*) [279] void test_constant<long, custom_notequal_constants<long> >(long*, int, char const*) [162] void check_shifted_sum<float, custom_two<float> >(float)
[29] void test_constant<double, custom_multiple_constant_multiply2<double> >(double*, int, char const*) [71] void test_constant<long, custom_multiple_constant_or<long> >(long*, int, char const*) [163] void check_shifted_sum<unsigned char, custom_two<unsigned char> >(unsigned char)
[42] void test_constant<float, custom_constant_add<float> >(float*, int, char const*) [280] void test_constant<long, custom_greaterthan_constants<long> >(long*, int, char const*) [205] void check_shifted_sum<unsigned char, custom_constant_or<unsigned char> >(unsigned char)
[38] void test_constant<float, custom_constant_sub<float> >(float*, int, char const*) [58] void test_constant<long, custom_multiple_constant_add<long> >(long*, int, char const*) [206] void check_shifted_sum<unsigned char, custom_constant_add<unsigned char> >(unsigned char)
[6] void test_constant<float, custom_add_constants<float> >(float*, int, char const*) [72] void test_constant<long, custom_multiple_constant_and<long> >(long*, int, char const*) [207] void check_shifted_sum<unsigned char, custom_constant_and<unsigned char> >(unsigned char)
[9] void test_constant<float, custom_sub_constants<float> >(float*, int, char const*) [67] void test_constant<long, custom_multiple_constant_sub<long> >(long*, int, char const*) [208] void check_shifted_sum<unsigned char, custom_constant_sub<unsigned char> >(unsigned char)
[14] void test_constant<float, custom_constant_divide<float> >(float*, int, char const*) [59] void test_constant<long, custom_multiple_constant_xor<long> >(long*, int, char const*) [209] void check_shifted_sum<unsigned char, custom_constant_xor<unsigned char> >(unsigned char)
[7] void test_constant<float, custom_divide_constants<float> >(float*, int, char const*) [281] void test_constant<long, custom_lessthanequal_constants<long> >(long*, int, char const*) [125] void check_shifted_sum<unsigned char, custom_or_constants<unsigned char> >(unsigned char)
[34] void test_constant<float, custom_constant_multiply<float> >(float*, int, char const*) [113] void test_constant<long, custom_multiple_constant_mixed<long> >(long*, int, char const*) [164] void check_shifted_sum<unsigned char, custom_add_constants<unsigned char> >(unsigned char)
[10] void test_constant<float, custom_multiply_constants<float> >(float*, int, char const*) [16] void test_constant<long, custom_multiple_constant_divide<long> >(long*, int, char const*) [165] void check_shifted_sum<unsigned char, custom_and_constants<unsigned char> >(unsigned char)
[22] void test_constant<float, custom_multiple_constant_add<float> >(float*, int, char const*) [60] void test_constant<long, custom_multiple_constant_divide2<long> >(long*, int, char const*) [166] void check_shifted_sum<unsigned char, custom_mod_constants<unsigned char> >(unsigned char)
[21] void test_constant<float, custom_multiple_constant_sub<float> >(float*, int, char const*) [282] void test_constant<long, custom_greaterthanequal_constants<long> >(long*, int, char const*) [167] void check_shifted_sum<unsigned char, custom_sub_constants<unsigned char> >(unsigned char)
[39] void test_constant<float, custom_multiple_constant_mixed<float> >(float*, int, char const*) [35] void test_constant<long, custom_multiple_constant_multiply<long> >(long*, int, char const*) [168] void check_shifted_sum<unsigned char, custom_xor_constants<unsigned char> >(unsigned char)
[3] void test_constant<float, custom_multiple_constant_divide<float> >(float*, int, char const*) [61] void test_constant<long, custom_multiple_constant_multiply2<long> >(long*, int, char const*) [210] void check_shifted_sum<unsigned char, custom_constant_divide<unsigned char> >(unsigned char)
[45] void test_constant<float, custom_multiple_constant_divide2<float> >(float*, int, char const*) [283] void test_constant<unsigned long, custom_two<unsigned long> >(unsigned long*, int, char const*) [169] void check_shifted_sum<unsigned char, custom_equal_constants<unsigned char> >(unsigned char)
[26] void test_constant<float, custom_multiple_constant_multiply<float> >(float*, int, char const*) [73] void test_constant<unsigned long, custom_constant_or<unsigned long> >(unsigned long*, int, char const*) [170] void check_shifted_sum<unsigned char, custom_divide_constants<unsigned char> >(unsigned char)
[43] void test_constant<float, custom_multiple_constant_multiply2<float> >(float*, int, char const*) [74] void test_constant<unsigned long, custom_constant_add<unsigned long> >(unsigned long*, int, char const*) [211] void check_shifted_sum<unsigned char, custom_constant_multiply<unsigned char> >(unsigned char)
[241] void test_constant<int, custom_two<int> >(int*, int, char const*) [62] void test_constant<unsigned long, custom_constant_and<unsigned long> >(unsigned long*, int, char const*) [171] void check_shifted_sum<unsigned char, custom_lessthan_constants<unsigned char> >(unsigned char)
[84] void test_constant<int, custom_constant_or<int> >(int*, int, char const*) [68] void test_constant<unsigned long, custom_constant_sub<unsigned long> >(unsigned long*, int, char const*) [172] void check_shifted_sum<unsigned char, custom_multiply_constants<unsigned char> >(unsigned char)
[98] void test_constant<int, custom_constant_add<int> >(int*, int, char const*) [54] void test_constant<unsigned long, custom_constant_xor<unsigned long> >(unsigned long*, int, char const*) [173] void check_shifted_sum<unsigned char, custom_notequal_constants<unsigned char> >(unsigned char)
[85] void test_constant<int, custom_constant_and<int> >(int*, int, char const*) [284] void test_constant<unsigned long, custom_or_constants<unsigned long> >(unsigned long*, int, char const*) [212] void check_shifted_sum<unsigned char, custom_multiple_constant_or<unsigned char> >(unsigned char)
[86] void test_constant<int, custom_constant_sub<int> >(int*, int, char const*) [285] void test_constant<unsigned long, custom_add_constants<unsigned long> >(unsigned long*, int, char const*) [174] void check_shifted_sum<unsigned char, custom_greaterthan_constants<unsigned char> >(unsigned char)
[99] void test_constant<int, custom_constant_xor<int> >(int*, int, char const*) [286] void test_constant<unsigned long, custom_and_constants<unsigned long> >(unsigned long*, int, char const*) [213] void check_shifted_sum<unsigned char, custom_multiple_constant_add<unsigned char> >(unsigned char)
[140] void test_constant<int, custom_or_constants<int> >(int*, int, char const*) [287] void test_constant<unsigned long, custom_mod_constants<unsigned long> >(unsigned long*, int, char const*) [214] void check_shifted_sum<unsigned char, custom_multiple_constant_and<unsigned char> >(unsigned char)
[242] void test_constant<int, custom_add_constants<int> >(int*, int, char const*) [288] void test_constant<unsigned long, custom_sub_constants<unsigned long> >(unsigned long*, int, char const*) [215] void check_shifted_sum<unsigned char, custom_multiple_constant_sub<unsigned char> >(unsigned char)
[243] void test_constant<int, custom_and_constants<int> >(int*, int, char const*) [142] void test_constant<unsigned long, custom_xor_constants<unsigned long> >(unsigned long*, int, char const*) [216] void check_shifted_sum<unsigned char, custom_multiple_constant_xor<unsigned char> >(unsigned char)
[244] void test_constant<int, custom_mod_constants<int> >(int*, int, char const*) [27] void test_constant<unsigned long, custom_constant_divide<unsigned long> >(unsigned long*, int, char const*) [126] void check_shifted_sum<unsigned char, custom_lessthanequal_constants<unsigned char> >(unsigned char)
[245] void test_constant<int, custom_sub_constants<int> >(int*, int, char const*) [289] void test_constant<unsigned long, custom_equal_constants<unsigned long> >(unsigned long*, int, char const*) [217] void check_shifted_sum<unsigned char, custom_multiple_constant_mixed<unsigned char> >(unsigned char)
[246] void test_constant<int, custom_xor_constants<int> >(int*, int, char const*) [290] void test_constant<unsigned long, custom_divide_constants<unsigned long> >(unsigned long*, int, char const*) [218] void check_shifted_sum<unsigned char, custom_multiple_constant_divide<unsigned char> >(unsigned char)
[17] void test_constant<int, custom_constant_divide<int> >(int*, int, char const*) [41] void test_constant<unsigned long, custom_constant_multiply<unsigned long> >(unsigned long*, int, char const*) [219] void check_shifted_sum<unsigned char, custom_multiple_constant_divide2<unsigned char> >(unsigned char)
[247] void test_constant<int, custom_equal_constants<int> >(int*, int, char const*) [291] void test_constant<unsigned long, custom_lessthan_constants<unsigned long> >(unsigned long*, int, char const*) [175] void check_shifted_sum<unsigned char, custom_greaterthanequal_constants<unsigned char> >(unsigned char)
[248] void test_constant<int, custom_divide_constants<int> >(int*, int, char const*) [292] void test_constant<unsigned long, custom_multiply_constants<unsigned long> >(unsigned long*, int, char const*) [220] void check_shifted_sum<unsigned char, custom_multiple_constant_multiply<unsigned char> >(unsigned char)
[48] void test_constant<int, custom_constant_multiply<int> >(int*, int, char const*) [293] void test_constant<unsigned long, custom_notequal_constants<unsigned long> >(unsigned long*, int, char const*) [221] void check_shifted_sum<unsigned char, custom_multiple_constant_multiply2<unsigned char> >(unsigned char)
[249] void test_constant<int, custom_lessthan_constants<int> >(int*, int, char const*) [63] void test_constant<unsigned long, custom_multiple_constant_or<unsigned long> >(unsigned long*, int, char const*) [176] void check_shifted_sum<unsigned int, custom_two<unsigned int> >(unsigned int)
[250] void test_constant<int, custom_multiply_constants<int> >(int*, int, char const*) [294] void test_constant<unsigned long, custom_greaterthan_constants<unsigned long> >(unsigned long*, int, char const*) [127] void check_shifted_sum<short, custom_two<short> >(short)
[251] void test_constant<int, custom_notequal_constants<int> >(int*, int, char const*) [64] void test_constant<unsigned long, custom_multiple_constant_add<unsigned long> >(unsigned long*, int, char const*) [145] void check_shifted_sum<short, custom_constant_or<short> >(short)
[100] void test_constant<int, custom_multiple_constant_or<int> >(int*, int, char const*) [65] void test_constant<unsigned long, custom_multiple_constant_and<unsigned long> >(unsigned long*, int, char const*) [222] void check_shifted_sum<short, custom_constant_add<short> >(short)
[252] void test_constant<int, custom_greaterthan_constants<int> >(int*, int, char const*) [75] void test_constant<unsigned long, custom_multiple_constant_sub<unsigned long> >(unsigned long*, int, char const*) [223] void check_shifted_sum<short, custom_constant_and<short> >(short)
[101] void test_constant<int, custom_multiple_constant_add<int> >(int*, int, char const*) [70] void test_constant<unsigned long, custom_multiple_constant_xor<unsigned long> >(unsigned long*, int, char const*) [224] void check_shifted_sum<short, custom_constant_sub<short> >(short)
[107] void test_constant<int, custom_multiple_constant_and<int> >(int*, int, char const*) [295] void test_constant<unsigned long, custom_lessthanequal_constants<unsigned long> >(unsigned long*, int, char const*) [225] void check_shifted_sum<short, custom_constant_xor<short> >(short)
[108] void test_constant<int, custom_multiple_constant_sub<int> >(int*, int, char const*) [116] void test_constant<unsigned long, custom_multiple_constant_mixed<unsigned long> >(unsigned long*, int, char const*) [128] void check_shifted_sum<short, custom_or_constants<short> >(short)
[87] void test_constant<int, custom_multiple_constant_xor<int> >(int*, int, char const*) [28] void test_constant<unsigned long, custom_multiple_constant_divide<unsigned long> >(unsigned long*, int, char const*) [177] void check_shifted_sum<short, custom_add_constants<short> >(short)
[253] void test_constant<int, custom_lessthanequal_constants<int> >(int*, int, char const*) [55] void test_constant<unsigned long, custom_multiple_constant_divide2<unsigned long> >(unsigned long*, int, char const*) [178] void check_shifted_sum<short, custom_and_constants<short> >(short)
[114] void test_constant<int, custom_multiple_constant_mixed<int> >(int*, int, char const*) [296] void test_constant<unsigned long, custom_greaterthanequal_constants<unsigned long> >(unsigned long*, int, char const*) [129] void check_shifted_sum<short, custom_mod_constants<short> >(short)
[15] void test_constant<int, custom_multiple_constant_divide<int> >(int*, int, char const*) [44] void test_constant<unsigned long, custom_multiple_constant_multiply<unsigned long> >(unsigned long*, int, char const*) [179] void check_shifted_sum<short, custom_sub_constants<short> >(short)
[109] void test_constant<int, custom_multiple_constant_divide2<int> >(int*, int, char const*) [66] void test_constant<unsigned long, custom_multiple_constant_multiply2<unsigned long> >(unsigned long*, int, char const*) [180] void check_shifted_sum<short, custom_xor_constants<short> >(short)
[254] void test_constant<int, custom_greaterthanequal_constants<int> >(int*, int, char const*) [82] void test_constant<unsigned short, custom_constant_or<unsigned short> >(unsigned short*, int, char const*) [226] void check_shifted_sum<short, custom_constant_divide<short> >(short)
[50] void test_constant<int, custom_multiple_constant_multiply<int> >(int*, int, char const*) [78] void test_constant<unsigned short, custom_constant_add<unsigned short> >(unsigned short*, int, char const*) [181] void check_shifted_sum<short, custom_equal_constants<short> >(short)
[97] void test_constant<int, custom_multiple_constant_multiply2<int> >(int*, int, char const*) [79] void test_constant<unsigned short, custom_constant_and<unsigned short> >(unsigned short*, int, char const*) [182] void check_shifted_sum<short, custom_divide_constants<short> >(short)
[102] void test_constant<unsigned int, custom_constant_or<unsigned int> >(unsigned int*, int, char const*) [80] void test_constant<unsigned short, custom_constant_sub<unsigned short> >(unsigned short*, int, char const*) [227] void check_shifted_sum<short, custom_constant_multiply<short> >(short)
[103] void test_constant<unsigned int, custom_constant_add<unsigned int> >(unsigned int*, int, char const*) [93] void test_constant<unsigned short, custom_constant_xor<unsigned short> >(unsigned short*, int, char const*) [130] void check_shifted_sum<short, custom_lessthan_constants<short> >(short)
[110] void test_constant<unsigned int, custom_constant_and<unsigned int> >(unsigned int*, int, char const*) [297] void test_constant<unsigned short, custom_or_constants<unsigned short> >(unsigned short*, int, char const*) [183] void check_shifted_sum<short, custom_multiply_constants<short> >(short)
[88] void test_constant<unsigned int, custom_constant_sub<unsigned int> >(unsigned int*, int, char const*) [298] void test_constant<unsigned short, custom_and_constants<unsigned short> >(unsigned short*, int, char const*) [117] void check_shifted_sum<short, custom_notequal_constants<short> >(short)
[111] void test_constant<unsigned int, custom_constant_xor<unsigned int> >(unsigned int*, int, char const*) [299] void test_constant<unsigned short, custom_xor_constants<unsigned short> >(unsigned short*, int, char const*) [228] void check_shifted_sum<short, custom_multiple_constant_or<short> >(short)
[141] void test_constant<unsigned int, custom_or_constants<unsigned int> >(unsigned int*, int, char const*) [47] void test_constant<unsigned short, custom_constant_divide<unsigned short> >(unsigned short*, int, char const*) [184] void check_shifted_sum<short, custom_greaterthan_constants<short> >(short)
[255] void test_constant<unsigned int, custom_add_constants<unsigned int> >(unsigned int*, int, char const*) [37] void test_constant<unsigned short, custom_constant_multiply<unsigned short> >(unsigned short*, int, char const*) [139] void check_shifted_sum<short, custom_multiple_constant_add<short> >(short)
[256] void test_constant<unsigned int, custom_and_constants<unsigned int> >(unsigned int*, int, char const*) [76] void test_constant<unsigned short, custom_multiple_constant_or<unsigned short> >(unsigned short*, int, char const*) [146] void check_shifted_sum<short, custom_multiple_constant_and<short> >(short)
[257] void test_constant<unsigned int, custom_mod_constants<unsigned int> >(unsigned int*, int, char const*) [94] void test_constant<unsigned short, custom_multiple_constant_add<unsigned short> >(unsigned short*, int, char const*) [229] void check_shifted_sum<short, custom_multiple_constant_sub<short> >(short)
[258] void test_constant<unsigned int, custom_sub_constants<unsigned int> >(unsigned int*, int, char const*) [83] void test_constant<unsigned short, custom_multiple_constant_and<unsigned short> >(unsigned short*, int, char const*) [230] void check_shifted_sum<short, custom_multiple_constant_xor<short> >(short)
[259] void test_constant<unsigned int, custom_xor_constants<unsigned int> >(unsigned int*, int, char const*) [95] void test_constant<unsigned short, custom_multiple_constant_sub<unsigned short> >(unsigned short*, int, char const*) [185] void check_shifted_sum<short, custom_lessthanequal_constants<short> >(short)
[24] void test_constant<unsigned int, custom_constant_divide<unsigned int> >(unsigned int*, int, char const*) [81] void test_constant<unsigned short, custom_multiple_constant_xor<unsigned short> >(unsigned short*, int, char const*) [231] void check_shifted_sum<short, custom_multiple_constant_mixed<short> >(short)
[260] void test_constant<unsigned int, custom_equal_constants<unsigned int> >(unsigned int*, int, char const*) [300] void test_constant<unsigned short, custom_lessthanequal_constants<unsigned short> >(unsigned short*, int, char const*) [232] void check_shifted_sum<short, custom_multiple_constant_divide<short> >(short)
[261] void test_constant<unsigned int, custom_divide_constants<unsigned int> >(unsigned int*, int, char const*) [112] void test_constant<unsigned short, custom_multiple_constant_mixed<unsigned short> >(unsigned short*, int, char const*) [233] void check_shifted_sum<short, custom_multiple_constant_divide2<short> >(short)
[49] void test_constant<unsigned int, custom_constant_multiply<unsigned int> >(unsigned int*, int, char const*) [46] void test_constant<unsigned short, custom_multiple_constant_divide<unsigned short> >(unsigned short*, int, char const*) [131] void check_shifted_sum<short, custom_greaterthanequal_constants<short> >(short)
[262] void test_constant<unsigned int, custom_lessthan_constants<unsigned int> >(unsigned int*, int, char const*) [77] void test_constant<unsigned short, custom_multiple_constant_divide2<unsigned short> >(unsigned short*, int, char const*) [234] void check_shifted_sum<short, custom_multiple_constant_multiply<short> >(short)
[263] void test_constant<unsigned int, custom_multiply_constants<unsigned int> >(unsigned int*, int, char const*) [36] void test_constant<unsigned short, custom_multiple_constant_multiply<unsigned short> >(unsigned short*, int, char const*) [235] void check_shifted_sum<short, custom_multiple_constant_multiply2<short> >(short)
[264] void test_constant<unsigned int, custom_notequal_constants<unsigned int> >(unsigned int*, int, char const*) [96] void test_constant<unsigned short, custom_multiple_constant_multiply2<unsigned short> >(unsigned short*, int, char const*) [186] void check_shifted_sum<unsigned short, custom_two<unsigned short> >(unsigned short)
[89] void test_constant<unsigned int, custom_multiple_constant_or<unsigned int> >(unsigned int*, int, char const*) [155] void check_shifted_sum<signed char, custom_two<signed char> >(signed char) [187] void check_shifted_sum<unsigned short, custom_add_constants<unsigned short> >(unsigned short)
[265] void test_constant<unsigned int, custom_greaterthan_constants<unsigned int> >(unsigned int*, int, char const*) [190] void check_shifted_sum<signed char, custom_constant_or<signed char> >(signed char) [132] void check_shifted_sum<unsigned short, custom_mod_constants<unsigned short> >(unsigned short)
[104] void test_constant<unsigned int, custom_multiple_constant_add<unsigned int> >(unsigned int*, int, char const*) [191] void check_shifted_sum<signed char, custom_constant_add<signed char> >(signed char) [188] void check_shifted_sum<unsigned short, custom_sub_constants<unsigned short> >(unsigned short)
[90] void test_constant<unsigned int, custom_multiple_constant_and<unsigned int> >(unsigned int*, int, char const*) [192] void check_shifted_sum<signed char, custom_constant_and<signed char> >(signed char) [189] void check_shifted_sum<unsigned short, custom_equal_constants<unsigned short> >(unsigned short)
[105] void test_constant<unsigned int, custom_multiple_constant_sub<unsigned int> >(unsigned int*, int, char const*) [193] void check_shifted_sum<signed char, custom_constant_sub<signed char> >(signed char) [143] void check_shifted_sum<unsigned short, custom_divide_constants<unsigned short> >(unsigned short)
[91] void test_constant<unsigned int, custom_multiple_constant_xor<unsigned int> >(unsigned int*, int, char const*) [194] void check_shifted_sum<signed char, custom_constant_xor<signed char> >(signed char) [133] void check_shifted_sum<unsigned short, custom_lessthan_constants<unsigned short> >(unsigned short)
[266] void test_constant<unsigned int, custom_lessthanequal_constants<unsigned int> >(unsigned int*, int, char const*) [119] void check_shifted_sum<signed char, custom_or_constants<signed char> >(signed char) [144] void check_shifted_sum<unsigned short, custom_multiply_constants<unsigned short> >(unsigned short)
[115] void test_constant<unsigned int, custom_multiple_constant_mixed<unsigned int> >(unsigned int*, int, char const*) [120] void check_shifted_sum<signed char, custom_and_constants<signed char> >(signed char) [134] void check_shifted_sum<unsigned short, custom_notequal_constants<unsigned short> >(unsigned short)
[25] void test_constant<unsigned int, custom_multiple_constant_divide<unsigned int> >(unsigned int*, int, char const*) [156] void check_shifted_sum<signed char, custom_mod_constants<signed char> >(signed char) [135] void check_shifted_sum<unsigned short, custom_greaterthan_constants<unsigned short> >(unsigned short)
[106] void test_constant<unsigned int, custom_multiple_constant_divide2<unsigned int> >(unsigned int*, int, char const*) [157] void check_shifted_sum<signed char, custom_xor_constants<signed char> >(signed char) [136] void check_shifted_sum<unsigned short, custom_greaterthanequal_constants<unsigned short> >(unsigned short)
[267] void test_constant<unsigned int, custom_greaterthanequal_constants<unsigned int> >(unsigned int*, int, char const*) [195] void check_shifted_sum<signed char, custom_constant_divide<signed char> >(signed char) [301] __static_initialization_and_destruction_0(int, int) (simple_types_constant_folding.cpp)
[51] void test_constant<unsigned int, custom_multiple_constant_multiply<unsigned int> >(unsigned int*, int, char const*) [158] void check_shifted_sum<signed char, custom_equal_constants<signed char> >(signed char) [238] timer()
[92] void test_constant<unsigned int, custom_multiple_constant_multiply2<unsigned int> >(unsigned int*, int, char const*) [159] void check_shifted_sum<signed char, custom_divide_constants<signed char> >(signed char) [239] summarize(char const*, int, int, int, int)
[268] void test_constant<long, custom_two<long> >(long*, int, char const*) [196] void check_shifted_sum<signed char, custom_constant_multiply<signed char> >(signed char) [1] main
[56] void test_constant<long, custom_constant_or<long> >(long*, int, char const*) [121] void check_shifted_sum<signed char, custom_lessthan_constants<signed char> >(signed char)
[-- Attachment #3: report41 --]
[-- Type: text/plain, Size: 25500 bytes --]
./simple_types_constant_folding
test description absolute operations ratio with
number time per second test0
0 "int8_t constant" 0.07 sec 228571.43 M 1.00
1 "int8_t add constants" 0.00 sec inf M 0.00
2 "int8_t subtract constants" 0.00 sec inf M 0.00
3 "int8_t multiply constants" 0.08 sec 200000.00 M 1.14
4 "int8_t divide constants" 0.07 sec 228571.43 M 1.00
5 "int8_t mod constants" 0.08 sec 200000.00 M 1.14
6 "int8_t equal constants" 0.08 sec 200000.00 M 1.14
7 "int8_t notequal constants" 0.07 sec 228571.43 M 1.00
8 "int8_t greater than constants" 0.08 sec 200000.00 M 1.14
9 "int8_t less than constants" 0.07 sec 228571.43 M 1.00
10 "int8_t greater than equal constants" 0.08 sec 200000.00 M 1.14
11 "int8_t less than equal constants" 0.08 sec 200000.00 M 1.14
12 "int8_t and constants" 0.07 sec 228571.43 M 1.00
13 "int8_t or constants" 0.08 sec 200000.00 M 1.14
14 "int8_t xor constants" 0.07 sec 228571.43 M 1.00
Total absolute time for int8_t simple constant folding: 0.98 sec
test description absolute operations ratio with
number time per second test0
0 "int8_t constant add" 1.35 sec 1185.19 M 1.00
1 "int8_t multiple constant adds" 1.35 sec 1185.19 M 1.00
2 "int8_t constant subtract" 1.35 sec 1185.19 M 1.00
3 "int8_t multiple constant subtracts" 1.35 sec 1185.19 M 1.00
4 "int8_t constant multiply" 1.69 sec 946.75 M 1.25
5 "int8_t multiple constant multiplies" 1.68 sec 952.38 M 1.24
6 "int8_t multiple constant multiply2" 1.35 sec 1185.19 M 1.00
7 "int8_t constant divide" 3.86 sec 414.51 M 2.86
8 "int8_t multiple constant divides" 6.03 sec 265.34 M 4.47
9 "int8_t multiple constant divide2" 1.35 sec 1185.19 M 1.00
10 "int8_t multiple constant mixed" 0.97 sec 1649.48 M 0.72
11 "int8_t constant and" 1.35 sec 1185.19 M 1.00
12 "int8_t multiple constant and" 1.35 sec 1185.19 M 1.00
13 "int8_t constant or" 1.34 sec 1194.03 M 0.99
14 "int8_t multiple constant or" 1.35 sec 1185.19 M 1.00
15 "int8_t constant xor" 1.35 sec 1185.19 M 1.00
16 "int8_t multiple constant xor" 1.35 sec 1185.19 M 1.00
Total absolute time for int8_t constant folding: 30.42 sec
test description absolute operations ratio with
number time per second test0
0 "uint8_t constant" 0.07 sec 228571.43 M 1.00
1 "uint8_t add constants" 0.07 sec 228571.43 M 1.00
2 "uint8_t subtract constants" 0.08 sec 200000.00 M 1.14
3 "uint8_t multiply constants" 0.07 sec 228571.43 M 1.00
4 "uint8_t divide constants" 0.08 sec 200000.00 M 1.14
5 "uint8_t mod constants" 0.07 sec 228571.43 M 1.00
6 "uint8_t equal constants" 0.08 sec 200000.00 M 1.14
7 "uint8_t notequal constants" 0.07 sec 228571.43 M 1.00
8 "uint8_t greater than constants" 0.08 sec 200000.00 M 1.14
9 "uint8_t less than constants" 0.07 sec 228571.43 M 1.00
10 "uint8_t greater than equal constants" 0.08 sec 200000.00 M 1.14
11 "uint8_t less than equal constants" 0.07 sec 228571.43 M 1.00
12 "uint8_t and constants" 0.08 sec 200000.00 M 1.14
13 "uint8_t or constants" 0.07 sec 228571.43 M 1.00
14 "uint8_t xor constants" 0.08 sec 200000.00 M 1.14
Total absolute time for uint8_t simple constant folding: 1.12 sec
test description absolute operations ratio with
number time per second test0
0 "uint8_t constant add" 1.34 sec 1194.03 M 1.00
1 "uint8_t multiple constant adds" 1.35 sec 1185.19 M 1.01
2 "uint8_t constant subtract" 1.35 sec 1185.19 M 1.01
3 "uint8_t multiple constant subtracts" 1.35 sec 1185.19 M 1.01
4 "uint8_t constant multiply" 1.68 sec 952.38 M 1.25
5 "uint8_t multiple constant multiplies" 1.69 sec 946.75 M 1.26
6 "uint8_t multiple constant multiply2" 1.34 sec 1194.03 M 1.00
7 "uint8_t constant divide" 3.53 sec 453.26 M 2.63
8 "uint8_t multiple constant divides" 3.52 sec 454.55 M 2.63
9 "uint8_t multiple constant divide2" 1.34 sec 1194.03 M 1.00
10 "uint8_t multiple constant mixed" 0.98 sec 1632.65 M 0.73
11 "uint8_t constant and" 1.34 sec 1194.03 M 1.00
12 "uint8_t multiple constant and" 1.35 sec 1185.19 M 1.01
13 "uint8_t constant or" 1.35 sec 1185.19 M 1.01
14 "uint8_t multiple constant or" 1.35 sec 1185.19 M 1.01
15 "uint8_t constant xor" 1.34 sec 1194.03 M 1.00
16 "uint8_t multiple constant xor" 1.35 sec 1185.19 M 1.01
Total absolute time for uint8_t constant folding: 27.55 sec
test description absolute operations ratio with
number time per second test0
0 "int16_t constant" 0.08 sec 200000.00 M 1.00
1 "int16_t add constants" 0.07 sec 228571.43 M 0.88
2 "int16_t subtract constants" 0.08 sec 200000.00 M 1.00
3 "int16_t multiply constants" 0.07 sec 228571.43 M 0.88
4 "int16_t divide constants" 0.08 sec 200000.00 M 1.00
5 "int16_t mod constants" 0.08 sec 200000.00 M 1.00
6 "int16_t equal constants" 0.07 sec 228571.43 M 0.88
7 "int16_t notequal constants" 0.08 sec 200000.00 M 1.00
8 "int16_t greater than constants" 0.07 sec 228571.43 M 0.88
9 "int16_t less than constants" 0.08 sec 200000.00 M 1.00
10 "int16_t greater than equal constants" 0.07 sec 228571.43 M 0.88
11 "int16_t less than equal constants" 0.08 sec 200000.00 M 1.00
12 "int16_t and constants" 0.08 sec 200000.00 M 1.00
13 "int16_t or constants" 0.07 sec 228571.43 M 0.88
14 "int16_t xor constants" 0.08 sec 200000.00 M 1.00
Total absolute time for int16_t simple constant folding: 1.14 sec
test description absolute operations ratio with
number time per second test0
0 "int16_t constant add" 1.35 sec 1185.19 M 1.00
1 "int16_t multiple constant adds" 1.35 sec 1185.19 M 1.00
2 "int16_t constant subtract" 1.34 sec 1194.03 M 0.99
3 "int16_t multiple constant subtracts" 1.35 sec 1185.19 M 1.00
4 "int16_t constant multiply" 1.76 sec 909.09 M 1.30
5 "int16_t multiple constant multiplies" 1.77 sec 903.95 M 1.31
6 "int16_t multiple constant multiply2" 1.34 sec 1194.03 M 0.99
7 "int16_t constant divide" 3.86 sec 414.51 M 2.86
8 "int16_t multiple constant divides" 4.03 sec 397.02 M 2.99
9 "int16_t multiple constant divide2" 1.34 sec 1194.03 M 0.99
10 "int16_t multiple constant mixed" 0.98 sec 1632.65 M 0.73
11 "int16_t constant and" 1.34 sec 1194.03 M 0.99
12 "int16_t multiple constant and" 1.35 sec 1185.19 M 1.00
13 "int16_t constant or" 1.35 sec 1185.19 M 1.00
14 "int16_t multiple constant or" 1.35 sec 1185.19 M 1.00
15 "int16_t constant xor" 1.35 sec 1185.19 M 1.00
16 "int16_t multiple constant xor" 1.35 sec 1185.19 M 1.00
Total absolute time for int16_t constant folding: 28.56 sec
test description absolute operations ratio with
number time per second test0
0 "uint16_t constant" 0.07 sec 228571.43 M 1.00
1 "uint16_t add constants" 0.08 sec 200000.00 M 1.14
2 "uint16_t subtract constants" 0.07 sec 228571.43 M 1.00
3 "uint16_t multiply constants" 0.08 sec 200000.00 M 1.14
4 "uint16_t divide constants" 0.07 sec 228571.43 M 1.00
5 "uint16_t mod constants" 0.08 sec 200000.00 M 1.14
6 "uint16_t equal constants" 0.07 sec 228571.43 M 1.00
7 "uint16_t notequal constants" 0.08 sec 200000.00 M 1.14
8 "uint16_t greater than constants" 0.07 sec 228571.43 M 1.00
9 "uint16_t less than constants" 0.08 sec 200000.00 M 1.14
10 "uint16_t greater than equal constants" 0.07 sec 228571.43 M 1.00
11 "uint16_t less than equal constants" 0.00 sec inf M 0.00
12 "uint16_t and constants" 0.01 sec 1600000.00 M 0.14
13 "uint16_t or constants" 0.00 sec inf M 0.00
14 "uint16_t xor constants" 0.00 sec inf M 0.00
Total absolute time for uint16_t simple constant folding: 0.83 sec
test description absolute operations ratio with
number time per second test0
0 "uint16_t constant add" 1.52 sec 1052.63 M 1.00
1 "uint16_t multiple constant adds" 1.53 sec 1045.75 M 1.01
2 "uint16_t constant subtract" 1.52 sec 1052.63 M 1.00
3 "uint16_t multiple constant subtracts" 1.52 sec 1052.63 M 1.00
4 "uint16_t constant multiply" 2.04 sec 784.31 M 1.34
5 "uint16_t multiple constant multiplies" 2.03 sec 788.18 M 1.34
6 "uint16_t multiple constant multiply2" 1.52 sec 1052.63 M 1.00
7 "uint16_t constant divide" 1.96 sec 816.33 M 1.29
8 "uint16_t multiple constant divides" 1.97 sec 812.18 M 1.30
9 "uint16_t multiple constant divide2" 1.53 sec 1045.75 M 1.01
10 "uint16_t multiple constant mixed" 1.35 sec 1185.19 M 0.89
11 "uint16_t constant and" 1.54 sec 1038.96 M 1.01
12 "uint16_t multiple constant and" 1.52 sec 1052.63 M 1.00
13 "uint16_t constant or" 1.53 sec 1045.75 M 1.01
14 "uint16_t multiple constant or" 1.54 sec 1038.96 M 1.01
15 "uint16_t constant xor" 1.52 sec 1052.63 M 1.00
16 "uint16_t multiple constant xor" 1.53 sec 1045.75 M 1.01
Total absolute time for uint16_t constant folding: 27.67 sec
test description absolute operations ratio with
number time per second test0
0 "int32_t constant" 0.00 sec inf M nan
1 "int32_t add constants" 0.00 sec inf M nan
2 "int32_t subtract constants" 0.00 sec inf M nan
3 "int32_t multiply constants" 0.00 sec inf M nan
4 "int32_t divide constants" 0.00 sec inf M nan
5 "int32_t mod constants" 0.00 sec inf M nan
6 "int32_t equal constants" 0.00 sec inf M nan
7 "int32_t notequal constants" 0.00 sec inf M nan
8 "int32_t greater than constants" 0.00 sec inf M nan
9 "int32_t less than constants" 0.00 sec inf M nan
10 "int32_t greater than equal constants" 0.00 sec inf M nan
11 "int32_t less than equal constants" 0.00 sec inf M nan
12 "int32_t and constants" 0.00 sec inf M nan
13 "int32_t or constants" 0.01 sec 1600000.00 M inf
14 "int32_t xor constants" 0.00 sec inf M nan
Total absolute time for int32_t simple constant folding: 0.01 sec
test description absolute operations ratio with
number time per second test0
0 "int32_t constant add" 1.51 sec 1059.60 M 1.00
1 "int32_t multiple constant adds" 1.51 sec 1059.60 M 1.00
2 "int32_t constant subtract" 1.51 sec 1059.60 M 1.00
3 "int32_t multiple constant subtracts" 1.51 sec 1059.60 M 1.00
4 "int32_t constant multiply" 1.94 sec 824.74 M 1.28
5 "int32_t multiple constant multiplies" 1.94 sec 824.74 M 1.28
6 "int32_t multiple constant multiply2" 1.52 sec 1052.63 M 1.01
7 "int32_t constant divide" 3.55 sec 450.70 M 2.35
8 "int32_t multiple constant divides" 3.85 sec 415.58 M 2.55
9 "int32_t multiple constant divide2" 1.51 sec 1059.60 M 1.00
10 "int32_t multiple constant mixed" 1.34 sec 1194.03 M 0.89
11 "int32_t constant and" 1.51 sec 1059.60 M 1.00
12 "int32_t multiple constant and" 1.51 sec 1059.60 M 1.00
13 "int32_t constant or" 1.52 sec 1052.63 M 1.01
14 "int32_t multiple constant or" 1.51 sec 1059.60 M 1.00
15 "int32_t constant xor" 1.51 sec 1059.60 M 1.00
16 "int32_t multiple constant xor" 1.51 sec 1059.60 M 1.00
Total absolute time for int32_t constant folding: 30.76 sec
test description absolute operations ratio with
number time per second test0
0 "uint32_t constant" 0.07 sec 228571.43 M 1.00
1 "uint32_t add constants" 0.01 sec 1600000.00 M 0.14
2 "uint32_t subtract constants" 0.00 sec inf M 0.00
3 "uint32_t multiply constants" 0.00 sec inf M 0.00
4 "uint32_t divide constants" 0.00 sec inf M 0.00
5 "uint32_t mod constants" 0.00 sec inf M 0.00
6 "uint32_t equal constants" 0.00 sec inf M 0.00
7 "uint32_t notequal constants" 0.00 sec inf M 0.00
8 "uint32_t greater than constants" 0.00 sec inf M 0.00
9 "uint32_t less than constants" 0.00 sec inf M 0.00
10 "uint32_t greater than equal constants" 0.00 sec inf M 0.00
11 "uint32_t less than equal constants" 0.00 sec inf M 0.00
12 "uint32_t and constants" 0.00 sec inf M 0.00
13 "uint32_t or constants" 0.01 sec 1600000.00 M 0.14
14 "uint32_t xor constants" 0.00 sec inf M 0.00
Total absolute time for uint32_t simple constant folding: 0.09 sec
test description absolute operations ratio with
number time per second test0
0 "uint32_t constant add" 1.51 sec 1059.60 M 1.00
1 "uint32_t multiple constant adds" 1.51 sec 1059.60 M 1.00
2 "uint32_t constant subtract" 1.51 sec 1059.60 M 1.00
3 "uint32_t multiple constant subtracts" 1.51 sec 1059.60 M 1.00
4 "uint32_t constant multiply" 1.94 sec 824.74 M 1.28
5 "uint32_t multiple constant multiplies" 1.94 sec 824.74 M 1.28
6 "uint32_t multiple constant multiply2" 1.51 sec 1059.60 M 1.00
7 "uint32_t constant divide" 2.78 sec 575.54 M 1.84
8 "uint32_t multiple constant divides" 2.77 sec 577.62 M 1.83
9 "uint32_t multiple constant divide2" 1.51 sec 1059.60 M 1.00
10 "uint32_t multiple constant mixed" 1.34 sec 1194.03 M 0.89
11 "uint32_t constant and" 1.51 sec 1059.60 M 1.00
12 "uint32_t multiple constant and" 1.51 sec 1059.60 M 1.00
13 "uint32_t constant or" 1.51 sec 1059.60 M 1.00
14 "uint32_t multiple constant or" 1.52 sec 1052.63 M 1.01
15 "uint32_t constant xor" 1.51 sec 1059.60 M 1.00
16 "uint32_t multiple constant xor" 1.51 sec 1059.60 M 1.00
Total absolute time for uint32_t constant folding: 28.90 sec
test description absolute operations ratio with
number time per second test0
0 "int64_t constant" 0.00 sec inf M nan
1 "int64_t add constants" 0.00 sec inf M nan
2 "int64_t subtract constants" 0.00 sec inf M nan
3 "int64_t multiply constants" 0.00 sec inf M nan
4 "int64_t divide constants" 0.00 sec inf M nan
5 "int64_t mod constants" 0.00 sec inf M nan
6 "int64_t equal constants" 0.00 sec inf M nan
7 "int64_t notequal constants" 0.00 sec inf M nan
8 "int64_t greater than constants" 0.00 sec inf M nan
9 "int64_t less than constants" 0.00 sec inf M nan
10 "int64_t greater than equal constants" 0.00 sec inf M nan
11 "int64_t less than equal constants" 0.00 sec inf M nan
12 "int64_t and constants" 0.01 sec 1600000.00 M inf
13 "int64_t or constants" 0.00 sec inf M nan
14 "int64_t xor constants" 0.00 sec inf M nan
Total absolute time for int64_t simple constant folding: 0.01 sec
test description absolute operations ratio with
number time per second test0
0 "int64_t constant add" 1.57 sec 1019.11 M 1.00
1 "int64_t multiple constant adds" 1.57 sec 1019.11 M 1.00
2 "int64_t constant subtract" 1.56 sec 1025.64 M 0.99
3 "int64_t multiple constant subtracts" 1.57 sec 1019.11 M 1.00
4 "int64_t constant multiply" 2.03 sec 788.18 M 1.29
5 "int64_t multiple constant multiplies" 2.03 sec 788.18 M 1.29
6 "int64_t multiple constant multiply2" 1.58 sec 1012.66 M 1.01
7 "int64_t constant divide" 3.40 sec 470.59 M 2.17
8 "int64_t multiple constant divides" 3.78 sec 423.28 M 2.41
9 "int64_t multiple constant divide2" 1.57 sec 1019.11 M 1.00
10 "int64_t multiple constant mixed" 1.34 sec 1194.03 M 0.85
11 "int64_t constant and" 1.57 sec 1019.11 M 1.00
12 "int64_t multiple constant and" 1.57 sec 1019.11 M 1.00
13 "int64_t constant or" 1.57 sec 1019.11 M 1.00
14 "int64_t multiple constant or" 1.56 sec 1025.64 M 0.99
15 "int64_t constant xor" 1.57 sec 1019.11 M 1.00
16 "int64_t multiple constant xor" 1.57 sec 1019.11 M 1.00
Total absolute time for int64_t constant folding: 31.41 sec
test description absolute operations ratio with
number time per second test0
0 "uint64_t constant" 0.00 sec inf M nan
1 "uint64_t add constants" 0.00 sec inf M nan
2 "uint64_t subtract constants" 0.00 sec inf M nan
3 "uint64_t multiply constants" 0.00 sec inf M nan
4 "uint64_t divide constants" 0.01 sec 1600000.00 M inf
5 "uint64_t mod constants" 0.00 sec inf M nan
6 "uint64_t equal constants" 0.00 sec inf M nan
7 "uint64_t notequal constants" 0.00 sec inf M nan
8 "uint64_t greater than constants" 0.00 sec inf M nan
9 "uint64_t less than constants" 0.00 sec inf M nan
10 "uint64_t greater than equal constants" 0.00 sec inf M nan
11 "uint64_t less than equal constants" 0.00 sec inf M nan
12 "uint64_t and constants" 0.00 sec inf M nan
13 "uint64_t or constants" 0.00 sec inf M nan
14 "uint64_t xor constants" 0.00 sec inf M nan
Total absolute time for uint64_t simple constant folding: 0.01 sec
test description absolute operations ratio with
number time per second test0
0 "uint64_t constant add" 1.57 sec 1019.11 M 1.00
1 "uint64_t multiple constant adds" 1.57 sec 1019.11 M 1.00
2 "uint64_t constant subtract" 1.57 sec 1019.11 M 1.00
3 "uint64_t multiple constant subtracts" 1.57 sec 1019.11 M 1.00
4 "uint64_t constant multiply" 2.01 sec 796.02 M 1.28
5 "uint64_t multiple constant multiplies" 2.02 sec 792.08 M 1.29
6 "uint64_t multiple constant multiply2" 1.57 sec 1019.11 M 1.00
7 "uint64_t constant divide" 2.68 sec 597.01 M 1.71
8 "uint64_t multiple constant divides" 2.68 sec 597.01 M 1.71
9 "uint64_t multiple constant divide2" 1.58 sec 1012.66 M 1.01
10 "uint64_t multiple constant mixed" 1.34 sec 1194.03 M 0.85
11 "uint64_t constant and" 1.57 sec 1019.11 M 1.00
12 "uint64_t multiple constant and" 1.57 sec 1019.11 M 1.00
13 "uint64_t constant or" 1.57 sec 1019.11 M 1.00
14 "uint64_t multiple constant or" 1.57 sec 1019.11 M 1.00
15 "uint64_t constant xor" 1.57 sec 1019.11 M 1.00
16 "uint64_t multiple constant xor" 1.56 sec 1025.64 M 0.99
Total absolute time for uint64_t constant folding: 29.57 sec
test description absolute operations ratio with
number time per second test0
0 "float constant" 20.17 sec 793.26 M 1.00
1 "float add constants" 20.17 sec 793.26 M 1.00
2 "float subtract constants" 20.09 sec 796.42 M 1.00
3 "float multiply constants" 20.09 sec 796.42 M 1.00
4 "float divide constants" 20.10 sec 796.02 M 1.00
Total absolute time for float simple constant folding: 100.62 sec
test description absolute operations ratio with
number time per second test0
0 "float constant add" 2.01 sec 796.02 M 1.00
1 "float multiple constant adds" 3.36 sec 476.19 M 1.67
2 "float constant subtract" 2.02 sec 792.08 M 1.00
3 "float multiple constant subtracts" 3.38 sec 473.37 M 1.68
4 "float constant multiply" 2.03 sec 788.18 M 1.01
5 "float multiple constant multiplies" 2.71 sec 590.41 M 1.35
6 "float multiple constant multiply2" 2.02 sec 792.08 M 1.00
7 "float constant divide" 11.45 sec 139.74 M 5.70
8 "float multiple constant divides" 22.86 sec 69.99 M 11.37
9 "float multiple constant divide2" 2.01 sec 796.02 M 1.00
10 "float multiple constant mixed" 2.02 sec 792.08 M 1.00
Total absolute time for float constant folding: 55.87 sec
test description absolute operations ratio with
number time per second test0
0 "double constant" 20.10 sec 796.02 M 1.00
1 "double add constants" 20.17 sec 793.26 M 1.00
2 "double subtract constants" 20.09 sec 796.42 M 1.00
3 "double multiply constants" 20.09 sec 796.42 M 1.00
4 "double divide constants" 20.09 sec 796.42 M 1.00
Total absolute time for double simple constant folding: 100.54 sec
test description absolute operations ratio with
number time per second test0
0 "double constant add" 2.07 sec 772.95 M 1.00
1 "double multiple constant adds" 3.52 sec 454.55 M 1.70
2 "double constant subtract" 2.06 sec 776.70 M 1.00
3 "double multiple constant subtracts" 3.54 sec 451.98 M 1.71
4 "double constant multiply" 2.03 sec 788.18 M 0.98
5 "double multiple constant multiplies" 2.89 sec 553.63 M 1.40
6 "double multiple constant multiply2" 2.08 sec 769.23 M 1.00
7 "double constant divide" 20.77 sec 77.03 M 10.03
8 "double multiple constant divides" 41.57 sec 38.49 M 20.08
9 "double multiple constant divide2" 2.06 sec 776.70 M 1.00
10 "double multiple constant mixed" 2.20 sec 727.27 M 1.06
Total absolute time for double constant folding: 84.79 sec
[-- Attachment #4: simple_types_constant_folding.cpp --]
[-- Type: text/plain, Size: 38506 bytes --]
/*
Copyright 2007-2008 Adobe Systems Incorporated
Distributed under the MIT License (see accompanying file LICENSE_1_0_0.txt
or a copy at http://stlab.adobe.com/licenses.html )
Goal: Test compiler optimizations related to constant folding of simple language defined types
Assumptions:
1) the compiler will combine constant calculations into a single constant for simple types
aka constant folding
result = A + B ==> result = constant
result = A - B ==> result = constant
result = A * B ==> result = constant
result = A / B ==> result = constant
result = A % B ==> result = constant for integer types
result = (A == B) ==> result = constant for integer types
result = (A != B) ==> result = constant for integer types
result = (A > B) ==> result = constant for integer types
result = (A < B) ==> result = constant for integer types
result = (A >= B) ==> result = constant for integer types
result = (A <= B) ==> result = constant for integer types
result = (A & B) ==> result = constant for integer types
result = (A | B) ==> result = constant for integer types
result = (A ^ B) ==> result = constant for integer types
result = input + A + B + C + D ==> result = input + (A+B+C+D)
result = input - A - B - C - D ==> result = input - (A+B+C+D)
result = input * A * B * C * D ==> result = input * (A*B*C*D)
result = input + A * B * C * D ==> result = input + (A*B*C*D)
result = ((((input/A) /B) /C) /D) ==> result = input / (A*B*C*D)
result = input + (((A /B) /C) /D) ==> result = input + (A/B/C/D)
result = input & A & B & C & D ==> result = input & (A&B&C&D) for integer types
result = input | A | B | C | D ==> result = input | (A|B|C|D) for integer types
result = input ^ A ^ B ^ C ^ D ==> result = input ^ (A^B^C^D) for integer types
NOTE - in some cases, loop invariant code motion might move the constant calculation out of the inner loop
making it appear that the constants were folded
But in the constant result cases, we want the compiler to recognize the constant and move it out of the loop
*/
/******************************************************************************/
#include "benchmark_stdint.hpp"
#include <cstddef>
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <cmath>
#include "benchmark_results.h"
#include "benchmark_timer.h"
/******************************************************************************/
// this constant may need to be adjusted to give reasonable minimum times
// For best results, times should be about 1.0 seconds for the minimum test run
int base_iterations = 2000000;
int iterations = base_iterations;
// 8000 items, or between 8k and 64k of data
// this is intended to remain within the L2 cache of most common CPUs
const int SIZE = 8000;
// initial value for filling our arrays, may be changed from the command line
double init_value = 1.0;
/******************************************************************************/
// our global arrays of numbers to be operated upon
double dataDouble[SIZE];
float dataFloat[SIZE];
uint64_t data64unsigned[SIZE];
int64_t data64[SIZE];
uint32_t data32unsigned[SIZE];
int32_t data32[SIZE];
uint16_t data16unsigned[SIZE];
int16_t data16[SIZE];
uint8_t data8unsigned[SIZE];
int8_t data8[SIZE];
/******************************************************************************/
#include "benchmark_shared_tests.h"
/******************************************************************************/
int main(int argc, char** argv) {
// output command for documentation:
int i;
for (i = 0; i < argc; ++i)
printf("%s ", argv[i] );
printf("\n");
if (argc > 1) base_iterations = atoi(argv[1]);
if (argc > 2) init_value = (double) atof(argv[2]);
// int8_t
::fill(data8, data8+SIZE, int8_t(init_value));
iterations = base_iterations;
test_constant<int8_t, custom_two<int8_t> >(data8,SIZE,"int8_t constant");
test_constant<int8_t, custom_add_constants<int8_t> >(data8,SIZE,"int8_t add constants");
test_constant<int8_t, custom_sub_constants<int8_t> >(data8,SIZE,"int8_t subtract constants");
test_constant<int8_t, custom_multiply_constants<int8_t> >(data8,SIZE,"int8_t multiply constants");
test_constant<int8_t, custom_divide_constants<int8_t> >(data8,SIZE,"int8_t divide constants");
test_constant<int8_t, custom_mod_constants<int8_t> >(data8,SIZE,"int8_t mod constants");
test_constant<int8_t, custom_equal_constants<int8_t> >(data8,SIZE,"int8_t equal constants");
test_constant<int8_t, custom_notequal_constants<int8_t> >(data8,SIZE,"int8_t notequal constants");
test_constant<int8_t, custom_greaterthan_constants<int8_t> >(data8,SIZE,"int8_t greater than constants");
test_constant<int8_t, custom_lessthan_constants<int8_t> >(data8,SIZE,"int8_t less than constants");
test_constant<int8_t, custom_greaterthanequal_constants<int8_t> >(data8,SIZE,"int8_t greater than equal constants");
test_constant<int8_t, custom_lessthanequal_constants<int8_t> >(data8,SIZE,"int8_t less than equal constants");
test_constant<int8_t, custom_and_constants<int8_t> >(data8,SIZE,"int8_t and constants");
test_constant<int8_t, custom_or_constants<int8_t> >(data8,SIZE,"int8_t or constants");
test_constant<int8_t, custom_xor_constants<int8_t> >(data8,SIZE,"int8_t xor constants");
summarize("int8_t simple constant folding", SIZE, iterations, kDontShowGMeans, kDontShowPenalty );
iterations = base_iterations / 10;
test_constant<int8_t, custom_constant_add<int8_t> >(data8,SIZE,"int8_t constant add");
test_constant<int8_t, custom_multiple_constant_add<int8_t> >(data8,SIZE,"int8_t multiple constant adds");
test_constant<int8_t, custom_constant_sub<int8_t> >(data8,SIZE,"int8_t constant subtract");
test_constant<int8_t, custom_multiple_constant_sub<int8_t> >(data8,SIZE,"int8_t multiple constant subtracts");
test_constant<int8_t, custom_constant_multiply<int8_t> >(data8,SIZE,"int8_t constant multiply");
test_constant<int8_t, custom_multiple_constant_multiply<int8_t> >(data8,SIZE,"int8_t multiple constant multiplies");
test_constant<int8_t, custom_multiple_constant_multiply2<int8_t> >(data8,SIZE,"int8_t multiple constant multiply2");
test_constant<int8_t, custom_constant_divide<int8_t> >(data8,SIZE,"int8_t constant divide");
test_constant<int8_t, custom_multiple_constant_divide<int8_t> >(data8,SIZE,"int8_t multiple constant divides");
test_constant<int8_t, custom_multiple_constant_divide2<int8_t> >(data8,SIZE,"int8_t multiple constant divide2");
test_constant<int8_t, custom_multiple_constant_mixed<int8_t> >(data8,SIZE,"int8_t multiple constant mixed");
test_constant<int8_t, custom_constant_and<int8_t> >(data8,SIZE,"int8_t constant and");
test_constant<int8_t, custom_multiple_constant_and<int8_t> >(data8,SIZE,"int8_t multiple constant and");
test_constant<int8_t, custom_constant_or<int8_t> >(data8,SIZE,"int8_t constant or");
test_constant<int8_t, custom_multiple_constant_or<int8_t> >(data8,SIZE,"int8_t multiple constant or");
test_constant<int8_t, custom_constant_xor<int8_t> >(data8,SIZE,"int8_t constant xor");
test_constant<int8_t, custom_multiple_constant_xor<int8_t> >(data8,SIZE,"int8_t multiple constant xor");
summarize("int8_t constant folding", SIZE, iterations, kDontShowGMeans, kDontShowPenalty );
// unsigned8
::fill(data8unsigned, data8unsigned+SIZE, uint8_t(init_value));
iterations = base_iterations;
test_constant<uint8_t, custom_two<uint8_t> >(data8unsigned,SIZE,"uint8_t constant");
test_constant<uint8_t, custom_add_constants<uint8_t> >(data8unsigned,SIZE,"uint8_t add constants");
test_constant<uint8_t, custom_sub_constants<uint8_t> >(data8unsigned,SIZE,"uint8_t subtract constants");
test_constant<uint8_t, custom_multiply_constants<uint8_t> >(data8unsigned,SIZE,"uint8_t multiply constants");
test_constant<uint8_t, custom_divide_constants<uint8_t> >(data8unsigned,SIZE,"uint8_t divide constants");
test_constant<uint8_t, custom_mod_constants<uint8_t> >(data8unsigned,SIZE,"uint8_t mod constants");
test_constant<uint8_t, custom_equal_constants<uint8_t> >(data8unsigned,SIZE,"uint8_t equal constants");
test_constant<uint8_t, custom_notequal_constants<uint8_t> >(data8unsigned,SIZE,"uint8_t notequal constants");
test_constant<uint8_t, custom_greaterthan_constants<uint8_t> >(data8unsigned,SIZE,"uint8_t greater than constants");
test_constant<uint8_t, custom_lessthan_constants<uint8_t> >(data8unsigned,SIZE,"uint8_t less than constants");
test_constant<uint8_t, custom_greaterthanequal_constants<uint8_t> >(data8unsigned,SIZE,"uint8_t greater than equal constants");
test_constant<uint8_t, custom_lessthanequal_constants<uint8_t> >(data8unsigned,SIZE,"uint8_t less than equal constants");
test_constant<uint8_t, custom_and_constants<uint8_t> >(data8unsigned,SIZE,"uint8_t and constants");
test_constant<uint8_t, custom_or_constants<uint8_t> >(data8unsigned,SIZE,"uint8_t or constants");
test_constant<uint8_t, custom_xor_constants<uint8_t> >(data8unsigned,SIZE,"uint8_t xor constants");
summarize("uint8_t simple constant folding", SIZE, iterations, kDontShowGMeans, kDontShowPenalty );
iterations = base_iterations / 10;
test_constant<uint8_t, custom_constant_add<uint8_t> >(data8unsigned,SIZE,"uint8_t constant add");
test_constant<uint8_t, custom_multiple_constant_add<uint8_t> >(data8unsigned,SIZE,"uint8_t multiple constant adds");
test_constant<uint8_t, custom_constant_sub<uint8_t> >(data8unsigned,SIZE,"uint8_t constant subtract");
test_constant<uint8_t, custom_multiple_constant_sub<uint8_t> >(data8unsigned,SIZE,"uint8_t multiple constant subtracts");
test_constant<uint8_t, custom_constant_multiply<uint8_t> >(data8unsigned,SIZE,"uint8_t constant multiply");
test_constant<uint8_t, custom_multiple_constant_multiply<uint8_t> >(data8unsigned,SIZE,"uint8_t multiple constant multiplies");
test_constant<uint8_t, custom_multiple_constant_multiply2<uint8_t> >(data8unsigned,SIZE,"uint8_t multiple constant multiply2");
test_constant<uint8_t, custom_constant_divide<uint8_t> >(data8unsigned,SIZE,"uint8_t constant divide");
test_constant<uint8_t, custom_multiple_constant_divide<uint8_t> >(data8unsigned,SIZE,"uint8_t multiple constant divides");
test_constant<uint8_t, custom_multiple_constant_divide2<uint8_t> >(data8unsigned,SIZE,"uint8_t multiple constant divide2");
test_constant<uint8_t, custom_multiple_constant_mixed<uint8_t> >(data8unsigned,SIZE,"uint8_t multiple constant mixed");
test_constant<uint8_t, custom_constant_and<uint8_t> >(data8unsigned,SIZE,"uint8_t constant and");
test_constant<uint8_t, custom_multiple_constant_and<uint8_t> >(data8unsigned,SIZE,"uint8_t multiple constant and");
test_constant<uint8_t, custom_constant_or<uint8_t> >(data8unsigned,SIZE,"uint8_t constant or");
test_constant<uint8_t, custom_multiple_constant_or<uint8_t> >(data8unsigned,SIZE,"uint8_t multiple constant or");
test_constant<uint8_t, custom_constant_xor<uint8_t> >(data8unsigned,SIZE,"uint8_t constant xor");
test_constant<uint8_t, custom_multiple_constant_xor<uint8_t> >(data8unsigned,SIZE,"uint8_t multiple constant xor");
summarize("uint8_t constant folding", SIZE, iterations, kDontShowGMeans, kDontShowPenalty );
// int16_t
::fill(data16, data16+SIZE, int16_t(init_value));
iterations = base_iterations;
test_constant<int16_t, custom_two<int16_t> >(data16,SIZE,"int16_t constant");
test_constant<int16_t, custom_add_constants<int16_t> >(data16,SIZE,"int16_t add constants");
test_constant<int16_t, custom_sub_constants<int16_t> >(data16,SIZE,"int16_t subtract constants");
test_constant<int16_t, custom_multiply_constants<int16_t> >(data16,SIZE,"int16_t multiply constants");
test_constant<int16_t, custom_divide_constants<int16_t> >(data16,SIZE,"int16_t divide constants");
test_constant<int16_t, custom_mod_constants<int16_t> >(data16,SIZE,"int16_t mod constants");
test_constant<int16_t, custom_equal_constants<int16_t> >(data16,SIZE,"int16_t equal constants");
test_constant<int16_t, custom_notequal_constants<int16_t> >(data16,SIZE,"int16_t notequal constants");
test_constant<int16_t, custom_greaterthan_constants<int16_t> >(data16,SIZE,"int16_t greater than constants");
test_constant<int16_t, custom_lessthan_constants<int16_t> >(data16,SIZE,"int16_t less than constants");
test_constant<int16_t, custom_greaterthanequal_constants<int16_t> >(data16,SIZE,"int16_t greater than equal constants");
test_constant<int16_t, custom_lessthanequal_constants<int16_t> >(data16,SIZE,"int16_t less than equal constants");
test_constant<int16_t, custom_and_constants<int16_t> >(data16,SIZE,"int16_t and constants");
test_constant<int16_t, custom_or_constants<int16_t> >(data16,SIZE,"int16_t or constants");
test_constant<int16_t, custom_xor_constants<int16_t> >(data16,SIZE,"int16_t xor constants");
summarize("int16_t simple constant folding", SIZE, iterations, kDontShowGMeans, kDontShowPenalty );
iterations = base_iterations / 10;
test_constant<int16_t, custom_constant_add<int16_t> >(data16,SIZE,"int16_t constant add");
test_constant<int16_t, custom_multiple_constant_add<int16_t> >(data16,SIZE,"int16_t multiple constant adds");
test_constant<int16_t, custom_constant_sub<int16_t> >(data16,SIZE,"int16_t constant subtract");
test_constant<int16_t, custom_multiple_constant_sub<int16_t> >(data16,SIZE,"int16_t multiple constant subtracts");
test_constant<int16_t, custom_constant_multiply<int16_t> >(data16,SIZE,"int16_t constant multiply");
test_constant<int16_t, custom_multiple_constant_multiply<int16_t> >(data16,SIZE,"int16_t multiple constant multiplies");
test_constant<int16_t, custom_multiple_constant_multiply2<int16_t> >(data16,SIZE,"int16_t multiple constant multiply2");
test_constant<int16_t, custom_constant_divide<int16_t> >(data16,SIZE,"int16_t constant divide");
test_constant<int16_t, custom_multiple_constant_divide<int16_t> >(data16,SIZE,"int16_t multiple constant divides");
test_constant<int16_t, custom_multiple_constant_divide2<int16_t> >(data16,SIZE,"int16_t multiple constant divide2");
test_constant<int16_t, custom_multiple_constant_mixed<int16_t> >(data16,SIZE,"int16_t multiple constant mixed");
test_constant<int16_t, custom_constant_and<int16_t> >(data16,SIZE,"int16_t constant and");
test_constant<int16_t, custom_multiple_constant_and<int16_t> >(data16,SIZE,"int16_t multiple constant and");
test_constant<int16_t, custom_constant_or<int16_t> >(data16,SIZE,"int16_t constant or");
test_constant<int16_t, custom_multiple_constant_or<int16_t> >(data16,SIZE,"int16_t multiple constant or");
test_constant<int16_t, custom_constant_xor<int16_t> >(data16,SIZE,"int16_t constant xor");
test_constant<int16_t, custom_multiple_constant_xor<int16_t> >(data16,SIZE,"int16_t multiple constant xor");
summarize("int16_t constant folding", SIZE, iterations, kDontShowGMeans, kDontShowPenalty );
// unsigned16
::fill(data16unsigned, data16unsigned+SIZE, uint16_t(init_value));
iterations = base_iterations;
test_constant<uint16_t, custom_two<uint16_t> >(data16unsigned,SIZE,"uint16_t constant");
test_constant<uint16_t, custom_add_constants<uint16_t> >(data16unsigned,SIZE,"uint16_t add constants");
test_constant<uint16_t, custom_sub_constants<uint16_t> >(data16unsigned,SIZE,"uint16_t subtract constants");
test_constant<uint16_t, custom_multiply_constants<uint16_t> >(data16unsigned,SIZE,"uint16_t multiply constants");
test_constant<uint16_t, custom_divide_constants<uint16_t> >(data16unsigned,SIZE,"uint16_t divide constants");
test_constant<uint16_t, custom_mod_constants<uint16_t> >(data16unsigned,SIZE,"uint16_t mod constants");
test_constant<uint16_t, custom_equal_constants<uint16_t> >(data16unsigned,SIZE,"uint16_t equal constants");
test_constant<uint16_t, custom_notequal_constants<uint16_t> >(data16unsigned,SIZE,"uint16_t notequal constants");
test_constant<uint16_t, custom_greaterthan_constants<uint16_t> >(data16unsigned,SIZE,"uint16_t greater than constants");
test_constant<uint16_t, custom_lessthan_constants<uint16_t> >(data16unsigned,SIZE,"uint16_t less than constants");
test_constant<uint16_t, custom_greaterthanequal_constants<uint16_t> >(data16unsigned,SIZE,"uint16_t greater than equal constants");
test_constant<uint16_t, custom_lessthanequal_constants<uint16_t> >(data16unsigned,SIZE,"uint16_t less than equal constants");
test_constant<uint16_t, custom_and_constants<uint16_t> >(data16unsigned,SIZE,"uint16_t and constants");
test_constant<uint16_t, custom_or_constants<uint16_t> >(data16unsigned,SIZE,"uint16_t or constants");
test_constant<uint16_t, custom_xor_constants<uint16_t> >(data16unsigned,SIZE,"uint16_t xor constants");
summarize("uint16_t simple constant folding", SIZE, iterations, kDontShowGMeans, kDontShowPenalty );
iterations = base_iterations / 10;
test_constant<uint16_t, custom_constant_add<uint16_t> >(data16unsigned,SIZE,"uint16_t constant add");
test_constant<uint16_t, custom_multiple_constant_add<uint16_t> >(data16unsigned,SIZE,"uint16_t multiple constant adds");
test_constant<uint16_t, custom_constant_sub<uint16_t> >(data16unsigned,SIZE,"uint16_t constant subtract");
test_constant<uint16_t, custom_multiple_constant_sub<uint16_t> >(data16unsigned,SIZE,"uint16_t multiple constant subtracts");
test_constant<uint16_t, custom_constant_multiply<uint16_t> >(data16unsigned,SIZE,"uint16_t constant multiply");
test_constant<uint16_t, custom_multiple_constant_multiply<uint16_t> >(data16unsigned,SIZE,"uint16_t multiple constant multiplies");
test_constant<uint16_t, custom_multiple_constant_multiply2<uint16_t> >(data16unsigned,SIZE,"uint16_t multiple constant multiply2");
test_constant<uint16_t, custom_constant_divide<uint16_t> >(data16unsigned,SIZE,"uint16_t constant divide");
test_constant<uint16_t, custom_multiple_constant_divide<uint16_t> >(data16unsigned,SIZE,"uint16_t multiple constant divides");
test_constant<uint16_t, custom_multiple_constant_divide2<uint16_t> >(data16unsigned,SIZE,"uint16_t multiple constant divide2");
test_constant<uint16_t, custom_multiple_constant_mixed<uint16_t> >(data16unsigned,SIZE,"uint16_t multiple constant mixed");
test_constant<uint16_t, custom_constant_and<uint16_t> >(data16unsigned,SIZE,"uint16_t constant and");
test_constant<uint16_t, custom_multiple_constant_and<uint16_t> >(data16unsigned,SIZE,"uint16_t multiple constant and");
test_constant<uint16_t, custom_constant_or<uint16_t> >(data16unsigned,SIZE,"uint16_t constant or");
test_constant<uint16_t, custom_multiple_constant_or<uint16_t> >(data16unsigned,SIZE,"uint16_t multiple constant or");
test_constant<uint16_t, custom_constant_xor<uint16_t> >(data16unsigned,SIZE,"uint16_t constant xor");
test_constant<uint16_t, custom_multiple_constant_xor<uint16_t> >(data16unsigned,SIZE,"uint16_t multiple constant xor");
summarize("uint16_t constant folding", SIZE, iterations, kDontShowGMeans, kDontShowPenalty );
// int32_t
::fill(data32, data32+SIZE, int32_t(init_value));
iterations = base_iterations;
test_constant<int32_t, custom_two<int32_t> >(data32,SIZE,"int32_t constant");
test_constant<int32_t, custom_add_constants<int32_t> >(data32,SIZE,"int32_t add constants");
test_constant<int32_t, custom_sub_constants<int32_t> >(data32,SIZE,"int32_t subtract constants");
test_constant<int32_t, custom_multiply_constants<int32_t> >(data32,SIZE,"int32_t multiply constants");
test_constant<int32_t, custom_divide_constants<int32_t> >(data32,SIZE,"int32_t divide constants");
test_constant<int32_t, custom_mod_constants<int32_t> >(data32,SIZE,"int32_t mod constants");
test_constant<int32_t, custom_equal_constants<int32_t> >(data32,SIZE,"int32_t equal constants");
test_constant<int32_t, custom_notequal_constants<int32_t> >(data32,SIZE,"int32_t notequal constants");
test_constant<int32_t, custom_greaterthan_constants<int32_t> >(data32,SIZE,"int32_t greater than constants");
test_constant<int32_t, custom_lessthan_constants<int32_t> >(data32,SIZE,"int32_t less than constants");
test_constant<int32_t, custom_greaterthanequal_constants<int32_t> >(data32,SIZE,"int32_t greater than equal constants");
test_constant<int32_t, custom_lessthanequal_constants<int32_t> >(data32,SIZE,"int32_t less than equal constants");
test_constant<int32_t, custom_and_constants<int32_t> >(data32,SIZE,"int32_t and constants");
test_constant<int32_t, custom_or_constants<int32_t> >(data32,SIZE,"int32_t or constants");
test_constant<int32_t, custom_xor_constants<int32_t> >(data32,SIZE,"int32_t xor constants");
summarize("int32_t simple constant folding", SIZE, iterations, kDontShowGMeans, kDontShowPenalty );
iterations = base_iterations / 10;
test_constant<int32_t, custom_constant_add<int32_t> >(data32,SIZE,"int32_t constant add");
test_constant<int32_t, custom_multiple_constant_add<int32_t> >(data32,SIZE,"int32_t multiple constant adds");
test_constant<int32_t, custom_constant_sub<int32_t> >(data32,SIZE,"int32_t constant subtract");
test_constant<int32_t, custom_multiple_constant_sub<int32_t> >(data32,SIZE,"int32_t multiple constant subtracts");
test_constant<int32_t, custom_constant_multiply<int32_t> >(data32,SIZE,"int32_t constant multiply");
test_constant<int32_t, custom_multiple_constant_multiply<int32_t> >(data32,SIZE,"int32_t multiple constant multiplies");
test_constant<int32_t, custom_multiple_constant_multiply2<int32_t> >(data32,SIZE,"int32_t multiple constant multiply2");
test_constant<int32_t, custom_constant_divide<int32_t> >(data32,SIZE,"int32_t constant divide");
test_constant<int32_t, custom_multiple_constant_divide<int32_t> >(data32,SIZE,"int32_t multiple constant divides");
test_constant<int32_t, custom_multiple_constant_divide2<int32_t> >(data32,SIZE,"int32_t multiple constant divide2");
test_constant<int32_t, custom_multiple_constant_mixed<int32_t> >(data32,SIZE,"int32_t multiple constant mixed");
test_constant<int32_t, custom_constant_and<int32_t> >(data32,SIZE,"int32_t constant and");
test_constant<int32_t, custom_multiple_constant_and<int32_t> >(data32,SIZE,"int32_t multiple constant and");
test_constant<int32_t, custom_constant_or<int32_t> >(data32,SIZE,"int32_t constant or");
test_constant<int32_t, custom_multiple_constant_or<int32_t> >(data32,SIZE,"int32_t multiple constant or");
test_constant<int32_t, custom_constant_xor<int32_t> >(data32,SIZE,"int32_t constant xor");
test_constant<int32_t, custom_multiple_constant_xor<int32_t> >(data32,SIZE,"int32_t multiple constant xor");
summarize("int32_t constant folding", SIZE, iterations, kDontShowGMeans, kDontShowPenalty );
// unsigned32
::fill(data32unsigned, data32unsigned+SIZE, uint32_t(init_value));
iterations = base_iterations;
test_constant<uint32_t, custom_two<uint32_t> >(data32unsigned,SIZE,"uint32_t constant");
test_constant<uint32_t, custom_add_constants<uint32_t> >(data32unsigned,SIZE,"uint32_t add constants");
test_constant<uint32_t, custom_sub_constants<uint32_t> >(data32unsigned,SIZE,"uint32_t subtract constants");
test_constant<uint32_t, custom_multiply_constants<uint32_t> >(data32unsigned,SIZE,"uint32_t multiply constants");
test_constant<uint32_t, custom_divide_constants<uint32_t> >(data32unsigned,SIZE,"uint32_t divide constants");
test_constant<uint32_t, custom_mod_constants<uint32_t> >(data32unsigned,SIZE,"uint32_t mod constants");
test_constant<uint32_t, custom_equal_constants<uint32_t> >(data32unsigned,SIZE,"uint32_t equal constants");
test_constant<uint32_t, custom_notequal_constants<uint32_t> >(data32unsigned,SIZE,"uint32_t notequal constants");
test_constant<uint32_t, custom_greaterthan_constants<uint32_t> >(data32unsigned,SIZE,"uint32_t greater than constants");
test_constant<uint32_t, custom_lessthan_constants<uint32_t> >(data32unsigned,SIZE,"uint32_t less than constants");
test_constant<uint32_t, custom_greaterthanequal_constants<uint32_t> >(data32unsigned,SIZE,"uint32_t greater than equal constants");
test_constant<uint32_t, custom_lessthanequal_constants<uint32_t> >(data32unsigned,SIZE,"uint32_t less than equal constants");
test_constant<uint32_t, custom_and_constants<uint32_t> >(data32unsigned,SIZE,"uint32_t and constants");
test_constant<uint32_t, custom_or_constants<uint32_t> >(data32unsigned,SIZE,"uint32_t or constants");
test_constant<uint32_t, custom_xor_constants<uint32_t> >(data32unsigned,SIZE,"uint32_t xor constants");
summarize("uint32_t simple constant folding", SIZE, iterations, kDontShowGMeans, kDontShowPenalty );
iterations = base_iterations / 10;
test_constant<uint32_t, custom_constant_add<uint32_t> >(data32unsigned,SIZE,"uint32_t constant add");
test_constant<uint32_t, custom_multiple_constant_add<uint32_t> >(data32unsigned,SIZE,"uint32_t multiple constant adds");
test_constant<uint32_t, custom_constant_sub<uint32_t> >(data32unsigned,SIZE,"uint32_t constant subtract");
test_constant<uint32_t, custom_multiple_constant_sub<uint32_t> >(data32unsigned,SIZE,"uint32_t multiple constant subtracts");
test_constant<uint32_t, custom_constant_multiply<uint32_t> >(data32unsigned,SIZE,"uint32_t constant multiply");
test_constant<uint32_t, custom_multiple_constant_multiply<uint32_t> >(data32unsigned,SIZE,"uint32_t multiple constant multiplies");
test_constant<uint32_t, custom_multiple_constant_multiply2<uint32_t> >(data32unsigned,SIZE,"uint32_t multiple constant multiply2");
test_constant<uint32_t, custom_constant_divide<uint32_t> >(data32unsigned,SIZE,"uint32_t constant divide");
test_constant<uint32_t, custom_multiple_constant_divide<uint32_t> >(data32unsigned,SIZE,"uint32_t multiple constant divides");
test_constant<uint32_t, custom_multiple_constant_divide2<uint32_t> >(data32unsigned,SIZE,"uint32_t multiple constant divide2");
test_constant<uint32_t, custom_multiple_constant_mixed<uint32_t> >(data32unsigned,SIZE,"uint32_t multiple constant mixed");
test_constant<uint32_t, custom_constant_and<uint32_t> >(data32unsigned,SIZE,"uint32_t constant and");
test_constant<uint32_t, custom_multiple_constant_and<uint32_t> >(data32unsigned,SIZE,"uint32_t multiple constant and");
test_constant<uint32_t, custom_constant_or<uint32_t> >(data32unsigned,SIZE,"uint32_t constant or");
test_constant<uint32_t, custom_multiple_constant_or<uint32_t> >(data32unsigned,SIZE,"uint32_t multiple constant or");
test_constant<uint32_t, custom_constant_xor<uint32_t> >(data32unsigned,SIZE,"uint32_t constant xor");
test_constant<uint32_t, custom_multiple_constant_xor<uint32_t> >(data32unsigned,SIZE,"uint32_t multiple constant xor");
summarize("uint32_t constant folding", SIZE, iterations, kDontShowGMeans, kDontShowPenalty );
// int64_t
::fill(data64, data64+SIZE, int64_t(init_value));
iterations = base_iterations;
test_constant<int64_t, custom_two<int64_t> >(data64,SIZE,"int64_t constant");
test_constant<int64_t, custom_add_constants<int64_t> >(data64,SIZE,"int64_t add constants");
test_constant<int64_t, custom_sub_constants<int64_t> >(data64,SIZE,"int64_t subtract constants");
test_constant<int64_t, custom_multiply_constants<int64_t> >(data64,SIZE,"int64_t multiply constants");
test_constant<int64_t, custom_divide_constants<int64_t> >(data64,SIZE,"int64_t divide constants");
test_constant<int64_t, custom_mod_constants<int64_t> >(data64,SIZE,"int64_t mod constants");
test_constant<int64_t, custom_equal_constants<int64_t> >(data64,SIZE,"int64_t equal constants");
test_constant<int64_t, custom_notequal_constants<int64_t> >(data64,SIZE,"int64_t notequal constants");
test_constant<int64_t, custom_greaterthan_constants<int64_t> >(data64,SIZE,"int64_t greater than constants");
test_constant<int64_t, custom_lessthan_constants<int64_t> >(data64,SIZE,"int64_t less than constants");
test_constant<int64_t, custom_greaterthanequal_constants<int64_t> >(data64,SIZE,"int64_t greater than equal constants");
test_constant<int64_t, custom_lessthanequal_constants<int64_t> >(data64,SIZE,"int64_t less than equal constants");
test_constant<int64_t, custom_and_constants<int64_t> >(data64,SIZE,"int64_t and constants");
test_constant<int64_t, custom_or_constants<int64_t> >(data64,SIZE,"int64_t or constants");
test_constant<int64_t, custom_xor_constants<int64_t> >(data64,SIZE,"int64_t xor constants");
summarize("int64_t simple constant folding", SIZE, iterations, kDontShowGMeans, kDontShowPenalty );
iterations = base_iterations / 10;
test_constant<int64_t, custom_constant_add<int64_t> >(data64,SIZE,"int64_t constant add");
test_constant<int64_t, custom_multiple_constant_add<int64_t> >(data64,SIZE,"int64_t multiple constant adds");
test_constant<int64_t, custom_constant_sub<int64_t> >(data64,SIZE,"int64_t constant subtract");
test_constant<int64_t, custom_multiple_constant_sub<int64_t> >(data64,SIZE,"int64_t multiple constant subtracts");
test_constant<int64_t, custom_constant_multiply<int64_t> >(data64,SIZE,"int64_t constant multiply");
test_constant<int64_t, custom_multiple_constant_multiply<int64_t> >(data64,SIZE,"int64_t multiple constant multiplies");
test_constant<int64_t, custom_multiple_constant_multiply2<int64_t> >(data64,SIZE,"int64_t multiple constant multiply2");
test_constant<int64_t, custom_constant_divide<int64_t> >(data64,SIZE,"int64_t constant divide");
test_constant<int64_t, custom_multiple_constant_divide<int64_t> >(data64,SIZE,"int64_t multiple constant divides");
test_constant<int64_t, custom_multiple_constant_divide2<int64_t> >(data64,SIZE,"int64_t multiple constant divide2");
test_constant<int64_t, custom_multiple_constant_mixed<int64_t> >(data64,SIZE,"int64_t multiple constant mixed");
test_constant<int64_t, custom_constant_and<int64_t> >(data64,SIZE,"int64_t constant and");
test_constant<int64_t, custom_multiple_constant_and<int64_t> >(data64,SIZE,"int64_t multiple constant and");
test_constant<int64_t, custom_constant_or<int64_t> >(data64,SIZE,"int64_t constant or");
test_constant<int64_t, custom_multiple_constant_or<int64_t> >(data64,SIZE,"int64_t multiple constant or");
test_constant<int64_t, custom_constant_xor<int64_t> >(data64,SIZE,"int64_t constant xor");
test_constant<int64_t, custom_multiple_constant_xor<int64_t> >(data64,SIZE,"int64_t multiple constant xor");
summarize("int64_t constant folding", SIZE, iterations, kDontShowGMeans, kDontShowPenalty );
// unsigned64
::fill(data64unsigned, data64unsigned+SIZE, uint64_t(init_value));
iterations = base_iterations;
test_constant<uint64_t, custom_two<uint64_t> >(data64unsigned,SIZE,"uint64_t constant");
test_constant<uint64_t, custom_add_constants<uint64_t> >(data64unsigned,SIZE,"uint64_t add constants");
test_constant<uint64_t, custom_sub_constants<uint64_t> >(data64unsigned,SIZE,"uint64_t subtract constants");
test_constant<uint64_t, custom_multiply_constants<uint64_t> >(data64unsigned,SIZE,"uint64_t multiply constants");
test_constant<uint64_t, custom_divide_constants<uint64_t> >(data64unsigned,SIZE,"uint64_t divide constants");
test_constant<uint64_t, custom_mod_constants<uint64_t> >(data64unsigned,SIZE,"uint64_t mod constants");
test_constant<uint64_t, custom_equal_constants<uint64_t> >(data64unsigned,SIZE,"uint64_t equal constants");
test_constant<uint64_t, custom_notequal_constants<uint64_t> >(data64unsigned,SIZE,"uint64_t notequal constants");
test_constant<uint64_t, custom_greaterthan_constants<uint64_t> >(data64unsigned,SIZE,"uint64_t greater than constants");
test_constant<uint64_t, custom_lessthan_constants<uint64_t> >(data64unsigned,SIZE,"uint64_t less than constants");
test_constant<uint64_t, custom_greaterthanequal_constants<uint64_t> >(data64unsigned,SIZE,"uint64_t greater than equal constants");
test_constant<uint64_t, custom_lessthanequal_constants<uint64_t> >(data64unsigned,SIZE,"uint64_t less than equal constants");
test_constant<uint64_t, custom_and_constants<uint64_t> >(data64unsigned,SIZE,"uint64_t and constants");
test_constant<uint64_t, custom_or_constants<uint64_t> >(data64unsigned,SIZE,"uint64_t or constants");
test_constant<uint64_t, custom_xor_constants<uint64_t> >(data64unsigned,SIZE,"uint64_t xor constants");
summarize("uint64_t simple constant folding", SIZE, iterations, kDontShowGMeans, kDontShowPenalty );
iterations = base_iterations / 10;
test_constant<uint64_t, custom_constant_add<uint64_t> >(data64unsigned,SIZE,"uint64_t constant add");
test_constant<uint64_t, custom_multiple_constant_add<uint64_t> >(data64unsigned,SIZE,"uint64_t multiple constant adds");
test_constant<uint64_t, custom_constant_sub<uint64_t> >(data64unsigned,SIZE,"uint64_t constant subtract");
test_constant<uint64_t, custom_multiple_constant_sub<uint64_t> >(data64unsigned,SIZE,"uint64_t multiple constant subtracts");
test_constant<uint64_t, custom_constant_multiply<uint64_t> >(data64unsigned,SIZE,"uint64_t constant multiply");
test_constant<uint64_t, custom_multiple_constant_multiply<uint64_t> >(data64unsigned,SIZE,"uint64_t multiple constant multiplies");
test_constant<uint64_t, custom_multiple_constant_multiply2<uint64_t> >(data64unsigned,SIZE,"uint64_t multiple constant multiply2");
test_constant<uint64_t, custom_constant_divide<uint64_t> >(data64unsigned,SIZE,"uint64_t constant divide");
test_constant<uint64_t, custom_multiple_constant_divide<uint64_t> >(data64unsigned,SIZE,"uint64_t multiple constant divides");
test_constant<uint64_t, custom_multiple_constant_divide2<uint64_t> >(data64unsigned,SIZE,"uint64_t multiple constant divide2");
test_constant<uint64_t, custom_multiple_constant_mixed<uint64_t> >(data64unsigned,SIZE,"uint64_t multiple constant mixed");
test_constant<uint64_t, custom_constant_and<uint64_t> >(data64unsigned,SIZE,"uint64_t constant and");
test_constant<uint64_t, custom_multiple_constant_and<uint64_t> >(data64unsigned,SIZE,"uint64_t multiple constant and");
test_constant<uint64_t, custom_constant_or<uint64_t> >(data64unsigned,SIZE,"uint64_t constant or");
test_constant<uint64_t, custom_multiple_constant_or<uint64_t> >(data64unsigned,SIZE,"uint64_t multiple constant or");
test_constant<uint64_t, custom_constant_xor<uint64_t> >(data64unsigned,SIZE,"uint64_t constant xor");
test_constant<uint64_t, custom_multiple_constant_xor<uint64_t> >(data64unsigned,SIZE,"uint64_t multiple constant xor");
summarize("uint64_t constant folding", SIZE, iterations, kDontShowGMeans, kDontShowPenalty );
// float
::fill(dataFloat, dataFloat+SIZE, float(init_value));
iterations = base_iterations;
test_constant<float, custom_two<float> >(dataFloat,SIZE,"float constant");
test_constant<float, custom_add_constants<float> >(dataFloat,SIZE,"float add constants");
test_constant<float, custom_sub_constants<float> >(dataFloat,SIZE,"float subtract constants");
test_constant<float, custom_multiply_constants<float> >(dataFloat,SIZE,"float multiply constants");
test_constant<float, custom_divide_constants<float> >(dataFloat,SIZE,"float divide constants");
summarize("float simple constant folding", SIZE, iterations, kDontShowGMeans, kDontShowPenalty );
iterations = base_iterations / 10;
test_constant<float, custom_constant_add<float> >(dataFloat,SIZE,"float constant add");
test_constant<float, custom_multiple_constant_add<float> >(dataFloat,SIZE,"float multiple constant adds");
test_constant<float, custom_constant_sub<float> >(dataFloat,SIZE,"float constant subtract");
test_constant<float, custom_multiple_constant_sub<float> >(dataFloat,SIZE,"float multiple constant subtracts");
test_constant<float, custom_constant_multiply<float> >(dataFloat,SIZE,"float constant multiply");
test_constant<float, custom_multiple_constant_multiply<float> >(dataFloat,SIZE,"float multiple constant multiplies");
test_constant<float, custom_multiple_constant_multiply2<float> >(dataFloat,SIZE,"float multiple constant multiply2");
test_constant<float, custom_constant_divide<float> >(dataFloat,SIZE,"float constant divide");
test_constant<float, custom_multiple_constant_divide<float> >(dataFloat,SIZE,"float multiple constant divides");
test_constant<float, custom_multiple_constant_divide2<float> >(dataFloat,SIZE,"float multiple constant divide2");
test_constant<float, custom_multiple_constant_mixed<float> >(dataFloat,SIZE,"float multiple constant mixed");
summarize("float constant folding", SIZE, iterations, kDontShowGMeans, kDontShowPenalty );
// double
::fill(dataDouble, dataDouble+SIZE, double(init_value));
iterations = base_iterations;
test_constant<double, custom_two<double> >(dataDouble,SIZE,"double constant");
test_constant<double, custom_add_constants<double> >(dataDouble,SIZE,"double add constants");
test_constant<double, custom_sub_constants<double> >(dataDouble,SIZE,"double subtract constants");
test_constant<double, custom_multiply_constants<double> >(dataDouble,SIZE,"double multiply constants");
test_constant<double, custom_divide_constants<double> >(dataDouble,SIZE,"double divide constants");
summarize("double simple constant folding", SIZE, iterations, kDontShowGMeans, kDontShowPenalty );
iterations = base_iterations / 10;
test_constant<double, custom_constant_add<double> >(dataDouble,SIZE,"double constant add");
test_constant<double, custom_multiple_constant_add<double> >(dataDouble,SIZE,"double multiple constant adds");
test_constant<double, custom_constant_sub<double> >(dataDouble,SIZE,"double constant subtract");
test_constant<double, custom_multiple_constant_sub<double> >(dataDouble,SIZE,"double multiple constant subtracts");
test_constant<double, custom_constant_multiply<double> >(dataDouble,SIZE,"double constant multiply");
test_constant<double, custom_multiple_constant_multiply<double> >(dataDouble,SIZE,"double multiple constant multiplies");
test_constant<double, custom_multiple_constant_multiply2<double> >(dataDouble,SIZE,"double multiple constant multiply2");
test_constant<double, custom_constant_divide<double> >(dataDouble,SIZE,"double constant divide");
test_constant<double, custom_multiple_constant_divide<double> >(dataDouble,SIZE,"double multiple constant divides");
test_constant<double, custom_multiple_constant_divide2<double> >(dataDouble,SIZE,"double multiple constant divide2");
test_constant<double, custom_multiple_constant_mixed<double> >(dataDouble,SIZE,"double multiple constant mixed");
summarize("double constant folding", SIZE, iterations, kDontShowGMeans, kDontShowPenalty );
return 0;
}
// the end
/******************************************************************************/
/******************************************************************************/
[-- Attachment #5: report46 --]
[-- Type: text/plain, Size: 25184 bytes --]
./simple_types_constant_folding
test description absolute operations ratio with
number time per second test0
0 "int8_t constant" 0.00 sec inf M nan
1 "int8_t add constants" 0.00 sec inf M nan
2 "int8_t subtract constants" 0.00 sec inf M nan
3 "int8_t multiply constants" 0.00 sec inf M nan
4 "int8_t divide constants" 0.00 sec inf M nan
5 "int8_t mod constants" 0.00 sec inf M nan
6 "int8_t equal constants" 0.00 sec inf M nan
7 "int8_t notequal constants" 0.00 sec inf M nan
8 "int8_t greater than constants" 0.00 sec inf M nan
9 "int8_t less than constants" 0.00 sec inf M nan
10 "int8_t greater than equal constants" 0.00 sec inf M nan
11 "int8_t less than equal constants" 0.00 sec inf M nan
12 "int8_t and constants" 0.00 sec inf M nan
13 "int8_t or constants" 0.00 sec inf M nan
14 "int8_t xor constants" 0.00 sec inf M nan
Total absolute time for int8_t simple constant folding: 0.00 sec
test description absolute operations ratio with
number time per second test0
0 "int8_t constant add" 2.84 sec 563.38 M 1.00
1 "int8_t multiple constant adds" 2.85 sec 561.40 M 1.00
2 "int8_t constant subtract" 2.84 sec 563.38 M 1.00
3 "int8_t multiple constant subtracts" 2.85 sec 561.40 M 1.00
4 "int8_t constant multiply" 3.35 sec 477.61 M 1.18
5 "int8_t multiple constant multiplies" 3.34 sec 479.04 M 1.18
6 "int8_t multiple constant multiply2" 2.85 sec 561.40 M 1.00
7 "int8_t constant divide" 3.86 sec 414.51 M 1.36
8 "int8_t multiple constant divides" 6.03 sec 265.34 M 2.12
9 "int8_t multiple constant divide2" 2.85 sec 561.40 M 1.00
10 "int8_t multiple constant mixed" 0.97 sec 1649.48 M 0.34
11 "int8_t constant and" 1.44 sec 1111.11 M 0.51
12 "int8_t multiple constant and" 1.44 sec 1111.11 M 0.51
13 "int8_t constant or" 1.44 sec 1111.11 M 0.51
14 "int8_t multiple constant or" 1.44 sec 1111.11 M 0.51
15 "int8_t constant xor" 1.46 sec 1095.89 M 0.51
16 "int8_t multiple constant xor" 1.47 sec 1088.44 M 0.52
Total absolute time for int8_t constant folding: 43.32 sec
test description absolute operations ratio with
number time per second test0
0 "uint8_t constant" 0.00 sec inf M nan
1 "uint8_t add constants" 0.00 sec inf M nan
2 "uint8_t subtract constants" 0.00 sec inf M nan
3 "uint8_t multiply constants" 0.00 sec inf M nan
4 "uint8_t divide constants" 0.00 sec inf M nan
5 "uint8_t mod constants" 0.00 sec inf M nan
6 "uint8_t equal constants" 0.00 sec inf M nan
7 "uint8_t notequal constants" 0.00 sec inf M nan
8 "uint8_t greater than constants" 0.00 sec inf M nan
9 "uint8_t less than constants" 0.00 sec inf M nan
10 "uint8_t greater than equal constants" 0.00 sec inf M nan
11 "uint8_t less than equal constants" 0.00 sec inf M nan
12 "uint8_t and constants" 0.00 sec inf M nan
13 "uint8_t or constants" 0.00 sec inf M nan
14 "uint8_t xor constants" 0.00 sec inf M nan
Total absolute time for uint8_t simple constant folding: 0.00 sec
test description absolute operations ratio with
number time per second test0
0 "uint8_t constant add" 0.11 sec 14545.45 M 1.00
1 "uint8_t multiple constant adds" 0.10 sec 16000.00 M 0.91
2 "uint8_t constant subtract" 0.10 sec 16000.00 M 0.91
3 "uint8_t multiple constant subtracts" 0.10 sec 16000.00 M 0.91
4 "uint8_t constant multiply" 0.51 sec 3137.25 M 4.64
5 "uint8_t multiple constant multiplies" 0.51 sec 3137.25 M 4.64
6 "uint8_t multiple constant multiply2" 0.09 sec 17777.78 M 0.82
7 "uint8_t constant divide" 3.35 sec 477.61 M 30.45
8 "uint8_t multiple constant divides" 3.35 sec 477.61 M 30.45
9 "uint8_t multiple constant divide2" 0.10 sec 16000.00 M 0.91
10 "uint8_t multiple constant mixed" 0.06 sec 26666.67 M 0.55
11 "uint8_t constant and" 0.10 sec 16000.00 M 0.91
12 "uint8_t multiple constant and" 0.10 sec 16000.00 M 0.91
13 "uint8_t constant or" 0.10 sec 16000.00 M 0.91
14 "uint8_t multiple constant or" 0.10 sec 16000.00 M 0.91
15 "uint8_t constant xor" 0.10 sec 16000.00 M 0.91
16 "uint8_t multiple constant xor" 0.10 sec 16000.00 M 0.91
Total absolute time for uint8_t constant folding: 8.98 sec
test description absolute operations ratio with
number time per second test0
0 "int16_t constant" 0.00 sec inf M nan
1 "int16_t add constants" 0.00 sec inf M nan
2 "int16_t subtract constants" 0.00 sec inf M nan
3 "int16_t multiply constants" 0.00 sec inf M nan
4 "int16_t divide constants" 0.00 sec inf M nan
5 "int16_t mod constants" 0.00 sec inf M nan
6 "int16_t equal constants" 0.00 sec inf M nan
7 "int16_t notequal constants" 0.00 sec inf M nan
8 "int16_t greater than constants" 0.00 sec inf M nan
9 "int16_t less than constants" 0.00 sec inf M nan
10 "int16_t greater than equal constants" 0.00 sec inf M nan
11 "int16_t less than equal constants" 0.00 sec inf M nan
12 "int16_t and constants" 0.00 sec inf M nan
13 "int16_t or constants" 0.00 sec inf M nan
14 "int16_t xor constants" 0.00 sec inf M nan
Total absolute time for int16_t simple constant folding: 0.00 sec
test description absolute operations ratio with
number time per second test0
0 "int16_t constant add" 2.85 sec 561.40 M 1.00
1 "int16_t multiple constant adds" 2.84 sec 563.38 M 1.00
2 "int16_t constant subtract" 2.85 sec 561.40 M 1.00
3 "int16_t multiple constant subtracts" 2.84 sec 563.38 M 1.00
4 "int16_t constant multiply" 3.35 sec 477.61 M 1.18
5 "int16_t multiple constant multiplies" 3.36 sec 476.19 M 1.18
6 "int16_t multiple constant multiply2" 2.87 sec 557.49 M 1.01
7 "int16_t constant divide" 3.88 sec 412.37 M 1.36
8 "int16_t multiple constant divides" 4.03 sec 397.02 M 1.41
9 "int16_t multiple constant divide2" 2.84 sec 563.38 M 1.00
10 "int16_t multiple constant mixed" 0.97 sec 1649.48 M 0.34
11 "int16_t constant and" 1.44 sec 1111.11 M 0.51
12 "int16_t multiple constant and" 1.44 sec 1111.11 M 0.51
13 "int16_t constant or" 1.44 sec 1111.11 M 0.51
14 "int16_t multiple constant or" 1.44 sec 1111.11 M 0.51
15 "int16_t constant xor" 1.43 sec 1118.88 M 0.50
16 "int16_t multiple constant xor" 1.44 sec 1111.11 M 0.51
Total absolute time for int16_t constant folding: 41.31 sec
test description absolute operations ratio with
number time per second test0
0 "uint16_t constant" 0.00 sec inf M nan
1 "uint16_t add constants" 0.00 sec inf M nan
2 "uint16_t subtract constants" 0.00 sec inf M nan
3 "uint16_t multiply constants" 0.00 sec inf M nan
4 "uint16_t divide constants" 0.00 sec inf M nan
5 "uint16_t mod constants" 0.00 sec inf M nan
6 "uint16_t equal constants" 0.00 sec inf M nan
7 "uint16_t notequal constants" 0.00 sec inf M nan
8 "uint16_t greater than constants" 0.00 sec inf M nan
9 "uint16_t less than constants" 0.00 sec inf M nan
10 "uint16_t greater than equal constants" 0.00 sec inf M nan
11 "uint16_t less than equal constants" 0.00 sec inf M nan
12 "uint16_t and constants" 0.00 sec inf M nan
13 "uint16_t or constants" 0.00 sec inf M nan
14 "uint16_t xor constants" 0.00 sec inf M nan
Total absolute time for uint16_t simple constant folding: 0.00 sec
test description absolute operations ratio with
number time per second test0
0 "uint16_t constant add" 0.20 sec 8000.00 M 1.00
1 "uint16_t multiple constant adds" 0.20 sec 8000.00 M 1.00
2 "uint16_t constant subtract" 0.19 sec 8421.05 M 0.95
3 "uint16_t multiple constant subtracts" 0.20 sec 8000.00 M 1.00
4 "uint16_t constant multiply" 0.22 sec 7272.73 M 1.10
5 "uint16_t multiple constant multiplies" 0.22 sec 7272.73 M 1.10
6 "uint16_t multiple constant multiply2" 0.20 sec 8000.00 M 1.00
7 "uint16_t constant divide" 1.82 sec 879.12 M 9.10
8 "uint16_t multiple constant divides" 1.82 sec 879.12 M 9.10
9 "uint16_t multiple constant divide2" 0.20 sec 8000.00 M 1.00
10 "uint16_t multiple constant mixed" 0.17 sec 9411.76 M 0.85
11 "uint16_t constant and" 0.19 sec 8421.05 M 0.95
12 "uint16_t multiple constant and" 0.19 sec 8421.05 M 0.95
13 "uint16_t constant or" 0.20 sec 8000.00 M 1.00
14 "uint16_t multiple constant or" 0.19 sec 8421.05 M 0.95
15 "uint16_t constant xor" 0.20 sec 8000.00 M 1.00
16 "uint16_t multiple constant xor" 0.19 sec 8421.05 M 0.95
Total absolute time for uint16_t constant folding: 6.60 sec
test description absolute operations ratio with
number time per second test0
0 "int32_t constant" 0.00 sec inf M nan
1 "int32_t add constants" 0.00 sec inf M nan
2 "int32_t subtract constants" 0.00 sec inf M nan
3 "int32_t multiply constants" 0.00 sec inf M nan
4 "int32_t divide constants" 0.00 sec inf M nan
5 "int32_t mod constants" 0.00 sec inf M nan
6 "int32_t equal constants" 0.00 sec inf M nan
7 "int32_t notequal constants" 0.00 sec inf M nan
8 "int32_t greater than constants" 0.00 sec inf M nan
9 "int32_t less than constants" 0.00 sec inf M nan
10 "int32_t greater than equal constants" 0.00 sec inf M nan
11 "int32_t less than equal constants" 0.00 sec inf M nan
12 "int32_t and constants" 0.00 sec inf M nan
13 "int32_t or constants" 0.00 sec inf M nan
14 "int32_t xor constants" 0.00 sec inf M nan
Total absolute time for int32_t simple constant folding: 0.00 sec
test description absolute operations ratio with
number time per second test0
0 "int32_t constant add" 0.39 sec 4102.56 M 1.00
1 "int32_t multiple constant adds" 0.34 sec 4705.88 M 0.87
2 "int32_t constant subtract" 0.38 sec 4210.53 M 0.97
3 "int32_t multiple constant subtracts" 0.39 sec 4102.56 M 1.00
4 "int32_t constant multiply" 1.40 sec 1142.86 M 3.59
5 "int32_t multiple constant multiplies" 1.41 sec 1134.75 M 3.62
6 "int32_t multiple constant multiply2" 0.39 sec 4102.56 M 1.00
7 "int32_t constant divide" 3.03 sec 528.05 M 7.77
8 "int32_t multiple constant divides" 3.31 sec 483.38 M 8.49
9 "int32_t multiple constant divide2" 0.33 sec 4848.48 M 0.85
10 "int32_t multiple constant mixed" 0.26 sec 6153.85 M 0.67
11 "int32_t constant and" 0.38 sec 4210.53 M 0.97
12 "int32_t multiple constant and" 0.34 sec 4705.88 M 0.87
13 "int32_t constant or" 0.38 sec 4210.53 M 0.97
14 "int32_t multiple constant or" 0.34 sec 4705.88 M 0.87
15 "int32_t constant xor" 0.34 sec 4705.88 M 0.87
16 "int32_t multiple constant xor" 0.34 sec 4705.88 M 0.87
Total absolute time for int32_t constant folding: 13.75 sec
test description absolute operations ratio with
number time per second test0
0 "uint32_t constant" 0.00 sec inf M nan
1 "uint32_t add constants" 0.00 sec inf M nan
2 "uint32_t subtract constants" 0.00 sec inf M nan
3 "uint32_t multiply constants" 0.00 sec inf M nan
4 "uint32_t divide constants" 0.00 sec inf M nan
5 "uint32_t mod constants" 0.00 sec inf M nan
6 "uint32_t equal constants" 0.00 sec inf M nan
7 "uint32_t notequal constants" 0.00 sec inf M nan
8 "uint32_t greater than constants" 0.00 sec inf M nan
9 "uint32_t less than constants" 0.00 sec inf M nan
10 "uint32_t greater than equal constants" 0.00 sec inf M nan
11 "uint32_t less than equal constants" 0.00 sec inf M nan
12 "uint32_t and constants" 0.00 sec inf M nan
13 "uint32_t or constants" 0.00 sec inf M nan
14 "uint32_t xor constants" 0.00 sec inf M nan
Total absolute time for uint32_t simple constant folding: 0.00 sec
test description absolute operations ratio with
number time per second test0
0 "uint32_t constant add" 0.34 sec 4705.88 M 1.00
1 "uint32_t multiple constant adds" 0.33 sec 4848.48 M 0.97
2 "uint32_t constant subtract" 0.34 sec 4705.88 M 1.00
3 "uint32_t multiple constant subtracts" 0.34 sec 4705.88 M 1.00
4 "uint32_t constant multiply" 1.40 sec 1142.86 M 4.12
5 "uint32_t multiple constant multiplies" 1.37 sec 1167.88 M 4.03
6 "uint32_t multiple constant multiply2" 0.33 sec 4848.48 M 0.97
7 "uint32_t constant divide" 2.63 sec 608.37 M 7.74
8 "uint32_t multiple constant divides" 2.65 sec 603.77 M 7.79
9 "uint32_t multiple constant divide2" 0.33 sec 4848.48 M 0.97
10 "uint32_t multiple constant mixed" 0.25 sec 6400.00 M 0.74
11 "uint32_t constant and" 0.34 sec 4705.88 M 1.00
12 "uint32_t multiple constant and" 0.34 sec 4705.88 M 1.00
13 "uint32_t constant or" 0.34 sec 4705.88 M 1.00
14 "uint32_t multiple constant or" 0.34 sec 4705.88 M 1.00
15 "uint32_t constant xor" 0.33 sec 4848.48 M 0.97
16 "uint32_t multiple constant xor" 0.34 sec 4705.88 M 1.00
Total absolute time for uint32_t constant folding: 12.34 sec
test description absolute operations ratio with
number time per second test0
0 "int64_t constant" 0.00 sec inf M nan
1 "int64_t add constants" 0.00 sec inf M nan
2 "int64_t subtract constants" 0.00 sec inf M nan
3 "int64_t multiply constants" 0.00 sec inf M nan
4 "int64_t divide constants" 0.00 sec inf M nan
5 "int64_t mod constants" 0.00 sec inf M nan
6 "int64_t equal constants" 0.00 sec inf M nan
7 "int64_t notequal constants" 0.00 sec inf M nan
8 "int64_t greater than constants" 0.00 sec inf M nan
9 "int64_t less than constants" 0.00 sec inf M nan
10 "int64_t greater than equal constants" 0.00 sec inf M nan
11 "int64_t less than equal constants" 0.00 sec inf M nan
12 "int64_t and constants" 0.00 sec inf M nan
13 "int64_t or constants" 0.00 sec inf M nan
14 "int64_t xor constants" 0.00 sec inf M nan
Total absolute time for int64_t simple constant folding: 0.00 sec
test description absolute operations ratio with
number time per second test0
0 "int64_t constant add" 1.06 sec 1509.43 M 1.00
1 "int64_t multiple constant adds" 1.05 sec 1523.81 M 0.99
2 "int64_t constant subtract" 1.06 sec 1509.43 M 1.00
3 "int64_t multiple constant subtracts" 1.06 sec 1509.43 M 1.00
4 "int64_t constant multiply" 2.55 sec 627.45 M 2.41
5 "int64_t multiple constant multiplies" 2.55 sec 627.45 M 2.41
6 "int64_t multiple constant multiply2" 1.06 sec 1509.43 M 1.00
7 "int64_t constant divide" 2.93 sec 546.08 M 2.76
8 "int64_t multiple constant divides" 3.29 sec 486.32 M 3.10
9 "int64_t multiple constant divide2" 1.06 sec 1509.43 M 1.00
10 "int64_t multiple constant mixed" 0.79 sec 2025.32 M 0.75
11 "int64_t constant and" 0.97 sec 1649.48 M 0.92
12 "int64_t multiple constant and" 0.97 sec 1649.48 M 0.92
13 "int64_t constant or" 0.96 sec 1666.67 M 0.91
14 "int64_t multiple constant or" 0.96 sec 1666.67 M 0.91
15 "int64_t constant xor" 0.98 sec 1632.65 M 0.92
16 "int64_t multiple constant xor" 0.97 sec 1649.48 M 0.92
Total absolute time for int64_t constant folding: 24.27 sec
test description absolute operations ratio with
number time per second test0
0 "uint64_t constant" 0.00 sec inf M nan
1 "uint64_t add constants" 0.00 sec inf M nan
2 "uint64_t subtract constants" 0.00 sec inf M nan
3 "uint64_t multiply constants" 0.00 sec inf M nan
4 "uint64_t divide constants" 0.00 sec inf M nan
5 "uint64_t mod constants" 0.00 sec inf M nan
6 "uint64_t equal constants" 0.00 sec inf M nan
7 "uint64_t notequal constants" 0.00 sec inf M nan
8 "uint64_t greater than constants" 0.00 sec inf M nan
9 "uint64_t less than constants" 0.00 sec inf M nan
10 "uint64_t greater than equal constants" 0.00 sec inf M nan
11 "uint64_t less than equal constants" 0.00 sec inf M nan
12 "uint64_t and constants" 0.00 sec inf M nan
13 "uint64_t or constants" 0.00 sec inf M nan
14 "uint64_t xor constants" 0.00 sec inf M nan
Total absolute time for uint64_t simple constant folding: 0.00 sec
test description absolute operations ratio with
number time per second test0
0 "uint64_t constant add" 1.06 sec 1509.43 M 1.00
1 "uint64_t multiple constant adds" 1.07 sec 1495.33 M 1.01
2 "uint64_t constant subtract" 1.06 sec 1509.43 M 1.00
3 "uint64_t multiple constant subtracts" 1.06 sec 1509.43 M 1.00
4 "uint64_t constant multiply" 2.58 sec 620.16 M 2.43
5 "uint64_t multiple constant multiplies" 2.56 sec 625.00 M 2.42
6 "uint64_t multiple constant multiply2" 1.06 sec 1509.43 M 1.00
7 "uint64_t constant divide" 2.68 sec 597.01 M 2.53
8 "uint64_t multiple constant divides" 2.68 sec 597.01 M 2.53
9 "uint64_t multiple constant divide2" 1.06 sec 1509.43 M 1.00
10 "uint64_t multiple constant mixed" 0.80 sec 2000.00 M 0.75
11 "uint64_t constant and" 0.97 sec 1649.48 M 0.92
12 "uint64_t multiple constant and" 0.96 sec 1666.67 M 0.91
13 "uint64_t constant or" 0.97 sec 1649.48 M 0.92
14 "uint64_t multiple constant or" 0.97 sec 1649.48 M 0.92
15 "uint64_t constant xor" 0.96 sec 1666.67 M 0.91
16 "uint64_t multiple constant xor" 0.97 sec 1649.48 M 0.92
Total absolute time for uint64_t constant folding: 23.47 sec
test description absolute operations ratio with
number time per second test0
0 "float constant" 20.09 sec 796.42 M 1.00
1 "float add constants" 20.10 sec 796.02 M 1.00
2 "float subtract constants" 20.15 sec 794.04 M 1.00
3 "float multiply constants" 20.13 sec 794.83 M 1.00
4 "float divide constants" 20.08 sec 796.81 M 1.00
Total absolute time for float simple constant folding: 100.55 sec
test description absolute operations ratio with
number time per second test0
0 "float constant add" 2.01 sec 796.02 M 1.00
1 "float multiple constant adds" 3.36 sec 476.19 M 1.67
2 "float constant subtract" 2.01 sec 796.02 M 1.00
3 "float multiple constant subtracts" 3.35 sec 477.61 M 1.67
4 "float constant multiply" 2.01 sec 796.02 M 1.00
5 "float multiple constant multiplies" 2.21 sec 723.98 M 1.10
6 "float multiple constant multiply2" 2.01 sec 796.02 M 1.00
7 "float constant divide" 11.55 sec 138.53 M 5.75
8 "float multiple constant divides" 22.80 sec 70.18 M 11.34
9 "float multiple constant divide2" 2.01 sec 796.02 M 1.00
10 "float multiple constant mixed" 2.11 sec 758.29 M 1.05
Total absolute time for float constant folding: 55.43 sec
test description absolute operations ratio with
number time per second test0
0 "double constant" 20.08 sec 796.81 M 1.00
1 "double add constants" 20.09 sec 796.42 M 1.00
2 "double subtract constants" 20.16 sec 793.65 M 1.00
3 "double multiply constants" 20.08 sec 796.81 M 1.00
4 "double divide constants" 20.08 sec 796.81 M 1.00
Total absolute time for double simple constant folding: 100.49 sec
test description absolute operations ratio with
number time per second test0
0 "double constant add" 2.03 sec 788.18 M 1.00
1 "double multiple constant adds" 3.35 sec 477.61 M 1.65
2 "double constant subtract" 2.03 sec 788.18 M 1.00
3 "double multiple constant subtracts" 3.36 sec 476.19 M 1.66
4 "double constant multiply" 2.01 sec 796.02 M 0.99
5 "double multiple constant multiplies" 2.33 sec 686.70 M 1.15
6 "double multiple constant multiply2" 2.03 sec 788.18 M 1.00
7 "double constant divide" 21.01 sec 76.15 M 10.35
8 "double multiple constant divides" 41.58 sec 38.48 M 20.48
9 "double multiple constant divide2" 2.03 sec 788.18 M 1.00
10 "double multiple constant mixed" 2.12 sec 754.72 M 1.04
Total absolute time for double constant folding: 83.88 sec
[-- Attachment #6: gmon46.prof --]
[-- Type: text/plain, Size: 68274 bytes --]
Flat profile:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls s/call s/call name
54.23 253.63 253.63 main
8.09 291.45 37.82 1 37.82 37.82 void test_constant<double, custom_multiple_constant_divide<double> >(double*, int, char const*)
4.43 312.18 20.73 1 20.73 20.73 void test_constant<float, custom_multiple_constant_divide<float> >(float*, int, char const*)
4.08 331.28 19.10 1 19.10 19.10 void test_constant<double, custom_constant_divide<double> >(double*, int, char const*)
2.25 341.79 10.50 1 10.50 10.50 void test_constant<float, custom_constant_divide<float> >(float*, int, char const*)
1.17 347.28 5.49 1 5.49 5.49 void test_constant<signed char, custom_multiple_constant_divide<signed char> >(signed char*, int, char const*)
0.78 350.94 3.66 1 3.66 3.66 void test_constant<short, custom_multiple_constant_divide<short> >(short*, int, char const*)
0.75 354.47 3.53 1 3.53 3.53 void test_constant<short, custom_constant_divide<short> >(short*, int, char const*)
0.75 357.97 3.50 1 3.50 3.50 void test_constant<signed char, custom_constant_divide<signed char> >(signed char*, int, char const*)
0.65 361.03 3.06 1 3.06 3.06 void test_constant<short, custom_multiple_constant_multiply<short> >(short*, int, char const*)
0.65 364.08 3.05 1 3.05 3.05 void test_constant<double, custom_multiple_constant_add<double> >(double*, int, char const*)
0.65 367.13 3.05 1 3.05 3.05 void test_constant<double, custom_multiple_constant_sub<double> >(double*, int, char const*)
0.65 370.18 3.05 1 3.05 3.05 void test_constant<float, custom_multiple_constant_add<float> >(float*, int, char const*)
0.65 373.23 3.05 1 3.05 3.05 void test_constant<float, custom_multiple_constant_sub<float> >(float*, int, char const*)
0.65 376.28 3.05 1 3.05 3.05 void test_constant<unsigned char, custom_constant_divide<unsigned char> >(unsigned char*, int, char const*)
0.65 379.32 3.04 1 3.04 3.04 void test_constant<unsigned char, custom_multiple_constant_divide<unsigned char> >(unsigned char*, int, char const*)
0.65 382.36 3.04 1 3.04 3.04 void test_constant<short, custom_constant_multiply<short> >(short*, int, char const*)
0.56 384.96 2.60 1 2.60 2.60 void test_constant<signed char, custom_multiple_constant_add<signed char> >(signed char*, int, char const*)
0.56 387.56 2.60 1 2.60 2.60 void test_constant<short, custom_multiple_constant_multiply2<short> >(short*, int, char const*)
0.55 390.15 2.59 1 2.59 2.59 void test_constant<signed char, custom_multiple_constant_sub<signed char> >(signed char*, int, char const*)
0.55 392.74 2.59 1 2.59 2.59 void test_constant<signed char, custom_multiple_constant_multiply2<signed char> >(signed char*, int, char const*)
0.55 395.33 2.59 1 2.59 2.59 void test_constant<short, custom_constant_add<short> >(short*, int, char const*)
0.55 397.92 2.59 1 2.59 2.59 void test_constant<short, custom_constant_sub<short> >(short*, int, char const*)
0.55 400.51 2.59 1 2.59 2.59 void test_constant<short, custom_multiple_constant_add<short> >(short*, int, char const*)
0.55 403.10 2.59 1 2.59 2.59 void test_constant<short, custom_multiple_constant_sub<short> >(short*, int, char const*)
0.55 405.69 2.59 1 2.59 2.59 void test_constant<short, custom_multiple_constant_divide2<short> >(short*, int, char const*)
0.55 408.27 2.58 1 2.58 2.58 void test_constant<signed char, custom_constant_add<signed char> >(signed char*, int, char const*)
0.55 410.85 2.58 1 2.58 2.58 void test_constant<signed char, custom_constant_sub<signed char> >(signed char*, int, char const*)
0.55 413.44 2.58 1 2.58 2.58 void test_constant<signed char, custom_multiple_constant_divide2<signed char> >(signed char*, int, char const*)
0.46 415.57 2.13 1 2.13 2.13 void test_constant<double, custom_multiple_constant_multiply<double> >(double*, int, char const*)
0.43 417.58 2.01 1 2.01 2.01 void test_constant<float, custom_multiple_constant_multiply<float> >(float*, int, char const*)
0.41 419.51 1.93 1 1.93 1.93 void test_constant<double, custom_multiple_constant_mixed<double> >(double*, int, char const*)
0.41 421.42 1.91 1 1.91 1.91 void test_constant<float, custom_multiple_constant_mixed<float> >(float*, int, char const*)
0.39 423.26 1.84 1 1.84 1.84 void test_constant<double, custom_constant_add<double> >(double*, int, char const*)
0.39 425.10 1.84 1 1.84 1.84 void test_constant<double, custom_multiple_constant_divide2<double> >(double*, int, char const*)
0.39 426.94 1.84 1 1.84 1.84 void test_constant<double, custom_constant_sub<double> >(double*, int, char const*)
0.39 428.78 1.84 1 1.84 1.84 void test_constant<double, custom_multiple_constant_multiply2<double> >(double*, int, char const*)
0.39 430.61 1.83 1 1.83 1.83 void test_constant<double, custom_constant_multiply<double> >(double*, int, char const*)
0.39 432.44 1.83 1 1.83 1.83 void test_constant<float, custom_constant_multiply<float> >(float*, int, char const*)
0.39 434.27 1.83 1 1.83 1.83 void test_constant<float, custom_multiple_constant_divide2<float> >(float*, int, char const*)
0.39 436.10 1.83 1 1.83 1.83 void test_constant<float, custom_multiple_constant_multiply2<float> >(float*, int, char const*)
0.39 437.93 1.83 1 1.83 1.83 void test_constant<float, custom_constant_add<float> >(float*, int, char const*)
0.39 439.75 1.82 1 1.82 1.82 void test_constant<float, custom_constant_sub<float> >(float*, int, char const*)
0.35 441.41 1.66 1 1.66 1.66 void test_constant<unsigned short, custom_constant_divide<unsigned short> >(unsigned short*, int, char const*)
0.35 443.06 1.65 1 1.65 1.65 void test_constant<unsigned short, custom_multiple_constant_divide<unsigned short> >(unsigned short*, int, char const*)
0.29 444.40 1.34 1 1.34 1.34 void test_constant<signed char, custom_constant_xor<signed char> >(signed char*, int, char const*)
0.28 445.73 1.33 1 1.33 1.33 void test_constant<signed char, custom_multiple_constant_xor<signed char> >(signed char*, int, char const*)
0.28 447.05 1.32 1 1.32 1.32 void test_constant<signed char, custom_multiple_constant_and<signed char> >(signed char*, int, char const*)
0.28 448.36 1.31 1 1.31 1.31 void test_constant<signed char, custom_constant_or<signed char> >(signed char*, int, char const*)
0.28 449.67 1.31 1 1.31 1.31 void test_constant<signed char, custom_constant_and<signed char> >(signed char*, int, char const*)
0.28 450.98 1.31 1 1.31 1.31 void test_constant<short, custom_constant_or<short> >(short*, int, char const*)
0.28 452.29 1.31 1 1.31 1.31 void test_constant<short, custom_constant_and<short> >(short*, int, char const*)
0.28 453.60 1.31 1 1.31 1.31 void test_constant<short, custom_constant_xor<short> >(short*, int, char const*)
0.28 454.91 1.31 1 1.31 1.31 void test_constant<short, custom_multiple_constant_or<short> >(short*, int, char const*)
0.28 456.22 1.31 1 1.31 1.31 void test_constant<short, custom_multiple_constant_and<short> >(short*, int, char const*)
0.28 457.53 1.31 1 1.31 1.31 void test_constant<short, custom_multiple_constant_xor<short> >(short*, int, char const*)
0.28 458.83 1.30 1 1.30 1.30 void test_constant<signed char, custom_multiple_constant_or<signed char> >(signed char*, int, char const*)
0.27 460.11 1.28 1 1.28 1.28 void test_constant<int, custom_multiple_constant_multiply<int> >(int*, int, char const*)
0.19 460.99 0.88 1 0.88 0.88 void test_constant<signed char, custom_multiple_constant_mixed<signed char> >(signed char*, int, char const*)
0.19 461.87 0.88 1 0.88 0.88 void test_constant<short, custom_multiple_constant_mixed<short> >(short*, int, char const*)
0.08 462.23 0.36 1 0.36 0.36 void test_constant<int, custom_constant_add<int> >(int*, int, char const*)
0.08 462.59 0.36 1 0.36 0.36 void test_constant<int, custom_multiple_constant_sub<int> >(int*, int, char const*)
0.07 462.94 0.35 1 0.35 0.35 void test_constant<int, custom_constant_or<int> >(int*, int, char const*)
0.07 463.29 0.35 1 0.35 0.35 void test_constant<int, custom_constant_and<int> >(int*, int, char const*)
0.07 463.64 0.35 1 0.35 0.35 void test_constant<int, custom_constant_sub<int> >(int*, int, char const*)
0.07 463.99 0.35 1 0.35 0.35 void test_constant<int, custom_multiple_constant_multiply2<int> >(int*, int, char const*)
0.04 464.19 0.20 1 0.20 0.20 void test_constant<unsigned short, custom_multiple_constant_multiply<unsigned short> >(unsigned short*, int, char const*)
0.04 464.39 0.20 1 0.20 0.20 void test_constant<unsigned short, custom_constant_multiply<unsigned short> >(unsigned short*, int, char const*)
0.04 464.57 0.18 1 0.18 0.18 void test_constant<unsigned short, custom_constant_sub<unsigned short> >(unsigned short*, int, char const*)
0.04 464.75 0.18 1 0.18 0.18 void test_constant<unsigned short, custom_constant_xor<unsigned short> >(unsigned short*, int, char const*)
0.04 464.93 0.18 1 0.18 0.18 void test_constant<unsigned short, custom_multiple_constant_or<unsigned short> >(unsigned short*, int, char const*)
0.04 465.11 0.18 1 0.18 0.18 void test_constant<unsigned short, custom_multiple_constant_add<unsigned short> >(unsigned short*, int, char const*)
0.04 465.29 0.18 1 0.18 0.18 void test_constant<unsigned short, custom_multiple_constant_and<unsigned short> >(unsigned short*, int, char const*)
0.04 465.47 0.18 1 0.18 0.18 void test_constant<unsigned short, custom_multiple_constant_sub<unsigned short> >(unsigned short*, int, char const*)
0.04 465.65 0.18 1 0.18 0.18 void test_constant<unsigned short, custom_multiple_constant_divide2<unsigned short> >(unsigned short*, int, char const*)
0.04 465.83 0.18 1 0.18 0.18 void test_constant<unsigned short, custom_multiple_constant_multiply2<unsigned short> >(unsigned short*, int, char const*)
0.04 466.00 0.17 1 0.17 0.17 void test_constant<unsigned short, custom_constant_or<unsigned short> >(unsigned short*, int, char const*)
0.04 466.17 0.17 1 0.17 0.17 void test_constant<unsigned short, custom_constant_add<unsigned short> >(unsigned short*, int, char const*)
0.04 466.34 0.17 1 0.17 0.17 void test_constant<unsigned short, custom_constant_and<unsigned short> >(unsigned short*, int, char const*)
0.04 466.51 0.17 1 0.17 0.17 void test_constant<unsigned short, custom_multiple_constant_xor<unsigned short> >(unsigned short*, int, char const*)
0.03 466.67 0.16 1 0.16 0.16 void test_constant<unsigned short, custom_multiple_constant_mixed<unsigned short> >(unsigned short*, int, char const*)
0.02 466.77 0.10 1 0.10 0.10 void test_constant<unsigned char, custom_multiple_constant_add<unsigned char> >(unsigned char*, int, char const*)
0.02 466.86 0.09 1 0.09 0.09 void test_constant<unsigned char, custom_constant_or<unsigned char> >(unsigned char*, int, char const*)
0.02 466.95 0.09 1 0.09 0.09 void test_constant<unsigned char, custom_constant_add<unsigned char> >(unsigned char*, int, char const*)
0.02 467.04 0.09 1 0.09 0.09 void test_constant<unsigned char, custom_constant_and<unsigned char> >(unsigned char*, int, char const*)
0.02 467.13 0.09 1 0.09 0.09 void test_constant<unsigned char, custom_constant_sub<unsigned char> >(unsigned char*, int, char const*)
0.02 467.22 0.09 1 0.09 0.09 void test_constant<unsigned char, custom_constant_xor<unsigned char> >(unsigned char*, int, char const*)
0.02 467.31 0.09 1 0.09 0.09 void test_constant<unsigned char, custom_multiple_constant_or<unsigned char> >(unsigned char*, int, char const*)
0.02 467.40 0.09 1 0.09 0.09 void test_constant<unsigned char, custom_multiple_constant_and<unsigned char> >(unsigned char*, int, char const*)
0.02 467.49 0.09 1 0.09 0.09 void test_constant<unsigned char, custom_multiple_constant_sub<unsigned char> >(unsigned char*, int, char const*)
0.02 467.58 0.09 1 0.09 0.09 void test_constant<unsigned char, custom_multiple_constant_xor<unsigned char> >(unsigned char*, int, char const*)
0.02 467.67 0.09 1 0.09 0.09 void test_constant<unsigned char, custom_multiple_constant_divide2<unsigned char> >(unsigned char*, int, char const*)
0.02 467.76 0.09 1 0.09 0.09 void test_constant<unsigned char, custom_multiple_constant_multiply2<unsigned char> >(unsigned char*, int, char const*)
0.00 467.76 0.00 288 0.00 0.00 record_result(double, char const*)
0.00 467.76 0.00 196 0.00 0.00 timer()
0.00 467.76 0.00 164 0.00 0.00 start_timer()
0.00 467.76 0.00 20 0.00 0.00 summarize(char const*, int, int, int, int)
0.00 467.76 0.00 1 0.00 0.00 _GLOBAL__sub_I_results
% the percentage of the total running time of the
time program used by this function.
cumulative a running sum of the number of seconds accounted
seconds for by this function and those listed above it.
self the number of seconds accounted for by this
seconds function alone. This is the major sort for this
listing.
calls the number of times this function was invoked, if
this function is profiled, else blank.
self the average number of milliseconds spent in this
ms/call function per call, if this function is profiled,
else blank.
total the average number of milliseconds spent in this
ms/call function and its descendents per call, if this
function is profiled, else blank.
name the name of the function. This is the minor sort
for this listing. The index shows the location of
the function in the gprof listing. If the index is
in parenthesis it shows where it would appear in
the gprof listing if it were to be printed.
\f
Call graph (explanation follows)
granularity: each sample hit covers 2 byte(s) for 0.00% of 467.76 seconds
index % time self children called name
<spontaneous>
[1] 100.0 253.63 214.13 main [1]
37.82 0.00 1/1 void test_constant<double, custom_multiple_constant_divide<double> >(double*, int, char const*) [2]
20.73 0.00 1/1 void test_constant<float, custom_multiple_constant_divide<float> >(float*, int, char const*) [3]
19.10 0.00 1/1 void test_constant<double, custom_constant_divide<double> >(double*, int, char const*) [4]
10.50 0.00 1/1 void test_constant<float, custom_constant_divide<float> >(float*, int, char const*) [5]
5.49 0.00 1/1 void test_constant<signed char, custom_multiple_constant_divide<signed char> >(signed char*, int, char const*) [6]
3.66 0.00 1/1 void test_constant<short, custom_multiple_constant_divide<short> >(short*, int, char const*) [7]
3.53 0.00 1/1 void test_constant<short, custom_constant_divide<short> >(short*, int, char const*) [8]
3.50 0.00 1/1 void test_constant<signed char, custom_constant_divide<signed char> >(signed char*, int, char const*) [9]
3.06 0.00 1/1 void test_constant<short, custom_multiple_constant_multiply<short> >(short*, int, char const*) [10]
3.05 0.00 1/1 void test_constant<unsigned char, custom_constant_divide<unsigned char> >(unsigned char*, int, char const*) [15]
3.05 0.00 1/1 void test_constant<float, custom_multiple_constant_add<float> >(float*, int, char const*) [13]
3.05 0.00 1/1 void test_constant<float, custom_multiple_constant_sub<float> >(float*, int, char const*) [14]
3.05 0.00 1/1 void test_constant<double, custom_multiple_constant_add<double> >(double*, int, char const*) [11]
3.05 0.00 1/1 void test_constant<double, custom_multiple_constant_sub<double> >(double*, int, char const*) [12]
3.04 0.00 1/1 void test_constant<unsigned char, custom_multiple_constant_divide<unsigned char> >(unsigned char*, int, char const*) [16]
3.04 0.00 1/1 void test_constant<short, custom_constant_multiply<short> >(short*, int, char const*) [17]
2.60 0.00 1/1 void test_constant<signed char, custom_multiple_constant_add<signed char> >(signed char*, int, char const*) [18]
2.60 0.00 1/1 void test_constant<short, custom_multiple_constant_multiply2<short> >(short*, int, char const*) [19]
2.59 0.00 1/1 void test_constant<signed char, custom_multiple_constant_sub<signed char> >(signed char*, int, char const*) [20]
2.59 0.00 1/1 void test_constant<signed char, custom_multiple_constant_multiply2<signed char> >(signed char*, int, char const*) [21]
2.59 0.00 1/1 void test_constant<short, custom_constant_add<short> >(short*, int, char const*) [22]
2.59 0.00 1/1 void test_constant<short, custom_multiple_constant_add<short> >(short*, int, char const*) [24]
2.59 0.00 1/1 void test_constant<short, custom_constant_sub<short> >(short*, int, char const*) [23]
2.59 0.00 1/1 void test_constant<short, custom_multiple_constant_sub<short> >(short*, int, char const*) [25]
2.59 0.00 1/1 void test_constant<short, custom_multiple_constant_divide2<short> >(short*, int, char const*) [26]
2.58 0.00 1/1 void test_constant<signed char, custom_constant_add<signed char> >(signed char*, int, char const*) [27]
2.58 0.00 1/1 void test_constant<signed char, custom_constant_sub<signed char> >(signed char*, int, char const*) [28]
2.58 0.00 1/1 void test_constant<signed char, custom_multiple_constant_divide2<signed char> >(signed char*, int, char const*) [29]
2.13 0.00 1/1 void test_constant<double, custom_multiple_constant_multiply<double> >(double*, int, char const*) [30]
2.01 0.00 1/1 void test_constant<float, custom_multiple_constant_multiply<float> >(float*, int, char const*) [31]
1.93 0.00 1/1 void test_constant<double, custom_multiple_constant_mixed<double> >(double*, int, char const*) [32]
1.91 0.00 1/1 void test_constant<float, custom_multiple_constant_mixed<float> >(float*, int, char const*) [33]
1.84 0.00 1/1 void test_constant<double, custom_constant_add<double> >(double*, int, char const*) [34]
1.84 0.00 1/1 void test_constant<double, custom_multiple_constant_divide2<double> >(double*, int, char const*) [35]
1.84 0.00 1/1 void test_constant<double, custom_constant_sub<double> >(double*, int, char const*) [36]
1.84 0.00 1/1 void test_constant<double, custom_multiple_constant_multiply2<double> >(double*, int, char const*) [37]
1.83 0.00 1/1 void test_constant<float, custom_constant_multiply<float> >(float*, int, char const*) [39]
1.83 0.00 1/1 void test_constant<float, custom_multiple_constant_multiply2<float> >(float*, int, char const*) [41]
1.83 0.00 1/1 void test_constant<float, custom_multiple_constant_divide2<float> >(float*, int, char const*) [40]
1.83 0.00 1/1 void test_constant<double, custom_constant_multiply<double> >(double*, int, char const*) [38]
1.83 0.00 1/1 void test_constant<float, custom_constant_add<float> >(float*, int, char const*) [42]
1.82 0.00 1/1 void test_constant<float, custom_constant_sub<float> >(float*, int, char const*) [43]
1.66 0.00 1/1 void test_constant<unsigned short, custom_constant_divide<unsigned short> >(unsigned short*, int, char const*) [44]
1.65 0.00 1/1 void test_constant<unsigned short, custom_multiple_constant_divide<unsigned short> >(unsigned short*, int, char const*) [45]
1.34 0.00 1/1 void test_constant<signed char, custom_constant_xor<signed char> >(signed char*, int, char const*) [46]
1.33 0.00 1/1 void test_constant<signed char, custom_multiple_constant_xor<signed char> >(signed char*, int, char const*) [47]
1.32 0.00 1/1 void test_constant<signed char, custom_multiple_constant_and<signed char> >(signed char*, int, char const*) [48]
1.31 0.00 1/1 void test_constant<signed char, custom_constant_and<signed char> >(signed char*, int, char const*) [50]
1.31 0.00 1/1 void test_constant<signed char, custom_constant_or<signed char> >(signed char*, int, char const*) [49]
1.31 0.00 1/1 void test_constant<short, custom_constant_and<short> >(short*, int, char const*) [52]
1.31 0.00 1/1 void test_constant<short, custom_multiple_constant_and<short> >(short*, int, char const*) [55]
1.31 0.00 1/1 void test_constant<short, custom_constant_or<short> >(short*, int, char const*) [51]
1.31 0.00 1/1 void test_constant<short, custom_multiple_constant_or<short> >(short*, int, char const*) [54]
1.31 0.00 1/1 void test_constant<short, custom_constant_xor<short> >(short*, int, char const*) [53]
1.31 0.00 1/1 void test_constant<short, custom_multiple_constant_xor<short> >(short*, int, char const*) [56]
1.30 0.00 1/1 void test_constant<signed char, custom_multiple_constant_or<signed char> >(signed char*, int, char const*) [57]
1.28 0.00 1/1 void test_constant<int, custom_multiple_constant_multiply<int> >(int*, int, char const*) [58]
0.88 0.00 1/1 void test_constant<signed char, custom_multiple_constant_mixed<signed char> >(signed char*, int, char const*) [59]
0.88 0.00 1/1 void test_constant<short, custom_multiple_constant_mixed<short> >(short*, int, char const*) [60]
0.36 0.00 1/1 void test_constant<int, custom_constant_add<int> >(int*, int, char const*) [61]
0.36 0.00 1/1 void test_constant<int, custom_multiple_constant_sub<int> >(int*, int, char const*) [62]
0.35 0.00 1/1 void test_constant<int, custom_constant_sub<int> >(int*, int, char const*) [65]
0.35 0.00 1/1 void test_constant<int, custom_multiple_constant_multiply2<int> >(int*, int, char const*) [66]
0.35 0.00 1/1 void test_constant<int, custom_constant_and<int> >(int*, int, char const*) [64]
0.35 0.00 1/1 void test_constant<int, custom_constant_or<int> >(int*, int, char const*) [63]
0.20 0.00 1/1 void test_constant<unsigned short, custom_multiple_constant_multiply<unsigned short> >(unsigned short*, int, char const*) [67]
0.20 0.00 1/1 void test_constant<unsigned short, custom_constant_multiply<unsigned short> >(unsigned short*, int, char const*) [68]
0.18 0.00 1/1 void test_constant<unsigned short, custom_multiple_constant_add<unsigned short> >(unsigned short*, int, char const*) [72]
0.18 0.00 1/1 void test_constant<unsigned short, custom_constant_sub<unsigned short> >(unsigned short*, int, char const*) [69]
0.18 0.00 1/1 void test_constant<unsigned short, custom_multiple_constant_sub<unsigned short> >(unsigned short*, int, char const*) [74]
0.18 0.00 1/1 void test_constant<unsigned short, custom_multiple_constant_multiply2<unsigned short> >(unsigned short*, int, char const*) [76]
0.18 0.00 1/1 void test_constant<unsigned short, custom_multiple_constant_divide2<unsigned short> >(unsigned short*, int, char const*) [75]
0.18 0.00 1/1 void test_constant<unsigned short, custom_multiple_constant_and<unsigned short> >(unsigned short*, int, char const*) [73]
0.18 0.00 1/1 void test_constant<unsigned short, custom_multiple_constant_or<unsigned short> >(unsigned short*, int, char const*) [71]
0.18 0.00 1/1 void test_constant<unsigned short, custom_constant_xor<unsigned short> >(unsigned short*, int, char const*) [70]
0.17 0.00 1/1 void test_constant<unsigned short, custom_constant_add<unsigned short> >(unsigned short*, int, char const*) [78]
0.17 0.00 1/1 void test_constant<unsigned short, custom_constant_and<unsigned short> >(unsigned short*, int, char const*) [79]
0.17 0.00 1/1 void test_constant<unsigned short, custom_constant_or<unsigned short> >(unsigned short*, int, char const*) [77]
0.17 0.00 1/1 void test_constant<unsigned short, custom_multiple_constant_xor<unsigned short> >(unsigned short*, int, char const*) [80]
0.16 0.00 1/1 void test_constant<unsigned short, custom_multiple_constant_mixed<unsigned short> >(unsigned short*, int, char const*) [81]
0.10 0.00 1/1 void test_constant<unsigned char, custom_multiple_constant_add<unsigned char> >(unsigned char*, int, char const*) [82]
0.09 0.00 1/1 void test_constant<unsigned char, custom_constant_add<unsigned char> >(unsigned char*, int, char const*) [84]
0.09 0.00 1/1 void test_constant<unsigned char, custom_constant_sub<unsigned char> >(unsigned char*, int, char const*) [86]
0.09 0.00 1/1 void test_constant<unsigned char, custom_multiple_constant_sub<unsigned char> >(unsigned char*, int, char const*) [90]
0.09 0.00 1/1 void test_constant<unsigned char, custom_multiple_constant_multiply2<unsigned char> >(unsigned char*, int, char const*) [93]
0.09 0.00 1/1 void test_constant<unsigned char, custom_multiple_constant_divide2<unsigned char> >(unsigned char*, int, char const*) [92]
0.09 0.00 1/1 void test_constant<unsigned char, custom_constant_and<unsigned char> >(unsigned char*, int, char const*) [85]
0.09 0.00 1/1 void test_constant<unsigned char, custom_multiple_constant_and<unsigned char> >(unsigned char*, int, char const*) [89]
0.09 0.00 1/1 void test_constant<unsigned char, custom_constant_or<unsigned char> >(unsigned char*, int, char const*) [83]
0.09 0.00 1/1 void test_constant<unsigned char, custom_multiple_constant_or<unsigned char> >(unsigned char*, int, char const*) [88]
0.09 0.00 1/1 void test_constant<unsigned char, custom_constant_xor<unsigned char> >(unsigned char*, int, char const*) [87]
0.09 0.00 1/1 void test_constant<unsigned char, custom_multiple_constant_xor<unsigned char> >(unsigned char*, int, char const*) [91]
0.00 0.00 288/288 record_result(double, char const*) [100]
0.00 0.00 196/196 timer() [101]
0.00 0.00 164/164 start_timer() [102]
0.00 0.00 20/20 summarize(char const*, int, int, int, int) [103]
-----------------------------------------------
37.82 0.00 1/1 main [1]
[2] 8.1 37.82 0.00 1 void test_constant<double, custom_multiple_constant_divide<double> >(double*, int, char const*) [2]
-----------------------------------------------
20.73 0.00 1/1 main [1]
[3] 4.4 20.73 0.00 1 void test_constant<float, custom_multiple_constant_divide<float> >(float*, int, char const*) [3]
-----------------------------------------------
19.10 0.00 1/1 main [1]
[4] 4.1 19.10 0.00 1 void test_constant<double, custom_constant_divide<double> >(double*, int, char const*) [4]
-----------------------------------------------
10.50 0.00 1/1 main [1]
[5] 2.2 10.50 0.00 1 void test_constant<float, custom_constant_divide<float> >(float*, int, char const*) [5]
-----------------------------------------------
5.49 0.00 1/1 main [1]
[6] 1.2 5.49 0.00 1 void test_constant<signed char, custom_multiple_constant_divide<signed char> >(signed char*, int, char const*) [6]
-----------------------------------------------
3.66 0.00 1/1 main [1]
[7] 0.8 3.66 0.00 1 void test_constant<short, custom_multiple_constant_divide<short> >(short*, int, char const*) [7]
-----------------------------------------------
3.53 0.00 1/1 main [1]
[8] 0.8 3.53 0.00 1 void test_constant<short, custom_constant_divide<short> >(short*, int, char const*) [8]
-----------------------------------------------
3.50 0.00 1/1 main [1]
[9] 0.7 3.50 0.00 1 void test_constant<signed char, custom_constant_divide<signed char> >(signed char*, int, char const*) [9]
-----------------------------------------------
3.06 0.00 1/1 main [1]
[10] 0.7 3.06 0.00 1 void test_constant<short, custom_multiple_constant_multiply<short> >(short*, int, char const*) [10]
-----------------------------------------------
3.05 0.00 1/1 main [1]
[11] 0.7 3.05 0.00 1 void test_constant<double, custom_multiple_constant_add<double> >(double*, int, char const*) [11]
-----------------------------------------------
3.05 0.00 1/1 main [1]
[12] 0.7 3.05 0.00 1 void test_constant<double, custom_multiple_constant_sub<double> >(double*, int, char const*) [12]
-----------------------------------------------
3.05 0.00 1/1 main [1]
[13] 0.7 3.05 0.00 1 void test_constant<float, custom_multiple_constant_add<float> >(float*, int, char const*) [13]
-----------------------------------------------
3.05 0.00 1/1 main [1]
[14] 0.7 3.05 0.00 1 void test_constant<float, custom_multiple_constant_sub<float> >(float*, int, char const*) [14]
-----------------------------------------------
3.05 0.00 1/1 main [1]
[15] 0.7 3.05 0.00 1 void test_constant<unsigned char, custom_constant_divide<unsigned char> >(unsigned char*, int, char const*) [15]
-----------------------------------------------
3.04 0.00 1/1 main [1]
[16] 0.6 3.04 0.00 1 void test_constant<unsigned char, custom_multiple_constant_divide<unsigned char> >(unsigned char*, int, char const*) [16]
-----------------------------------------------
3.04 0.00 1/1 main [1]
[17] 0.6 3.04 0.00 1 void test_constant<short, custom_constant_multiply<short> >(short*, int, char const*) [17]
-----------------------------------------------
2.60 0.00 1/1 main [1]
[18] 0.6 2.60 0.00 1 void test_constant<signed char, custom_multiple_constant_add<signed char> >(signed char*, int, char const*) [18]
-----------------------------------------------
2.60 0.00 1/1 main [1]
[19] 0.6 2.60 0.00 1 void test_constant<short, custom_multiple_constant_multiply2<short> >(short*, int, char const*) [19]
-----------------------------------------------
2.59 0.00 1/1 main [1]
[20] 0.6 2.59 0.00 1 void test_constant<signed char, custom_multiple_constant_sub<signed char> >(signed char*, int, char const*) [20]
-----------------------------------------------
2.59 0.00 1/1 main [1]
[21] 0.6 2.59 0.00 1 void test_constant<signed char, custom_multiple_constant_multiply2<signed char> >(signed char*, int, char const*) [21]
-----------------------------------------------
2.59 0.00 1/1 main [1]
[22] 0.6 2.59 0.00 1 void test_constant<short, custom_constant_add<short> >(short*, int, char const*) [22]
-----------------------------------------------
2.59 0.00 1/1 main [1]
[23] 0.6 2.59 0.00 1 void test_constant<short, custom_constant_sub<short> >(short*, int, char const*) [23]
-----------------------------------------------
2.59 0.00 1/1 main [1]
[24] 0.6 2.59 0.00 1 void test_constant<short, custom_multiple_constant_add<short> >(short*, int, char const*) [24]
-----------------------------------------------
2.59 0.00 1/1 main [1]
[25] 0.6 2.59 0.00 1 void test_constant<short, custom_multiple_constant_sub<short> >(short*, int, char const*) [25]
-----------------------------------------------
2.59 0.00 1/1 main [1]
[26] 0.6 2.59 0.00 1 void test_constant<short, custom_multiple_constant_divide2<short> >(short*, int, char const*) [26]
-----------------------------------------------
2.58 0.00 1/1 main [1]
[27] 0.6 2.58 0.00 1 void test_constant<signed char, custom_constant_add<signed char> >(signed char*, int, char const*) [27]
-----------------------------------------------
2.58 0.00 1/1 main [1]
[28] 0.6 2.58 0.00 1 void test_constant<signed char, custom_constant_sub<signed char> >(signed char*, int, char const*) [28]
-----------------------------------------------
2.58 0.00 1/1 main [1]
[29] 0.6 2.58 0.00 1 void test_constant<signed char, custom_multiple_constant_divide2<signed char> >(signed char*, int, char const*) [29]
-----------------------------------------------
2.13 0.00 1/1 main [1]
[30] 0.5 2.13 0.00 1 void test_constant<double, custom_multiple_constant_multiply<double> >(double*, int, char const*) [30]
-----------------------------------------------
2.01 0.00 1/1 main [1]
[31] 0.4 2.01 0.00 1 void test_constant<float, custom_multiple_constant_multiply<float> >(float*, int, char const*) [31]
-----------------------------------------------
1.93 0.00 1/1 main [1]
[32] 0.4 1.93 0.00 1 void test_constant<double, custom_multiple_constant_mixed<double> >(double*, int, char const*) [32]
-----------------------------------------------
1.91 0.00 1/1 main [1]
[33] 0.4 1.91 0.00 1 void test_constant<float, custom_multiple_constant_mixed<float> >(float*, int, char const*) [33]
-----------------------------------------------
1.84 0.00 1/1 main [1]
[34] 0.4 1.84 0.00 1 void test_constant<double, custom_constant_add<double> >(double*, int, char const*) [34]
-----------------------------------------------
1.84 0.00 1/1 main [1]
[35] 0.4 1.84 0.00 1 void test_constant<double, custom_multiple_constant_divide2<double> >(double*, int, char const*) [35]
-----------------------------------------------
1.84 0.00 1/1 main [1]
[36] 0.4 1.84 0.00 1 void test_constant<double, custom_constant_sub<double> >(double*, int, char const*) [36]
-----------------------------------------------
1.84 0.00 1/1 main [1]
[37] 0.4 1.84 0.00 1 void test_constant<double, custom_multiple_constant_multiply2<double> >(double*, int, char const*) [37]
-----------------------------------------------
1.83 0.00 1/1 main [1]
[38] 0.4 1.83 0.00 1 void test_constant<double, custom_constant_multiply<double> >(double*, int, char const*) [38]
-----------------------------------------------
1.83 0.00 1/1 main [1]
[39] 0.4 1.83 0.00 1 void test_constant<float, custom_constant_multiply<float> >(float*, int, char const*) [39]
-----------------------------------------------
1.83 0.00 1/1 main [1]
[40] 0.4 1.83 0.00 1 void test_constant<float, custom_multiple_constant_divide2<float> >(float*, int, char const*) [40]
-----------------------------------------------
1.83 0.00 1/1 main [1]
[41] 0.4 1.83 0.00 1 void test_constant<float, custom_multiple_constant_multiply2<float> >(float*, int, char const*) [41]
-----------------------------------------------
1.83 0.00 1/1 main [1]
[42] 0.4 1.83 0.00 1 void test_constant<float, custom_constant_add<float> >(float*, int, char const*) [42]
-----------------------------------------------
1.82 0.00 1/1 main [1]
[43] 0.4 1.82 0.00 1 void test_constant<float, custom_constant_sub<float> >(float*, int, char const*) [43]
-----------------------------------------------
1.66 0.00 1/1 main [1]
[44] 0.4 1.66 0.00 1 void test_constant<unsigned short, custom_constant_divide<unsigned short> >(unsigned short*, int, char const*) [44]
-----------------------------------------------
1.65 0.00 1/1 main [1]
[45] 0.4 1.65 0.00 1 void test_constant<unsigned short, custom_multiple_constant_divide<unsigned short> >(unsigned short*, int, char const*) [45]
-----------------------------------------------
1.34 0.00 1/1 main [1]
[46] 0.3 1.34 0.00 1 void test_constant<signed char, custom_constant_xor<signed char> >(signed char*, int, char const*) [46]
-----------------------------------------------
1.33 0.00 1/1 main [1]
[47] 0.3 1.33 0.00 1 void test_constant<signed char, custom_multiple_constant_xor<signed char> >(signed char*, int, char const*) [47]
-----------------------------------------------
1.32 0.00 1/1 main [1]
[48] 0.3 1.32 0.00 1 void test_constant<signed char, custom_multiple_constant_and<signed char> >(signed char*, int, char const*) [48]
-----------------------------------------------
1.31 0.00 1/1 main [1]
[49] 0.3 1.31 0.00 1 void test_constant<signed char, custom_constant_or<signed char> >(signed char*, int, char const*) [49]
-----------------------------------------------
1.31 0.00 1/1 main [1]
[50] 0.3 1.31 0.00 1 void test_constant<signed char, custom_constant_and<signed char> >(signed char*, int, char const*) [50]
-----------------------------------------------
1.31 0.00 1/1 main [1]
[51] 0.3 1.31 0.00 1 void test_constant<short, custom_constant_or<short> >(short*, int, char const*) [51]
-----------------------------------------------
1.31 0.00 1/1 main [1]
[52] 0.3 1.31 0.00 1 void test_constant<short, custom_constant_and<short> >(short*, int, char const*) [52]
-----------------------------------------------
1.31 0.00 1/1 main [1]
[53] 0.3 1.31 0.00 1 void test_constant<short, custom_constant_xor<short> >(short*, int, char const*) [53]
-----------------------------------------------
1.31 0.00 1/1 main [1]
[54] 0.3 1.31 0.00 1 void test_constant<short, custom_multiple_constant_or<short> >(short*, int, char const*) [54]
-----------------------------------------------
1.31 0.00 1/1 main [1]
[55] 0.3 1.31 0.00 1 void test_constant<short, custom_multiple_constant_and<short> >(short*, int, char const*) [55]
-----------------------------------------------
1.31 0.00 1/1 main [1]
[56] 0.3 1.31 0.00 1 void test_constant<short, custom_multiple_constant_xor<short> >(short*, int, char const*) [56]
-----------------------------------------------
1.30 0.00 1/1 main [1]
[57] 0.3 1.30 0.00 1 void test_constant<signed char, custom_multiple_constant_or<signed char> >(signed char*, int, char const*) [57]
-----------------------------------------------
1.28 0.00 1/1 main [1]
[58] 0.3 1.28 0.00 1 void test_constant<int, custom_multiple_constant_multiply<int> >(int*, int, char const*) [58]
-----------------------------------------------
0.88 0.00 1/1 main [1]
[59] 0.2 0.88 0.00 1 void test_constant<signed char, custom_multiple_constant_mixed<signed char> >(signed char*, int, char const*) [59]
-----------------------------------------------
0.88 0.00 1/1 main [1]
[60] 0.2 0.88 0.00 1 void test_constant<short, custom_multiple_constant_mixed<short> >(short*, int, char const*) [60]
-----------------------------------------------
0.36 0.00 1/1 main [1]
[61] 0.1 0.36 0.00 1 void test_constant<int, custom_constant_add<int> >(int*, int, char const*) [61]
-----------------------------------------------
0.36 0.00 1/1 main [1]
[62] 0.1 0.36 0.00 1 void test_constant<int, custom_multiple_constant_sub<int> >(int*, int, char const*) [62]
-----------------------------------------------
0.35 0.00 1/1 main [1]
[63] 0.1 0.35 0.00 1 void test_constant<int, custom_constant_or<int> >(int*, int, char const*) [63]
-----------------------------------------------
0.35 0.00 1/1 main [1]
[64] 0.1 0.35 0.00 1 void test_constant<int, custom_constant_and<int> >(int*, int, char const*) [64]
-----------------------------------------------
0.35 0.00 1/1 main [1]
[65] 0.1 0.35 0.00 1 void test_constant<int, custom_constant_sub<int> >(int*, int, char const*) [65]
-----------------------------------------------
0.35 0.00 1/1 main [1]
[66] 0.1 0.35 0.00 1 void test_constant<int, custom_multiple_constant_multiply2<int> >(int*, int, char const*) [66]
-----------------------------------------------
0.20 0.00 1/1 main [1]
[67] 0.0 0.20 0.00 1 void test_constant<unsigned short, custom_multiple_constant_multiply<unsigned short> >(unsigned short*, int, char const*) [67]
-----------------------------------------------
0.20 0.00 1/1 main [1]
[68] 0.0 0.20 0.00 1 void test_constant<unsigned short, custom_constant_multiply<unsigned short> >(unsigned short*, int, char const*) [68]
-----------------------------------------------
0.18 0.00 1/1 main [1]
[69] 0.0 0.18 0.00 1 void test_constant<unsigned short, custom_constant_sub<unsigned short> >(unsigned short*, int, char const*) [69]
-----------------------------------------------
0.18 0.00 1/1 main [1]
[70] 0.0 0.18 0.00 1 void test_constant<unsigned short, custom_constant_xor<unsigned short> >(unsigned short*, int, char const*) [70]
-----------------------------------------------
0.18 0.00 1/1 main [1]
[71] 0.0 0.18 0.00 1 void test_constant<unsigned short, custom_multiple_constant_or<unsigned short> >(unsigned short*, int, char const*) [71]
-----------------------------------------------
0.18 0.00 1/1 main [1]
[72] 0.0 0.18 0.00 1 void test_constant<unsigned short, custom_multiple_constant_add<unsigned short> >(unsigned short*, int, char const*) [72]
-----------------------------------------------
0.18 0.00 1/1 main [1]
[73] 0.0 0.18 0.00 1 void test_constant<unsigned short, custom_multiple_constant_and<unsigned short> >(unsigned short*, int, char const*) [73]
-----------------------------------------------
0.18 0.00 1/1 main [1]
[74] 0.0 0.18 0.00 1 void test_constant<unsigned short, custom_multiple_constant_sub<unsigned short> >(unsigned short*, int, char const*) [74]
-----------------------------------------------
0.18 0.00 1/1 main [1]
[75] 0.0 0.18 0.00 1 void test_constant<unsigned short, custom_multiple_constant_divide2<unsigned short> >(unsigned short*, int, char const*) [75]
-----------------------------------------------
0.18 0.00 1/1 main [1]
[76] 0.0 0.18 0.00 1 void test_constant<unsigned short, custom_multiple_constant_multiply2<unsigned short> >(unsigned short*, int, char const*) [76]
-----------------------------------------------
0.17 0.00 1/1 main [1]
[77] 0.0 0.17 0.00 1 void test_constant<unsigned short, custom_constant_or<unsigned short> >(unsigned short*, int, char const*) [77]
-----------------------------------------------
0.17 0.00 1/1 main [1]
[78] 0.0 0.17 0.00 1 void test_constant<unsigned short, custom_constant_add<unsigned short> >(unsigned short*, int, char const*) [78]
-----------------------------------------------
0.17 0.00 1/1 main [1]
[79] 0.0 0.17 0.00 1 void test_constant<unsigned short, custom_constant_and<unsigned short> >(unsigned short*, int, char const*) [79]
-----------------------------------------------
0.17 0.00 1/1 main [1]
[80] 0.0 0.17 0.00 1 void test_constant<unsigned short, custom_multiple_constant_xor<unsigned short> >(unsigned short*, int, char const*) [80]
-----------------------------------------------
0.16 0.00 1/1 main [1]
[81] 0.0 0.16 0.00 1 void test_constant<unsigned short, custom_multiple_constant_mixed<unsigned short> >(unsigned short*, int, char const*) [81]
-----------------------------------------------
0.10 0.00 1/1 main [1]
[82] 0.0 0.10 0.00 1 void test_constant<unsigned char, custom_multiple_constant_add<unsigned char> >(unsigned char*, int, char const*) [82]
-----------------------------------------------
0.09 0.00 1/1 main [1]
[83] 0.0 0.09 0.00 1 void test_constant<unsigned char, custom_constant_or<unsigned char> >(unsigned char*, int, char const*) [83]
-----------------------------------------------
0.09 0.00 1/1 main [1]
[84] 0.0 0.09 0.00 1 void test_constant<unsigned char, custom_constant_add<unsigned char> >(unsigned char*, int, char const*) [84]
-----------------------------------------------
0.09 0.00 1/1 main [1]
[85] 0.0 0.09 0.00 1 void test_constant<unsigned char, custom_constant_and<unsigned char> >(unsigned char*, int, char const*) [85]
-----------------------------------------------
0.09 0.00 1/1 main [1]
[86] 0.0 0.09 0.00 1 void test_constant<unsigned char, custom_constant_sub<unsigned char> >(unsigned char*, int, char const*) [86]
-----------------------------------------------
0.09 0.00 1/1 main [1]
[87] 0.0 0.09 0.00 1 void test_constant<unsigned char, custom_constant_xor<unsigned char> >(unsigned char*, int, char const*) [87]
-----------------------------------------------
0.09 0.00 1/1 main [1]
[88] 0.0 0.09 0.00 1 void test_constant<unsigned char, custom_multiple_constant_or<unsigned char> >(unsigned char*, int, char const*) [88]
-----------------------------------------------
0.09 0.00 1/1 main [1]
[89] 0.0 0.09 0.00 1 void test_constant<unsigned char, custom_multiple_constant_and<unsigned char> >(unsigned char*, int, char const*) [89]
-----------------------------------------------
0.09 0.00 1/1 main [1]
[90] 0.0 0.09 0.00 1 void test_constant<unsigned char, custom_multiple_constant_sub<unsigned char> >(unsigned char*, int, char const*) [90]
-----------------------------------------------
0.09 0.00 1/1 main [1]
[91] 0.0 0.09 0.00 1 void test_constant<unsigned char, custom_multiple_constant_xor<unsigned char> >(unsigned char*, int, char const*) [91]
-----------------------------------------------
0.09 0.00 1/1 main [1]
[92] 0.0 0.09 0.00 1 void test_constant<unsigned char, custom_multiple_constant_divide2<unsigned char> >(unsigned char*, int, char const*) [92]
-----------------------------------------------
0.09 0.00 1/1 main [1]
[93] 0.0 0.09 0.00 1 void test_constant<unsigned char, custom_multiple_constant_multiply2<unsigned char> >(unsigned char*, int, char const*) [93]
-----------------------------------------------
0.00 0.00 288/288 main [1]
[100] 0.0 0.00 0.00 288 record_result(double, char const*) [100]
-----------------------------------------------
0.00 0.00 196/196 main [1]
[101] 0.0 0.00 0.00 196 timer() [101]
-----------------------------------------------
0.00 0.00 164/164 main [1]
[102] 0.0 0.00 0.00 164 start_timer() [102]
-----------------------------------------------
0.00 0.00 20/20 main [1]
[103] 0.0 0.00 0.00 20 summarize(char const*, int, int, int, int) [103]
-----------------------------------------------
0.00 0.00 1/1 __do_global_ctors_aux [106]
[104] 0.0 0.00 0.00 1 _GLOBAL__sub_I_results [104]
-----------------------------------------------
This table describes the call tree of the program, and was sorted by
the total amount of time spent in each function and its children.
Each entry in this table consists of several lines. The line with the
index number at the left hand margin lists the current function.
The lines above it list the functions that called this function,
and the lines below it list the functions this one called.
This line lists:
index A unique number given to each element of the table.
Index numbers are sorted numerically.
The index number is printed next to every function name so
it is easier to look up where the function in the table.
% time This is the percentage of the `total' time that was spent
in this function and its children. Note that due to
different viewpoints, functions excluded by options, etc,
these numbers will NOT add up to 100%.
self This is the total amount of time spent in this function.
children This is the total amount of time propagated into this
function by its children.
called This is the number of times the function was called.
If the function called itself recursively, the number
only includes non-recursive calls, and is followed by
a `+' and the number of recursive calls.
name The name of the current function. The index number is
printed after it. If the function is a member of a
cycle, the cycle number is printed between the
function's name and the index number.
For the function's parents, the fields have the following meanings:
self This is the amount of time that was propagated directly
from the function into this parent.
children This is the amount of time that was propagated from
the function's children into this parent.
called This is the number of times this parent called the
function `/' the total number of times the function
was called. Recursive calls to the function are not
included in the number after the `/'.
name This is the name of the parent. The parent's index
number is printed after it. If the parent is a
member of a cycle, the cycle number is printed between
the name and the index number.
If the parents of the function cannot be determined, the word
`<spontaneous>' is printed in the `name' field, and all the other
fields are blank.
For the function's children, the fields have the following meanings:
self This is the amount of time that was propagated directly
from the child into the function.
children This is the amount of time that was propagated from the
child's children to the function.
called This is the number of times the function called
this child `/' the total number of times the child
was called. Recursive calls by the child are not
listed in the number after the `/'.
name This is the name of the child. The child's index
number is printed after it. If the child is a
member of a cycle, the cycle number is printed
between the name and the index number.
If there are any cycles (circles) in the call graph, there is an
entry for the cycle-as-a-whole. This entry shows who called the
cycle (as parents) and the members of the cycle (as children.)
The `+' recursive calls entry shows the number of function calls that
were internal to the cycle, and the calls entry for each member shows,
for that member, how many times it was called from other members of
the cycle.
\f
Index by function name
[104] _GLOBAL__sub_I_results (simple_types_constant_folding.cpp) [13] void test_constant<float, custom_multiple_constant_add<float> >(float*, int, char const*) [8] void test_constant<short, custom_constant_divide<short> >(short*, int, char const*)
[102] start_timer() [14] void test_constant<float, custom_multiple_constant_sub<float> >(float*, int, char const*) [17] void test_constant<short, custom_constant_multiply<short> >(short*, int, char const*)
[100] record_result(double, char const*) [33] void test_constant<float, custom_multiple_constant_mixed<float> >(float*, int, char const*) [54] void test_constant<short, custom_multiple_constant_or<short> >(short*, int, char const*)
[49] void test_constant<signed char, custom_constant_or<signed char> >(signed char*, int, char const*) [3] void test_constant<float, custom_multiple_constant_divide<float> >(float*, int, char const*) [24] void test_constant<short, custom_multiple_constant_add<short> >(short*, int, char const*)
[27] void test_constant<signed char, custom_constant_add<signed char> >(signed char*, int, char const*) [40] void test_constant<float, custom_multiple_constant_divide2<float> >(float*, int, char const*) [55] void test_constant<short, custom_multiple_constant_and<short> >(short*, int, char const*)
[50] void test_constant<signed char, custom_constant_and<signed char> >(signed char*, int, char const*) [31] void test_constant<float, custom_multiple_constant_multiply<float> >(float*, int, char const*) [25] void test_constant<short, custom_multiple_constant_sub<short> >(short*, int, char const*)
[28] void test_constant<signed char, custom_constant_sub<signed char> >(signed char*, int, char const*) [41] void test_constant<float, custom_multiple_constant_multiply2<float> >(float*, int, char const*) [56] void test_constant<short, custom_multiple_constant_xor<short> >(short*, int, char const*)
[46] void test_constant<signed char, custom_constant_xor<signed char> >(signed char*, int, char const*) [83] void test_constant<unsigned char, custom_constant_or<unsigned char> >(unsigned char*, int, char const*) [60] void test_constant<short, custom_multiple_constant_mixed<short> >(short*, int, char const*)
[9] void test_constant<signed char, custom_constant_divide<signed char> >(signed char*, int, char const*) [84] void test_constant<unsigned char, custom_constant_add<unsigned char> >(unsigned char*, int, char const*) [7] void test_constant<short, custom_multiple_constant_divide<short> >(short*, int, char const*)
[57] void test_constant<signed char, custom_multiple_constant_or<signed char> >(signed char*, int, char const*) [85] void test_constant<unsigned char, custom_constant_and<unsigned char> >(unsigned char*, int, char const*) [26] void test_constant<short, custom_multiple_constant_divide2<short> >(short*, int, char const*)
[18] void test_constant<signed char, custom_multiple_constant_add<signed char> >(signed char*, int, char const*) [86] void test_constant<unsigned char, custom_constant_sub<unsigned char> >(unsigned char*, int, char const*) [10] void test_constant<short, custom_multiple_constant_multiply<short> >(short*, int, char const*)
[48] void test_constant<signed char, custom_multiple_constant_and<signed char> >(signed char*, int, char const*) [87] void test_constant<unsigned char, custom_constant_xor<unsigned char> >(unsigned char*, int, char const*) [19] void test_constant<short, custom_multiple_constant_multiply2<short> >(short*, int, char const*)
[20] void test_constant<signed char, custom_multiple_constant_sub<signed char> >(signed char*, int, char const*) [15] void test_constant<unsigned char, custom_constant_divide<unsigned char> >(unsigned char*, int, char const*) [77] void test_constant<unsigned short, custom_constant_or<unsigned short> >(unsigned short*, int, char const*)
[47] void test_constant<signed char, custom_multiple_constant_xor<signed char> >(signed char*, int, char const*) [88] void test_constant<unsigned char, custom_multiple_constant_or<unsigned char> >(unsigned char*, int, char const*) [78] void test_constant<unsigned short, custom_constant_add<unsigned short> >(unsigned short*, int, char const*)
[59] void test_constant<signed char, custom_multiple_constant_mixed<signed char> >(signed char*, int, char const*) [82] void test_constant<unsigned char, custom_multiple_constant_add<unsigned char> >(unsigned char*, int, char const*) [79] void test_constant<unsigned short, custom_constant_and<unsigned short> >(unsigned short*, int, char const*)
[6] void test_constant<signed char, custom_multiple_constant_divide<signed char> >(signed char*, int, char const*) [89] void test_constant<unsigned char, custom_multiple_constant_and<unsigned char> >(unsigned char*, int, char const*) [69] void test_constant<unsigned short, custom_constant_sub<unsigned short> >(unsigned short*, int, char const*)
[29] void test_constant<signed char, custom_multiple_constant_divide2<signed char> >(signed char*, int, char const*) [90] void test_constant<unsigned char, custom_multiple_constant_sub<unsigned char> >(unsigned char*, int, char const*) [70] void test_constant<unsigned short, custom_constant_xor<unsigned short> >(unsigned short*, int, char const*)
[21] void test_constant<signed char, custom_multiple_constant_multiply2<signed char> >(signed char*, int, char const*) [91] void test_constant<unsigned char, custom_multiple_constant_xor<unsigned char> >(unsigned char*, int, char const*) [44] void test_constant<unsigned short, custom_constant_divide<unsigned short> >(unsigned short*, int, char const*)
[34] void test_constant<double, custom_constant_add<double> >(double*, int, char const*) [16] void test_constant<unsigned char, custom_multiple_constant_divide<unsigned char> >(unsigned char*, int, char const*) [68] void test_constant<unsigned short, custom_constant_multiply<unsigned short> >(unsigned short*, int, char const*)
[36] void test_constant<double, custom_constant_sub<double> >(double*, int, char const*) [92] void test_constant<unsigned char, custom_multiple_constant_divide2<unsigned char> >(unsigned char*, int, char const*) [71] void test_constant<unsigned short, custom_multiple_constant_or<unsigned short> >(unsigned short*, int, char const*)
[4] void test_constant<double, custom_constant_divide<double> >(double*, int, char const*) [93] void test_constant<unsigned char, custom_multiple_constant_multiply2<unsigned char> >(unsigned char*, int, char const*) [72] void test_constant<unsigned short, custom_multiple_constant_add<unsigned short> >(unsigned short*, int, char const*)
[38] void test_constant<double, custom_constant_multiply<double> >(double*, int, char const*) [63] void test_constant<int, custom_constant_or<int> >(int*, int, char const*) [73] void test_constant<unsigned short, custom_multiple_constant_and<unsigned short> >(unsigned short*, int, char const*)
[11] void test_constant<double, custom_multiple_constant_add<double> >(double*, int, char const*) [61] void test_constant<int, custom_constant_add<int> >(int*, int, char const*) [74] void test_constant<unsigned short, custom_multiple_constant_sub<unsigned short> >(unsigned short*, int, char const*)
[12] void test_constant<double, custom_multiple_constant_sub<double> >(double*, int, char const*) [64] void test_constant<int, custom_constant_and<int> >(int*, int, char const*) [80] void test_constant<unsigned short, custom_multiple_constant_xor<unsigned short> >(unsigned short*, int, char const*)
[32] void test_constant<double, custom_multiple_constant_mixed<double> >(double*, int, char const*) [65] void test_constant<int, custom_constant_sub<int> >(int*, int, char const*) [81] void test_constant<unsigned short, custom_multiple_constant_mixed<unsigned short> >(unsigned short*, int, char const*)
[2] void test_constant<double, custom_multiple_constant_divide<double> >(double*, int, char const*) [62] void test_constant<int, custom_multiple_constant_sub<int> >(int*, int, char const*) [45] void test_constant<unsigned short, custom_multiple_constant_divide<unsigned short> >(unsigned short*, int, char const*)
[35] void test_constant<double, custom_multiple_constant_divide2<double> >(double*, int, char const*) [58] void test_constant<int, custom_multiple_constant_multiply<int> >(int*, int, char const*) [75] void test_constant<unsigned short, custom_multiple_constant_divide2<unsigned short> >(unsigned short*, int, char const*)
[30] void test_constant<double, custom_multiple_constant_multiply<double> >(double*, int, char const*) [66] void test_constant<int, custom_multiple_constant_multiply2<int> >(int*, int, char const*) [67] void test_constant<unsigned short, custom_multiple_constant_multiply<unsigned short> >(unsigned short*, int, char const*)
[37] void test_constant<double, custom_multiple_constant_multiply2<double> >(double*, int, char const*) [51] void test_constant<short, custom_constant_or<short> >(short*, int, char const*) [76] void test_constant<unsigned short, custom_multiple_constant_multiply2<unsigned short> >(unsigned short*, int, char const*)
[42] void test_constant<float, custom_constant_add<float> >(float*, int, char const*) [22] void test_constant<short, custom_constant_add<short> >(short*, int, char const*) [101] timer()
[43] void test_constant<float, custom_constant_sub<float> >(float*, int, char const*) [52] void test_constant<short, custom_constant_and<short> >(short*, int, char const*) [103] summarize(char const*, int, int, int, int)
[5] void test_constant<float, custom_constant_divide<float> >(float*, int, char const*) [23] void test_constant<short, custom_constant_sub<short> >(short*, int, char const*) [1] main
[39] void test_constant<float, custom_constant_multiply<float> >(float*, int, char const*) [53] void test_constant<short, custom_constant_xor<short> >(short*, int, char const*)
[-- Attachment #7: benchmark_shared_tests.h --]
[-- Type: text/plain, Size: 22535 bytes --]
/*
Copyright 2007-2008 Adobe Systems Incorporated
Distributed under the MIT License (see accompanying file LICENSE_1_0_0.txt
or a copy at http://stlab.adobe.com/licenses.html )
Source file for tests shared among several benchmarks
*/
/******************************************************************************/
template<typename T>
inline bool tolerance_equal(T &a, T &b) {
T diff = a - b;
return (abs(diff) < 1.0e-6);
}
template<>
inline bool tolerance_equal(int32_t &a, int32_t &b) {
return (a == b);
}
template<>
inline bool tolerance_equal(uint32_t &a, uint32_t &b) {
return (a == b);
}
template<>
inline bool tolerance_equal(uint64_t &a, uint64_t &b) {
return (a == b);
}
template<>
inline bool tolerance_equal(int64_t &a, int64_t &b) {
return (a == b);
}
template<>
inline bool tolerance_equal(double &a, double &b) {
double diff = a - b;
double reldiff = diff;
if (fabs(a) > 1.0e-8)
reldiff = diff / a;
return (fabs(reldiff) < 1.0e-6);
}
template<>
inline bool tolerance_equal(float &a, float &b) {
float diff = a - b;
double reldiff = diff;
if (fabs(a) > 1.0e-4)
reldiff = diff / a;
return (fabs(reldiff) < 1.0e-3); // single precision divide test is really imprecise
}
/******************************************************************************/
template <typename T, typename Shifter>
inline void check_shifted_sum(T result) {
T temp = (T)SIZE * Shifter::do_shift((T)init_value);
if (!tolerance_equal<T>(result,temp))
printf("test %i failed\n", current_test);
}
template <typename T, typename Shifter>
inline void check_shifted_sum_CSE(T result) {
T temp = (T)0.0;
if (!tolerance_equal<T>(result,temp))
printf("test %i failed\n", current_test);
}
template <typename T, typename Shifter>
inline void check_shifted_variable_sum(T result, T var) {
T temp = (T)SIZE * Shifter::do_shift((T)init_value, var);
if (!tolerance_equal<T>(result,temp))
printf("test %i failed\n", current_test);
}
template <typename T, typename Shifter>
inline void check_shifted_variable_sum(T result, T var1, T var2, T var3, T var4) {
T temp = (T)SIZE * Shifter::do_shift((T)init_value, var1, var2, var3, var4);
if (!tolerance_equal<T>(result,temp))
printf("test %i failed\n", current_test);
}
template <typename T, typename Shifter>
inline void check_shifted_variable_sum_CSE(T result, T var) {
T temp = (T)0.0;
if (!tolerance_equal<T>(result,temp))
printf("test %i failed\n", current_test);
}
template <typename T, typename Shifter>
inline void check_shifted_variable_sum_CSE(T result, T var1, T var2, T var3, T var4) {
T temp = (T)0.0;
if (!tolerance_equal<T>(result,temp))
printf("test %i failed\n", current_test);
}
/******************************************************************************/
template <typename Iterator, typename T>
void fill(Iterator first, Iterator last, T value) {
while (first != last) *first++ = value;
}
/******************************************************************************/
template <typename T>
struct custom_constant_add {
static T do_shift(T input) { return (input + T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_multiple_constant_add {
static T do_shift(T input) { return (input + T(1) + T(2) + T(3) + T(4)); }
};
/******************************************************************************/
template <typename T>
struct custom_constant_sub {
static T do_shift(T input) { return (input - T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_multiple_constant_sub {
static T do_shift(T input) { return (input - T(1) - T(2) - T(3) - T(4)); }
};
/******************************************************************************/
template <typename T>
struct custom_constant_multiply {
static T do_shift(T input) { return (input * T(120)); }
};
/******************************************************************************/
// this should result in a single multiply
template <typename T>
struct custom_multiple_constant_multiply {
static T do_shift(T input) { return (input * T(2) * T(3) * T(4) * T(5)); }
};
/******************************************************************************/
// this should result in a single add
template <typename T>
struct custom_multiple_constant_multiply2 {
static T do_shift(T input) { return (input + T(2) * T(3) * T(4) * T(5)); }
};
/******************************************************************************/
template <typename T>
struct custom_constant_divide {
static T do_shift(T input) { return (input / T(5)); }
};
/******************************************************************************/
template <typename T>
struct custom_multiple_constant_divide {
static T do_shift(T input) { return ((((input / T(2) ) / T(3) ) / T(4)) / T(5)); }
};
/******************************************************************************/
// this more likely to have constants fused than the version above
template <typename T>
struct custom_multiple_constant_divide2 {
static T do_shift(T input) { return (input + (((T(120) / T(3) ) / T(4)) / T(5))); }
};
/******************************************************************************/
template <typename T>
struct custom_multiple_constant_mixed {
static T do_shift(T input) { return (input + T(2) - T(3) * T(4) / T(5)); }
};
/******************************************************************************/
template <typename T>
struct custom_constant_and {
static T do_shift(T input) { return (input & T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_multiple_constant_and {
static T do_shift(T input) { return (input & T(15) & T(30) & T(31) & T(63)); }
};
/******************************************************************************/
template <typename T>
struct custom_constant_or {
static T do_shift(T input) { return (input | T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_multiple_constant_or {
static T do_shift(T input) { return (input | T(15) | T(30) | T(31) | T(63)); }
};
/******************************************************************************/
template <typename T>
struct custom_constant_xor {
static T do_shift(T input) { return (input ^ T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_multiple_constant_xor {
static T do_shift(T input) { return (input ^ T(15) ^ T(30) ^ T(31) ^ T(63)); }
};
/******************************************************************************/
template <typename T>
struct custom_two {
static T do_shift(T input) { return (T(2)); }
};
/******************************************************************************/
template <typename T>
struct custom_add_constants {
static T do_shift(T input) { return (T(1) + T(2)); }
};
/******************************************************************************/
template <typename T>
struct custom_sub_constants {
static T do_shift(T input) { return (T(2) - T(1)); }
};
/******************************************************************************/
template <typename T>
struct custom_multiply_constants {
static T do_shift(T input) { return (T(2) * T(3)); }
};
/******************************************************************************/
template <typename T>
struct custom_divide_constants {
static T do_shift(T input) { return (T(20) / T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_mod_constants {
static T do_shift(T input) { return (T(23) % T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_and_constants {
static T do_shift(T input) { return (T(23) & T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_or_constants {
static T do_shift(T input) { return (T(23) | T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_xor_constants {
static T do_shift(T input) { return (T(23) ^ T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_equal_constants {
static T do_shift(T input) { return (T(23) == T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_notequal_constants {
static T do_shift(T input) { return (T(23) != T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_greaterthan_constants {
static T do_shift(T input) { return (T(23) > T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_lessthan_constants {
static T do_shift(T input) { return (T(23) < T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_greaterthanequal_constants {
static T do_shift(T input) { return (T(23) >= T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_lessthanequal_constants {
static T do_shift(T input) { return (T(23) <= T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_add_variable {
static T do_shift(T input, T v1) { return (input + v1); }
};
/******************************************************************************/
template <typename T>
struct custom_sub_variable {
static T do_shift(T input, T v1) { return (input - v1); }
};
/******************************************************************************/
template <typename T>
struct custom_multiply_variable {
static T do_shift(T input, T v1) { return (input * v1); }
};
/******************************************************************************/
template <typename T>
struct custom_divide_variable {
static T do_shift(T input, T v1) { return (input / v1); }
};
/******************************************************************************/
template <typename T>
struct custom_add_multiple_variable {
static T do_shift(T input, T v1, T v2, T v3, T v4) { return (input + v1 + v2 + v3 + v4); }
};
/******************************************************************************/
template <typename T>
struct custom_sub_multiple_variable {
static T do_shift(T input, T v1, T v2, T v3, T v4) { return (input - v1 - v2 - v3 - v4); }
};
/******************************************************************************/
template <typename T>
struct custom_multiply_multiple_variable {
static T do_shift(T input, T v1, T v2, T v3, T v4) { return (input * v1 * v2 * v3 * v4); }
};
/******************************************************************************/
// something more likely to be moved out of loops, and a sanity check
template <typename T>
struct custom_multiply_multiple_variable2 {
static T do_shift(T input, T v1, T v2, T v3, T v4) { return (input + v1 * v2 * v3 * v4); }
};
/******************************************************************************/
// this can NOT have CSE and loop invariant motion applied in integer math
// and can only be optimized in float if inexact math is allowed
template <typename T>
struct custom_divide_multiple_variable {
static T do_shift(T input, T v1, T v2, T v3, T v4) { return ((((input / v1 ) / v2 ) / v3) / v4); }
};
/******************************************************************************/
// this can have CSE and loop invariant motion applied in integer math
// this should be optimizeable without inexact math
template <typename T>
struct custom_divide_multiple_variable2 {
static T do_shift(T input, T v1, T v2, T v3, T v4) { return (input + (((v1 / v2 ) / v3) / v4)); }
};
/******************************************************************************/
template <typename T>
struct custom_mixed_multiple_variable {
static T do_shift(T input, T v1, T v2, T v3, T v4) { return (input + v1 - v2 * v3 / v4); }
};
/******************************************************************************/
template <typename T>
struct custom_variable_and {
static T do_shift(T input, T v1) { return (input & v1); }
};
/******************************************************************************/
template <typename T>
struct custom_multiple_variable_and {
static T do_shift(T input, T v1, T v2, T v3, T v4) { return (input & v1 & v2 & v3 & v4); }
};
/******************************************************************************/
template <typename T>
struct custom_variable_or {
static T do_shift(T input, T v1) { return (input | v1); }
};
/******************************************************************************/
template <typename T>
struct custom_multiple_variable_or {
static T do_shift(T input, T v1, T v2, T v3, T v4) { return (input | v1 | v2 | v3 | v4); }
};
/******************************************************************************/
template <typename T>
struct custom_variable_xor {
static T do_shift(T input, T v1) { return (input ^ v1); }
};
/******************************************************************************/
template <typename T>
struct custom_multiple_variable_xor {
static T do_shift(T input, T v1, T v2, T v3, T v4) { return (input ^ v1 ^ v2 ^ v3 ^ v4); }
};
/******************************************************************************/
template <typename T>
struct custom_identity {
static T do_shift(T input) { return (input); }
};
/******************************************************************************/
template <typename T>
struct custom_add_zero {
static T do_shift(T input) { return (input + T(0)); }
};
/******************************************************************************/
template <typename T>
struct custom_sub_zero {
static T do_shift(T input) { return (input - T(0)); }
};
/******************************************************************************/
template <typename T>
struct custom_negate {
static T do_shift(T input) { return (-input); }
};
/******************************************************************************/
template <typename T>
struct custom_negate_twice {
static T do_shift(T input) { return (-(-input)); }
};
/******************************************************************************/
template <typename T>
struct custom_zero_minus {
static T do_shift(T input) { return (T(0) - input); }
};
/******************************************************************************/
template <typename T>
struct custom_times_one {
static T do_shift(T input) { return (input * T(1)); }
};
/******************************************************************************/
template <typename T>
struct custom_divideby_one {
static T do_shift(T input) { return (input / T(1)); }
};
/******************************************************************************/
template <typename T>
struct custom_algebra_mixed {
static T do_shift(T input) { return (-(T(0) - (((input + T(0)) - T(0)) / T(1)))) * T(1); }
};
/******************************************************************************/
template <typename T>
struct custom_zero {
static T do_shift(T input) { return T(0); }
};
/******************************************************************************/
template <typename T>
struct custom_times_zero {
static T do_shift(T input) { return (input * T(0)); }
};
/******************************************************************************/
template <typename T>
struct custom_subtract_self {
static T do_shift(T input) { return (input - input); }
};
/******************************************************************************/
template <typename T>
struct custom_algebra_mixed_constant {
static T do_shift(T input) { return (input - (-(T(0) - (((input + T(0)) / T(1)) - T(0)))) * T(1)); }
};
/******************************************************************************/
template <typename T>
struct custom_cse1 {
static T do_shift(T v1, T v2, T v3) { return (v1 * (v2 - v3) ); }
};
/******************************************************************************/
template <typename T>
struct custom_and_self {
static T do_shift(T input) { return (input & input); }
};
/******************************************************************************/
template <typename T>
struct custom_or_self {
static T do_shift(T input) { return (input | input); }
};
/******************************************************************************/
template <typename T>
struct custom_xor_self {
static T do_shift(T input) { return (input ^ input); }
};
/******************************************************************************/
template <typename T>
struct custom_or_zero {
static T do_shift(T input) { return (input | T(0)); }
};
/******************************************************************************/
template <typename T>
struct custom_xor_zero {
static T do_shift(T input) { return (input ^ T(0)); }
};
/******************************************************************************/
template <typename T>
struct custom_andnot_zero {
static T do_shift(T input) { return (input & ~ T(0)); }
};
/******************************************************************************/
template <typename T>
struct custom_and_zero {
static T do_shift(T input) { return (input & T(0)); }
};
/******************************************************************************/
template <typename T>
struct custom_mod_one {
static T do_shift(T input) { return (input % T(1)); }
};
/******************************************************************************/
template <typename T>
struct custom_equal_self {
static T do_shift(T input) { return (input == input); }
};
/******************************************************************************/
template <typename T>
struct custom_notequal_self {
static T do_shift(T input) { return (input != input); }
};
/******************************************************************************/
template <typename T>
struct custom_greaterthan_self {
static T do_shift(T input) { return (input > input); }
};
/******************************************************************************/
template <typename T>
struct custom_lessthan_self {
static T do_shift(T input) { return (input < input); }
};
/******************************************************************************/
template <typename T>
struct custom_greaterthanequal_self {
static T do_shift(T input) { return (input >= input); }
};
/******************************************************************************/
template <typename T>
struct custom_lessthanequal_self {
static T do_shift(T input) { return (input <= input); }
};
/******************************************************************************/
template <typename T, typename Shifter>
void test_constant(T* first, int count, const char *label) {
int i;
start_timer();
for(i = 0; i < iterations; ++i) {
T result = 0;
for (int n = 0; n < count; ++n) {
result += Shifter::do_shift( first[n] );
}
check_shifted_sum<T, Shifter>(result);
}
record_result( timer(), label );
}
/******************************************************************************/
template <typename T, typename Shifter>
void test_variable1(T* first, int count, T v1, const char *label) {
int i;
start_timer();
for(i = 0; i < iterations; ++i) {
T result = 0;
for (int n = 0; n < count; ++n) {
result += Shifter::do_shift( first[n], v1 );
}
check_shifted_variable_sum<T, Shifter>(result, v1);
}
record_result( timer(), label );
}
/******************************************************************************/
template <typename T, typename Shifter>
void test_variable4(T* first, int count, T v1, T v2, T v3, T v4, const char *label) {
int i;
start_timer();
for(i = 0; i < iterations; ++i) {
T result = 0;
for (int n = 0; n < count; ++n) {
result += Shifter::do_shift( first[n], v1, v2, v3, v4 );
}
check_shifted_variable_sum<T, Shifter>(result, v1, v2, v3, v4);
}
record_result( timer(), label );
}
/******************************************************************************/
template <typename T, typename Shifter>
void test_CSE_opt(T* first, int count, T v1, const char *label) {
int i;
start_timer();
for(i = 0; i < iterations; ++i) {
T result = 0;
T temp = Shifter::do_shift( v1, first[0], first[1] );
temp += temp;
result += first[0] + temp;
result -= first[1] + temp;
for (int n = 1; n < count; ++n) {
temp = Shifter::do_shift( v1, first[n-1], first[n] );
temp += temp;
result += first[n-1] + temp;
result -= first[n] + temp;
}
check_shifted_variable_sum_CSE<T, Shifter>(result, v1);
}
record_result( timer(), label );
}
/******************************************************************************/
template <typename T, typename Shifter>
void test_CSE(T* first, int count, T v1, const char *label) {
int i;
start_timer();
for(i = 0; i < iterations; ++i) {
T result = 0;
result += first[0] + Shifter::do_shift( v1, first[0], first[1] ) + Shifter::do_shift( v1, first[0], first[1] );
result -= first[1] + Shifter::do_shift( v1, first[0], first[1] ) + Shifter::do_shift( v1, first[0], first[1] );
for (int n = 1; n < count; ++n) {
result += first[n-1] + Shifter::do_shift( v1, first[n-1], first[n] ) + Shifter::do_shift( v1, first[n-1], first[n] );
result -= first[n] + Shifter::do_shift( v1, first[n-1], first[n] ) + Shifter::do_shift( v1, first[n-1], first[n] );
}
check_shifted_variable_sum_CSE<T, Shifter>(result, v1);
}
record_result( timer(), label );
}
/******************************************************************************/
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Performance degradation on g++ 4.6
2011-08-01 18:44 ` Oleg Smolsky
@ 2011-08-02 5:48 ` Xinliang David Li
2011-08-23 1:09 ` Oleg Smolsky
2011-08-02 9:27 ` Richard Guenther
2011-08-03 19:12 ` Xinliang David Li
2 siblings, 1 reply; 22+ messages in thread
From: Xinliang David Li @ 2011-08-02 5:48 UTC (permalink / raw)
To: Oleg Smolsky; +Cc: gcc
Try isolate the int8_t constant folding testing from the rest to see
if the slow down can be reproduced with the isolated case. If the
problem disappear, it is likely due to the following inline
parameters:
large-function-insns, large-function-growth, large-unit-insns,
inline-unit-growth. For instance set
--param large-function-insns=10000
--param large-unit-insns=20000
David
On Mon, Aug 1, 2011 at 11:43 AM, Oleg Smolsky <oleg.smolsky@riverbed.com> wrote:
> On 2011/7/29 14:07, Xinliang David Li wrote:
>>
>> Profiling tools are your best friend here. If you don't have access to
>> any, the least you can do is to build the program with -pg option and
>> use gprof tool to find out differences.
>
> The test suite has a bunch of very basic C++ tests that are executed an
> enormous number of times. I've built one with the obvious performance
> degradation and attached the source, output and reports.
>
> Here are some highlights:
> v4.1: Total absolute time for int8_t constant folding: 30.42 sec
> v4.6: Total absolute time for int8_t constant folding: 43.32 sec
>
> Every one of the tests in this section had degraded... the first half more
> than the second. I am not sure how much further I can take this - the
> benchmarked code is very short and plain. I can post disassembly for one
> (some?) of them if anyone is willing to take a look...
>
> Thanks,
> Oleg.
>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Performance degradation on g++ 4.6
2011-08-01 18:44 ` Oleg Smolsky
2011-08-02 5:48 ` Xinliang David Li
@ 2011-08-02 9:27 ` Richard Guenther
2011-08-03 19:12 ` Xinliang David Li
2 siblings, 0 replies; 22+ messages in thread
From: Richard Guenther @ 2011-08-02 9:27 UTC (permalink / raw)
To: Oleg Smolsky; +Cc: Xinliang David Li, gcc
On Mon, Aug 1, 2011 at 8:43 PM, Oleg Smolsky
<oleg.smolsky@riverbed.com> wrote:
> On 2011/7/29 14:07, Xinliang David Li wrote:
>>
>> Profiling tools are your best friend here. If you don't have access to
>> any, the least you can do is to build the program with -pg option and
>> use gprof tool to find out differences.
>
> The test suite has a bunch of very basic C++ tests that are executed an
> enormous number of times. I've built one with the obvious performance
> degradation and attached the source, output and reports.
>
> Here are some highlights:
> v4.1: Total absolute time for int8_t constant folding: 30.42 sec
> v4.6: Total absolute time for int8_t constant folding: 43.32 sec
>
> Every one of the tests in this section had degraded... the first half more
> than the second. I am not sure how much further I can take this - the
> benchmarked code is very short and plain. I can post disassembly for one
> (some?) of them if anyone is willing to take a look...
I have a hard time actually seeing what expressions they try to fold
(argh, templates everywhere ...). One thing that changed between
4.1 and 4.6 is that we can no longer re-associate freely signed integers
because of undefined overflow concerns - which is a correctness issue.
Depending on the way the tests are written the folding in 4.1 was
probably a bug.
Richard.
> Thanks,
> Oleg.
>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Performance degradation on g++ 4.6
2011-08-01 18:44 ` Oleg Smolsky
2011-08-02 5:48 ` Xinliang David Li
2011-08-02 9:27 ` Richard Guenther
@ 2011-08-03 19:12 ` Xinliang David Li
2 siblings, 0 replies; 22+ messages in thread
From: Xinliang David Li @ 2011-08-03 19:12 UTC (permalink / raw)
To: Oleg Smolsky; +Cc: gcc
Scanning through the profile data you provided -- test functions such
as test_constant<unsigned short, custom_constant_mutiply<short> ...>
completely disappeared in 4.1's profile which means they are inlined
by gcc4.1. They exist in 4.6's profile. For the unsigned short case
where neither version inlines the call, 4.6 version is much faster.
David
On Mon, Aug 1, 2011 at 11:43 AM, Oleg Smolsky <oleg.smolsky@riverbed.com> wrote:
> On 2011/7/29 14:07, Xinliang David Li wrote:
>>
>> Profiling tools are your best friend here. If you don't have access to
>> any, the least you can do is to build the program with -pg option and
>> use gprof tool to find out differences.
>
> The test suite has a bunch of very basic C++ tests that are executed an
> enormous number of times. I've built one with the obvious performance
> degradation and attached the source, output and reports.
>
> Here are some highlights:
> v4.1: Total absolute time for int8_t constant folding: 30.42 sec
> v4.6: Total absolute time for int8_t constant folding: 43.32 sec
>
> Every one of the tests in this section had degraded... the first half more
> than the second. I am not sure how much further I can take this - the
> benchmarked code is very short and plain. I can post disassembly for one
> (some?) of them if anyone is willing to take a look...
>
> Thanks,
> Oleg.
>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Performance degradation on g++ 4.6
2011-08-02 5:48 ` Xinliang David Li
@ 2011-08-23 1:09 ` Oleg Smolsky
2011-08-23 1:34 ` Oleg Smolsky
0 siblings, 1 reply; 22+ messages in thread
From: Oleg Smolsky @ 2011-08-23 1:09 UTC (permalink / raw)
To: Xinliang David Li; +Cc: gcc
[-- Attachment #1: Type: text/plain, Size: 2306 bytes --]
Hey David, these two --param options made no difference to the test.
I've cut the suite down to a single test (attached), which yields the
following results:
./simple_types_constant_folding_os (gcc 41)
test description time operations/s
0 "int8_t constant add" 1.34 sec 1194.03 M
./simple_types_constant_folding_os (gcc 46)
test description time operations/s
0 "int8_t constant add" 2.84 sec 563.38 M
Both compilers fully inline the templated function and the emitted code
looks very similar. I am puzzled as to why one of these loops is
significantly slower than the other. I've attached disassembled listings
- perhaps someone could have a look please? (the body of the loop starts
at 0000000000400FD for gcc41 and at 0000000000400D90 for gcc46)
Thanks,
Oleg.
On 2011/8/1 22:48, Xinliang David Li wrote:
> Try isolate the int8_t constant folding testing from the rest to see
> if the slow down can be reproduced with the isolated case. If the
> problem disappear, it is likely due to the following inline
> parameters:
>
> large-function-insns, large-function-growth, large-unit-insns,
> inline-unit-growth. For instance set
>
> --param large-function-insns=10000
> --param large-unit-insns=20000
>
> David
>
> On Mon, Aug 1, 2011 at 11:43 AM, Oleg Smolsky<oleg.smolsky@riverbed.com> wrote:
>> On 2011/7/29 14:07, Xinliang David Li wrote:
>>> Profiling tools are your best friend here. If you don't have access to
>>> any, the least you can do is to build the program with -pg option and
>>> use gprof tool to find out differences.
>> The test suite has a bunch of very basic C++ tests that are executed an
>> enormous number of times. I've built one with the obvious performance
>> degradation and attached the source, output and reports.
>>
>> Here are some highlights:
>> v4.1: Total absolute time for int8_t constant folding: 30.42 sec
>> v4.6: Total absolute time for int8_t constant folding: 43.32 sec
>>
>> Every one of the tests in this section had degraded... the first half more
>> than the second. I am not sure how much further I can take this - the
>> benchmarked code is very short and plain. I can post disassembly for one
>> (some?) of them if anyone is willing to take a look...
>>
>> Thanks,
>> Oleg.
>>
[-- Attachment #2: benchmark_shared_tests.h --]
[-- Type: text/plain, Size: 22535 bytes --]
/*
Copyright 2007-2008 Adobe Systems Incorporated
Distributed under the MIT License (see accompanying file LICENSE_1_0_0.txt
or a copy at http://stlab.adobe.com/licenses.html )
Source file for tests shared among several benchmarks
*/
/******************************************************************************/
template<typename T>
inline bool tolerance_equal(T &a, T &b) {
T diff = a - b;
return (abs(diff) < 1.0e-6);
}
template<>
inline bool tolerance_equal(int32_t &a, int32_t &b) {
return (a == b);
}
template<>
inline bool tolerance_equal(uint32_t &a, uint32_t &b) {
return (a == b);
}
template<>
inline bool tolerance_equal(uint64_t &a, uint64_t &b) {
return (a == b);
}
template<>
inline bool tolerance_equal(int64_t &a, int64_t &b) {
return (a == b);
}
template<>
inline bool tolerance_equal(double &a, double &b) {
double diff = a - b;
double reldiff = diff;
if (fabs(a) > 1.0e-8)
reldiff = diff / a;
return (fabs(reldiff) < 1.0e-6);
}
template<>
inline bool tolerance_equal(float &a, float &b) {
float diff = a - b;
double reldiff = diff;
if (fabs(a) > 1.0e-4)
reldiff = diff / a;
return (fabs(reldiff) < 1.0e-3); // single precision divide test is really imprecise
}
/******************************************************************************/
template <typename T, typename Shifter>
inline void check_shifted_sum(T result) {
T temp = (T)SIZE * Shifter::do_shift((T)init_value);
if (!tolerance_equal<T>(result,temp))
printf("test %i failed\n", current_test);
}
template <typename T, typename Shifter>
inline void check_shifted_sum_CSE(T result) {
T temp = (T)0.0;
if (!tolerance_equal<T>(result,temp))
printf("test %i failed\n", current_test);
}
template <typename T, typename Shifter>
inline void check_shifted_variable_sum(T result, T var) {
T temp = (T)SIZE * Shifter::do_shift((T)init_value, var);
if (!tolerance_equal<T>(result,temp))
printf("test %i failed\n", current_test);
}
template <typename T, typename Shifter>
inline void check_shifted_variable_sum(T result, T var1, T var2, T var3, T var4) {
T temp = (T)SIZE * Shifter::do_shift((T)init_value, var1, var2, var3, var4);
if (!tolerance_equal<T>(result,temp))
printf("test %i failed\n", current_test);
}
template <typename T, typename Shifter>
inline void check_shifted_variable_sum_CSE(T result, T var) {
T temp = (T)0.0;
if (!tolerance_equal<T>(result,temp))
printf("test %i failed\n", current_test);
}
template <typename T, typename Shifter>
inline void check_shifted_variable_sum_CSE(T result, T var1, T var2, T var3, T var4) {
T temp = (T)0.0;
if (!tolerance_equal<T>(result,temp))
printf("test %i failed\n", current_test);
}
/******************************************************************************/
template <typename Iterator, typename T>
void fill(Iterator first, Iterator last, T value) {
while (first != last) *first++ = value;
}
/******************************************************************************/
template <typename T>
struct custom_constant_add {
static T do_shift(T input) { return (input + T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_multiple_constant_add {
static T do_shift(T input) { return (input + T(1) + T(2) + T(3) + T(4)); }
};
/******************************************************************************/
template <typename T>
struct custom_constant_sub {
static T do_shift(T input) { return (input - T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_multiple_constant_sub {
static T do_shift(T input) { return (input - T(1) - T(2) - T(3) - T(4)); }
};
/******************************************************************************/
template <typename T>
struct custom_constant_multiply {
static T do_shift(T input) { return (input * T(120)); }
};
/******************************************************************************/
// this should result in a single multiply
template <typename T>
struct custom_multiple_constant_multiply {
static T do_shift(T input) { return (input * T(2) * T(3) * T(4) * T(5)); }
};
/******************************************************************************/
// this should result in a single add
template <typename T>
struct custom_multiple_constant_multiply2 {
static T do_shift(T input) { return (input + T(2) * T(3) * T(4) * T(5)); }
};
/******************************************************************************/
template <typename T>
struct custom_constant_divide {
static T do_shift(T input) { return (input / T(5)); }
};
/******************************************************************************/
template <typename T>
struct custom_multiple_constant_divide {
static T do_shift(T input) { return ((((input / T(2) ) / T(3) ) / T(4)) / T(5)); }
};
/******************************************************************************/
// this more likely to have constants fused than the version above
template <typename T>
struct custom_multiple_constant_divide2 {
static T do_shift(T input) { return (input + (((T(120) / T(3) ) / T(4)) / T(5))); }
};
/******************************************************************************/
template <typename T>
struct custom_multiple_constant_mixed {
static T do_shift(T input) { return (input + T(2) - T(3) * T(4) / T(5)); }
};
/******************************************************************************/
template <typename T>
struct custom_constant_and {
static T do_shift(T input) { return (input & T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_multiple_constant_and {
static T do_shift(T input) { return (input & T(15) & T(30) & T(31) & T(63)); }
};
/******************************************************************************/
template <typename T>
struct custom_constant_or {
static T do_shift(T input) { return (input | T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_multiple_constant_or {
static T do_shift(T input) { return (input | T(15) | T(30) | T(31) | T(63)); }
};
/******************************************************************************/
template <typename T>
struct custom_constant_xor {
static T do_shift(T input) { return (input ^ T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_multiple_constant_xor {
static T do_shift(T input) { return (input ^ T(15) ^ T(30) ^ T(31) ^ T(63)); }
};
/******************************************************************************/
template <typename T>
struct custom_two {
static T do_shift(T input) { return (T(2)); }
};
/******************************************************************************/
template <typename T>
struct custom_add_constants {
static T do_shift(T input) { return (T(1) + T(2)); }
};
/******************************************************************************/
template <typename T>
struct custom_sub_constants {
static T do_shift(T input) { return (T(2) - T(1)); }
};
/******************************************************************************/
template <typename T>
struct custom_multiply_constants {
static T do_shift(T input) { return (T(2) * T(3)); }
};
/******************************************************************************/
template <typename T>
struct custom_divide_constants {
static T do_shift(T input) { return (T(20) / T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_mod_constants {
static T do_shift(T input) { return (T(23) % T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_and_constants {
static T do_shift(T input) { return (T(23) & T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_or_constants {
static T do_shift(T input) { return (T(23) | T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_xor_constants {
static T do_shift(T input) { return (T(23) ^ T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_equal_constants {
static T do_shift(T input) { return (T(23) == T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_notequal_constants {
static T do_shift(T input) { return (T(23) != T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_greaterthan_constants {
static T do_shift(T input) { return (T(23) > T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_lessthan_constants {
static T do_shift(T input) { return (T(23) < T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_greaterthanequal_constants {
static T do_shift(T input) { return (T(23) >= T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_lessthanequal_constants {
static T do_shift(T input) { return (T(23) <= T(10)); }
};
/******************************************************************************/
template <typename T>
struct custom_add_variable {
static T do_shift(T input, T v1) { return (input + v1); }
};
/******************************************************************************/
template <typename T>
struct custom_sub_variable {
static T do_shift(T input, T v1) { return (input - v1); }
};
/******************************************************************************/
template <typename T>
struct custom_multiply_variable {
static T do_shift(T input, T v1) { return (input * v1); }
};
/******************************************************************************/
template <typename T>
struct custom_divide_variable {
static T do_shift(T input, T v1) { return (input / v1); }
};
/******************************************************************************/
template <typename T>
struct custom_add_multiple_variable {
static T do_shift(T input, T v1, T v2, T v3, T v4) { return (input + v1 + v2 + v3 + v4); }
};
/******************************************************************************/
template <typename T>
struct custom_sub_multiple_variable {
static T do_shift(T input, T v1, T v2, T v3, T v4) { return (input - v1 - v2 - v3 - v4); }
};
/******************************************************************************/
template <typename T>
struct custom_multiply_multiple_variable {
static T do_shift(T input, T v1, T v2, T v3, T v4) { return (input * v1 * v2 * v3 * v4); }
};
/******************************************************************************/
// something more likely to be moved out of loops, and a sanity check
template <typename T>
struct custom_multiply_multiple_variable2 {
static T do_shift(T input, T v1, T v2, T v3, T v4) { return (input + v1 * v2 * v3 * v4); }
};
/******************************************************************************/
// this can NOT have CSE and loop invariant motion applied in integer math
// and can only be optimized in float if inexact math is allowed
template <typename T>
struct custom_divide_multiple_variable {
static T do_shift(T input, T v1, T v2, T v3, T v4) { return ((((input / v1 ) / v2 ) / v3) / v4); }
};
/******************************************************************************/
// this can have CSE and loop invariant motion applied in integer math
// this should be optimizeable without inexact math
template <typename T>
struct custom_divide_multiple_variable2 {
static T do_shift(T input, T v1, T v2, T v3, T v4) { return (input + (((v1 / v2 ) / v3) / v4)); }
};
/******************************************************************************/
template <typename T>
struct custom_mixed_multiple_variable {
static T do_shift(T input, T v1, T v2, T v3, T v4) { return (input + v1 - v2 * v3 / v4); }
};
/******************************************************************************/
template <typename T>
struct custom_variable_and {
static T do_shift(T input, T v1) { return (input & v1); }
};
/******************************************************************************/
template <typename T>
struct custom_multiple_variable_and {
static T do_shift(T input, T v1, T v2, T v3, T v4) { return (input & v1 & v2 & v3 & v4); }
};
/******************************************************************************/
template <typename T>
struct custom_variable_or {
static T do_shift(T input, T v1) { return (input | v1); }
};
/******************************************************************************/
template <typename T>
struct custom_multiple_variable_or {
static T do_shift(T input, T v1, T v2, T v3, T v4) { return (input | v1 | v2 | v3 | v4); }
};
/******************************************************************************/
template <typename T>
struct custom_variable_xor {
static T do_shift(T input, T v1) { return (input ^ v1); }
};
/******************************************************************************/
template <typename T>
struct custom_multiple_variable_xor {
static T do_shift(T input, T v1, T v2, T v3, T v4) { return (input ^ v1 ^ v2 ^ v3 ^ v4); }
};
/******************************************************************************/
template <typename T>
struct custom_identity {
static T do_shift(T input) { return (input); }
};
/******************************************************************************/
template <typename T>
struct custom_add_zero {
static T do_shift(T input) { return (input + T(0)); }
};
/******************************************************************************/
template <typename T>
struct custom_sub_zero {
static T do_shift(T input) { return (input - T(0)); }
};
/******************************************************************************/
template <typename T>
struct custom_negate {
static T do_shift(T input) { return (-input); }
};
/******************************************************************************/
template <typename T>
struct custom_negate_twice {
static T do_shift(T input) { return (-(-input)); }
};
/******************************************************************************/
template <typename T>
struct custom_zero_minus {
static T do_shift(T input) { return (T(0) - input); }
};
/******************************************************************************/
template <typename T>
struct custom_times_one {
static T do_shift(T input) { return (input * T(1)); }
};
/******************************************************************************/
template <typename T>
struct custom_divideby_one {
static T do_shift(T input) { return (input / T(1)); }
};
/******************************************************************************/
template <typename T>
struct custom_algebra_mixed {
static T do_shift(T input) { return (-(T(0) - (((input + T(0)) - T(0)) / T(1)))) * T(1); }
};
/******************************************************************************/
template <typename T>
struct custom_zero {
static T do_shift(T input) { return T(0); }
};
/******************************************************************************/
template <typename T>
struct custom_times_zero {
static T do_shift(T input) { return (input * T(0)); }
};
/******************************************************************************/
template <typename T>
struct custom_subtract_self {
static T do_shift(T input) { return (input - input); }
};
/******************************************************************************/
template <typename T>
struct custom_algebra_mixed_constant {
static T do_shift(T input) { return (input - (-(T(0) - (((input + T(0)) / T(1)) - T(0)))) * T(1)); }
};
/******************************************************************************/
template <typename T>
struct custom_cse1 {
static T do_shift(T v1, T v2, T v3) { return (v1 * (v2 - v3) ); }
};
/******************************************************************************/
template <typename T>
struct custom_and_self {
static T do_shift(T input) { return (input & input); }
};
/******************************************************************************/
template <typename T>
struct custom_or_self {
static T do_shift(T input) { return (input | input); }
};
/******************************************************************************/
template <typename T>
struct custom_xor_self {
static T do_shift(T input) { return (input ^ input); }
};
/******************************************************************************/
template <typename T>
struct custom_or_zero {
static T do_shift(T input) { return (input | T(0)); }
};
/******************************************************************************/
template <typename T>
struct custom_xor_zero {
static T do_shift(T input) { return (input ^ T(0)); }
};
/******************************************************************************/
template <typename T>
struct custom_andnot_zero {
static T do_shift(T input) { return (input & ~ T(0)); }
};
/******************************************************************************/
template <typename T>
struct custom_and_zero {
static T do_shift(T input) { return (input & T(0)); }
};
/******************************************************************************/
template <typename T>
struct custom_mod_one {
static T do_shift(T input) { return (input % T(1)); }
};
/******************************************************************************/
template <typename T>
struct custom_equal_self {
static T do_shift(T input) { return (input == input); }
};
/******************************************************************************/
template <typename T>
struct custom_notequal_self {
static T do_shift(T input) { return (input != input); }
};
/******************************************************************************/
template <typename T>
struct custom_greaterthan_self {
static T do_shift(T input) { return (input > input); }
};
/******************************************************************************/
template <typename T>
struct custom_lessthan_self {
static T do_shift(T input) { return (input < input); }
};
/******************************************************************************/
template <typename T>
struct custom_greaterthanequal_self {
static T do_shift(T input) { return (input >= input); }
};
/******************************************************************************/
template <typename T>
struct custom_lessthanequal_self {
static T do_shift(T input) { return (input <= input); }
};
/******************************************************************************/
template <typename T, typename Shifter>
void test_constant(T* first, int count, const char *label) {
int i;
start_timer();
for(i = 0; i < iterations; ++i) {
T result = 0;
for (int n = 0; n < count; ++n) {
result += Shifter::do_shift( first[n] );
}
check_shifted_sum<T, Shifter>(result);
}
record_result( timer(), label );
}
/******************************************************************************/
template <typename T, typename Shifter>
void test_variable1(T* first, int count, T v1, const char *label) {
int i;
start_timer();
for(i = 0; i < iterations; ++i) {
T result = 0;
for (int n = 0; n < count; ++n) {
result += Shifter::do_shift( first[n], v1 );
}
check_shifted_variable_sum<T, Shifter>(result, v1);
}
record_result( timer(), label );
}
/******************************************************************************/
template <typename T, typename Shifter>
void test_variable4(T* first, int count, T v1, T v2, T v3, T v4, const char *label) {
int i;
start_timer();
for(i = 0; i < iterations; ++i) {
T result = 0;
for (int n = 0; n < count; ++n) {
result += Shifter::do_shift( first[n], v1, v2, v3, v4 );
}
check_shifted_variable_sum<T, Shifter>(result, v1, v2, v3, v4);
}
record_result( timer(), label );
}
/******************************************************************************/
template <typename T, typename Shifter>
void test_CSE_opt(T* first, int count, T v1, const char *label) {
int i;
start_timer();
for(i = 0; i < iterations; ++i) {
T result = 0;
T temp = Shifter::do_shift( v1, first[0], first[1] );
temp += temp;
result += first[0] + temp;
result -= first[1] + temp;
for (int n = 1; n < count; ++n) {
temp = Shifter::do_shift( v1, first[n-1], first[n] );
temp += temp;
result += first[n-1] + temp;
result -= first[n] + temp;
}
check_shifted_variable_sum_CSE<T, Shifter>(result, v1);
}
record_result( timer(), label );
}
/******************************************************************************/
template <typename T, typename Shifter>
void test_CSE(T* first, int count, T v1, const char *label) {
int i;
start_timer();
for(i = 0; i < iterations; ++i) {
T result = 0;
result += first[0] + Shifter::do_shift( v1, first[0], first[1] ) + Shifter::do_shift( v1, first[0], first[1] );
result -= first[1] + Shifter::do_shift( v1, first[0], first[1] ) + Shifter::do_shift( v1, first[0], first[1] );
for (int n = 1; n < count; ++n) {
result += first[n-1] + Shifter::do_shift( v1, first[n-1], first[n] ) + Shifter::do_shift( v1, first[n-1], first[n] );
result -= first[n] + Shifter::do_shift( v1, first[n-1], first[n] ) + Shifter::do_shift( v1, first[n-1], first[n] );
}
check_shifted_variable_sum_CSE<T, Shifter>(result, v1);
}
record_result( timer(), label );
}
/******************************************************************************/
[-- Attachment #3: simple_types_constant_folding_os.cpp --]
[-- Type: text/plain, Size: 4257 bytes --]
/*
Copyright 2007-2008 Adobe Systems Incorporated
Distributed under the MIT License (see accompanying file LICENSE_1_0_0.txt
or a copy at http://stlab.adobe.com/licenses.html )
Goal: Test compiler optimizations related to constant folding of simple language defined types
Assumptions:
1) the compiler will combine constant calculations into a single constant for simple types
aka constant folding
result = A + B ==> result = constant
result = A - B ==> result = constant
result = A * B ==> result = constant
result = A / B ==> result = constant
result = A % B ==> result = constant for integer types
result = (A == B) ==> result = constant for integer types
result = (A != B) ==> result = constant for integer types
result = (A > B) ==> result = constant for integer types
result = (A < B) ==> result = constant for integer types
result = (A >= B) ==> result = constant for integer types
result = (A <= B) ==> result = constant for integer types
result = (A & B) ==> result = constant for integer types
result = (A | B) ==> result = constant for integer types
result = (A ^ B) ==> result = constant for integer types
result = input + A + B + C + D ==> result = input + (A+B+C+D)
result = input - A - B - C - D ==> result = input - (A+B+C+D)
result = input * A * B * C * D ==> result = input * (A*B*C*D)
result = input + A * B * C * D ==> result = input + (A*B*C*D)
result = ((((input/A) /B) /C) /D) ==> result = input / (A*B*C*D)
result = input + (((A /B) /C) /D) ==> result = input + (A/B/C/D)
result = input & A & B & C & D ==> result = input & (A&B&C&D) for integer types
result = input | A | B | C | D ==> result = input | (A|B|C|D) for integer types
result = input ^ A ^ B ^ C ^ D ==> result = input ^ (A^B^C^D) for integer types
NOTE - in some cases, loop invariant code motion might move the constant calculation out of the inner loop
making it appear that the constants were folded
But in the constant result cases, we want the compiler to recognize the constant and move it out of the loop
*/
/******************************************************************************/
#include "benchmark_stdint.hpp"
#include <cstddef>
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <cmath>
#include "benchmark_results.h"
#include "benchmark_timer.h"
/******************************************************************************/
// this constant may need to be adjusted to give reasonable minimum times
// For best results, times should be about 1.0 seconds for the minimum test run
int base_iterations = 2000000;
int iterations = base_iterations;
// 8000 items, or between 8k and 64k of data
// this is intended to remain within the L2 cache of most common CPUs
const int SIZE = 8000;
// initial value for filling our arrays, may be changed from the command line
double init_value = 1.0;
/******************************************************************************/
// our global arrays of numbers to be operated upon
double dataDouble[SIZE];
float dataFloat[SIZE];
uint64_t data64unsigned[SIZE];
int64_t data64[SIZE];
uint32_t data32unsigned[SIZE];
int32_t data32[SIZE];
uint16_t data16unsigned[SIZE];
int16_t data16[SIZE];
uint8_t data8unsigned[SIZE];
int8_t data8[SIZE];
/******************************************************************************/
#include "benchmark_shared_tests.h"
/******************************************************************************/
int main(int argc, char** argv) {
// output command for documentation:
int i;
for (i = 0; i < argc; ++i)
printf("%s ", argv[i] );
printf("\n");
if (argc > 1) base_iterations = atoi(argv[1]);
if (argc > 2) init_value = (double) atof(argv[2]);
// int8_t
::fill(data8, data8+SIZE, int8_t(init_value));
iterations = base_iterations / 10;
test_constant<int8_t, custom_constant_add<int8_t> >(data8,SIZE,"int8_t constant add");
summarize("int8_t constant folding", SIZE, iterations, kDontShowGMeans, kDontShowPenalty );
return 0;
}
// the end
/******************************************************************************/
/******************************************************************************/
[-- Attachment #4: simple_types_constant_folding_os-41.lst --]
[-- Type: text/plain, Size: 9674 bytes --]
.text:0000000000400EFF ; ---------------------------------------------------------------------------
.text:0000000000400F04 align 10h
.text:0000000000400F10
.text:0000000000400F10 ; =============== S U B R O U T I N E =======================================
.text:0000000000400F10
.text:0000000000400F10 ; Attributes: bp-based frame
.text:0000000000400F10
.text:0000000000400F10 public main
.text:0000000000400F10 main proc near
.text:0000000000400F10 push rbp
.text:0000000000400F11 mov rbp, rsp
.text:0000000000400F14 push r14
.text:0000000000400F16 push r13
.text:0000000000400F18 push r12
.text:0000000000400F1A push rbx
.text:0000000000400F1B call _mcount
.text:0000000000400F20 test edi, edi
.text:0000000000400F22 mov r13d, edi
.text:0000000000400F25 mov r14, rsi
.text:0000000000400F28 jle short loc_400F4C
.text:0000000000400F2A mov rbx, rsi
.text:0000000000400F2D xor r12d, r12d
.text:0000000000400F30
.text:0000000000400F30 loc_400F30: ; CODE XREF: main+3A\x19j
.text:0000000000400F30 mov rsi, [rbx]
.text:0000000000400F33 xor eax, eax
.text:0000000000400F35 mov edi, offset aS ; "%s "
.text:0000000000400F3A add r12d, 1
.text:0000000000400F3E add rbx, 8
.text:0000000000400F42 call _printf
.text:0000000000400F47 cmp r12d, r13d
.text:0000000000400F4A jnz short loc_400F30
.text:0000000000400F4C
.text:0000000000400F4C loc_400F4C: ; CODE XREF: main+18\x18j
.text:0000000000400F4C mov edi, 0Ah ; c
.text:0000000000400F51 call _putchar
.text:0000000000400F56 cmp r13d, 1
.text:0000000000400F5A jle short loc_400F74
.text:0000000000400F5C mov rdi, [r14+8] ; nptr
.text:0000000000400F60 xor ecx, ecx ; group
.text:0000000000400F62 mov edx, 0Ah ; base
.text:0000000000400F67 xor esi, esi ; endptr
.text:0000000000400F69 call ___strtol_internal
.text:0000000000400F6E mov cs:base_iterations, eax
.text:0000000000400F74
.text:0000000000400F74 loc_400F74: ; CODE XREF: main+4A\x18j
.text:0000000000400F74 cmp r13d, 2
.text:0000000000400F78 jg loc_40110B
.text:0000000000400F7E
.text:0000000000400F7E loc_400F7E: ; CODE XREF: main+210\x19j
.text:0000000000400F7E movsd xmm0, cs:init_value
.text:0000000000400F86 xor eax, eax
.text:0000000000400F88 cvttsd2si edx, xmm0
.text:0000000000400F8C db 66h, 66h, 66h
.text:0000000000400F8C nop
.text:0000000000400F90
.text:0000000000400F90 loc_400F90: ; CODE XREF: main+90\x19j
.text:0000000000400F90 mov ds:data8[rax], dl
.text:0000000000400F96 add rax, 1
.text:0000000000400F9A cmp rax, 1F40h
.text:0000000000400FA0 jnz short loc_400F90
.text:0000000000400FA2 mov ecx, cs:base_iterations
.text:0000000000400FA8 mov edx, 66666667h
.text:0000000000400FAD mov eax, ecx
.text:0000000000400FAF sar ecx, 1Fh
.text:0000000000400FB2 imul edx
.text:0000000000400FB4 sar edx, 2
.text:0000000000400FB7 sub edx, ecx
.text:0000000000400FB9 mov cs:iterations, edx
.text:0000000000400FBF call _clock
.text:0000000000400FC4 mov cs:start_time, rax
.text:0000000000400FCB mov eax, cs:iterations
.text:0000000000400FD1 test eax, eax
.text:0000000000400FD3 jle short loc_40103B
.text:0000000000400FD5 xor ebx, ebx
.text:0000000000400FD7
.text:0000000000400FD7 loc_400FD7: ; CODE XREF: main+129\x19j
.text:0000000000400FD7 xor ecx, ecx
.text:0000000000400FD9 xor edx, edx
.text:0000000000400FDB db 66h, 66h
.text:0000000000400FDB nop
.text:0000000000400FDE db 66h
.text:0000000000400FDE nop
.text:0000000000400FE0
.text:0000000000400FE0 loc_400FE0: ; CODE XREF: main+E8\x19j
.text:0000000000400FE0 movzx eax, ds:data8[rdx]
.text:0000000000400FE7 add rdx, 1
.text:0000000000400FEB add eax, 0Ah
.text:0000000000400FEE cmp rdx, 1F40h
.text:0000000000400FF5 lea ecx, [rax+rcx]
.text:0000000000400FF8 jnz short loc_400FE0
.text:0000000000400FFA movsd xmm0, cs:init_value
.text:0000000000401002 movsd xmm1, cs:qword_401260
.text:000000000040100A cvttsd2si eax, xmm0
.text:000000000040100E add eax, 0Ah
.text:0000000000401011 shl eax, 6
.text:0000000000401014 sub cl, al
.text:0000000000401016 movsx eax, cl
.text:0000000000401019 mov edx, eax
.text:000000000040101B sar edx, 1Fh
.text:000000000040101E xor eax, edx
.text:0000000000401020 sub eax, edx
.text:0000000000401022 cvtsi2sd xmm0, eax
.text:0000000000401026 ucomisd xmm1, xmm0
.text:000000000040102A jbe loc_4010F4
.text:0000000000401030
.text:0000000000401030 loc_401030: ; CODE XREF: main+1F6\x19j
.text:0000000000401030 add ebx, 1
.text:0000000000401033 cmp cs:iterations, ebx
.text:0000000000401039 jg short loc_400FD7
.text:000000000040103B
.text:000000000040103B loc_40103B: ; CODE XREF: main+C3\x18j
.text:000000000040103B call _clock
.text:0000000000401040 mov rdi, cs:results ; ptr
.text:0000000000401047 mov rbx, rax
.text:000000000040104A mov cs:end_time, rax
.text:0000000000401051 mov r12, cs:start_time
.text:0000000000401058 test rdi, rdi
.text:000000000040105B jz short loc_40106B
.text:000000000040105D mov edx, cs:current_test
.text:0000000000401063 cmp edx, cs:allocated_results
.text:0000000000401069 jl short loc_40109C
.text:000000000040106B
.text:000000000040106B loc_40106B: ; CODE XREF: main+14B\x18j
.text:000000000040106B mov esi, cs:allocated_results
.text:0000000000401071 add esi, 0Ah
.text:0000000000401074 mov cs:allocated_results, esi
.text:000000000040107A movsxd rsi, esi
.text:000000000040107D shl rsi, 4 ; size
.text:0000000000401081 call _realloc
.text:0000000000401086 test rax, rax
.text:0000000000401089 mov cs:results, rax
.text:0000000000401090 jz loc_401125
.text:0000000000401096 mov edx, cs:current_test
.text:000000000040109C
.text:000000000040109C loc_40109C: ; CODE XREF: main+159\x18j
.text:000000000040109C sub rbx, r12
.text:000000000040109F movsxd rax, edx
.text:00000000004010A2 xor r8d, r8d
.text:00000000004010A5 cvtsi2sd xmm0, rbx
.text:00000000004010AA shl rax, 4
.text:00000000004010AE add rax, cs:results
.text:00000000004010B5 xor ecx, ecx
.text:00000000004010B7 mov esi, 1F40h
.text:00000000004010BC mov edi, offset aInt8_tConstant ; "int8_t constant folding"
.text:00000000004010C1 mov qword ptr [rax+8], 4012BAh
.text:00000000004010C9 divsd xmm0, cs:qword_401258
.text:00000000004010D1 movsd qword ptr [rax], xmm0
.text:00000000004010D5 lea eax, [rdx+1]
.text:00000000004010D8 mov edx, cs:iterations
.text:00000000004010DE mov cs:current_test, eax
.text:00000000004010E4 call _Z9summarizePKciiii ; summarize(char const*,int,int,int,int)
.text:00000000004010E9 pop rbx
.text:00000000004010EA pop r12
.text:00000000004010EC pop r13
.text:00000000004010EE pop r14
.text:00000000004010F0 leave
.text:00000000004010F1 xor eax, eax
.text:00000000004010F3 retn
.text:00000000004010F4 ; ---------------------------------------------------------------------------
.text:00000000004010F4
.text:00000000004010F4 loc_4010F4: ; CODE XREF: main+11A\x18j
.text:00000000004010F4 mov esi, cs:current_test
.text:00000000004010FA mov edi, offset aTestIFailed ; "test %i failed\n"
.text:00000000004010FF xor eax, eax
.text:0000000000401101 call _printf
.text:0000000000401106 jmp loc_401030
.text:000000000040110B ; ---------------------------------------------------------------------------
.text:000000000040110B
.text:000000000040110B loc_40110B: ; CODE XREF: main+68\x18j
.text:000000000040110B mov rdi, [r14+10h] ; nptr
.text:000000000040110F xor edx, edx ; group
.text:0000000000401111 xor esi, esi ; endptr
.text:0000000000401113 call ___strtod_internal
.text:0000000000401118 movsd cs:init_value, xmm0
.text:0000000000401120 jmp loc_400F7E
.text:0000000000401125 ; ---------------------------------------------------------------------------
.text:0000000000401125
.text:0000000000401125 loc_401125: ; CODE XREF: main+180\x18j
.text:0000000000401125 mov esi, cs:allocated_results
.text:000000000040112B mov edi, offset aCouldNotAlloca ; "Could not allocate %d results\n"
.text:0000000000401130 call _printf
.text:0000000000401135 mov edi, 0FFFFFFFFh ; status
.text:000000000040113A call _exit
.text:000000000040113A main endp
[-- Attachment #5: simple_types_constant_folding_os-46.lst --]
[-- Type: text/plain, Size: 8177 bytes --]
.text:0000000000400C98 ; ---------------------------------------------------------------------------
.text:0000000000400C99 align 20h
.text:0000000000400CA0
.text:0000000000400CA0 ; =============== S U B R O U T I N E =======================================
.text:0000000000400CA0
.text:0000000000400CA0
.text:0000000000400CA0 public main
.text:0000000000400CA0 main proc near
.text:0000000000400CA0
.text:0000000000400CA0 var_28 = qword ptr -28h
.text:0000000000400CA0
.text:0000000000400CA0 push r12
.text:0000000000400CA2 push rbp
.text:0000000000400CA3 mov rbp, rsi
.text:0000000000400CA6 push rbx
.text:0000000000400CA7 mov ebx, edi
.text:0000000000400CA9 sub rsp, 10h
.text:0000000000400CAD test edi, edi
.text:0000000000400CAF jle loc_400E3B
.text:0000000000400CB5 xor r12d, r12d
.text:0000000000400CB8 db 66h, 66h, 66h
.text:0000000000400CB8 nop
.text:0000000000400CBC db 66h, 66h, 66h
.text:0000000000400CBC nop
.text:0000000000400CC0
.text:0000000000400CC0 loc_400CC0: ; CODE XREF: main+38\x19j
.text:0000000000400CC0 mov rsi, [rbp+r12*8+0]
.text:0000000000400CC5 xor eax, eax
.text:0000000000400CC7 mov edi, offset aS ; "%s "
.text:0000000000400CCC add r12, 1
.text:0000000000400CD0 call _printf
.text:0000000000400CD5 cmp ebx, r12d
.text:0000000000400CD8 jg short loc_400CC0
.text:0000000000400CDA mov edi, 0Ah ; c
.text:0000000000400CDF call _putchar
.text:0000000000400CE4 cmp ebx, 1
.text:0000000000400CE7 jle short loc_400D1B
.text:0000000000400CE9 mov rdi, [rbp+8] ; nptr
.text:0000000000400CED xor ecx, ecx ; group
.text:0000000000400CEF xor esi, esi ; endptr
.text:0000000000400CF1 mov edx, 0Ah ; base
.text:0000000000400CF6 call ___strtol_internal
.text:0000000000400CFB cmp ebx, 2
.text:0000000000400CFE mov cs:base_iterations, eax
.text:0000000000400D04 jz short loc_400D1B
.text:0000000000400D06 mov rdi, [rbp+10h] ; nptr
.text:0000000000400D0A xor edx, edx ; group
.text:0000000000400D0C xor esi, esi ; endptr
.text:0000000000400D0E call ___strtod_internal
.text:0000000000400D13 movsd cs:init_value, xmm0
.text:0000000000400D1B
.text:0000000000400D1B loc_400D1B: ; CODE XREF: main+47\x18j
.text:0000000000400D1B ; main+64\x18j ...
.text:0000000000400D1B movsd xmm1, cs:init_value
.text:0000000000400D23 mov ecx, 1F4h
.text:0000000000400D28 cvttsd2si eax, xmm1
.text:0000000000400D2C pxor xmm1, xmm1
.text:0000000000400D30 movd xmm0, eax
.text:0000000000400D34 xor eax, eax
.text:0000000000400D36 pshufb xmm0, xmm1
.text:0000000000400D3B db 66h, 66h
.text:0000000000400D3B nop
.text:0000000000400D3E db 66h
.text:0000000000400D3E nop
.text:0000000000400D40
.text:0000000000400D40 loc_400D40: ; CODE XREF: main+B6\x19j
.text:0000000000400D40 mov rdx, rax
.text:0000000000400D43 add rax, 1
.text:0000000000400D47 shl rdx, 4
.text:0000000000400D4B cmp rcx, rax
.text:0000000000400D4E movdqa xmmword ptr [rdx+5015A0h], xmm0
.text:0000000000400D56 ja short loc_400D40
.text:0000000000400D58 mov ecx, cs:base_iterations
.text:0000000000400D5E mov edx, 66666667h
.text:0000000000400D63 xor ebx, ebx
.text:0000000000400D65 mov eax, ecx
.text:0000000000400D67 sar ecx, 1Fh
.text:0000000000400D6A imul edx
.text:0000000000400D6C sar edx, 2
.text:0000000000400D6F sub edx, ecx
.text:0000000000400D71 mov cs:iterations, edx
.text:0000000000400D77 call _Z11start_timerv ; start_timer(void)
.text:0000000000400D7C mov ecx, cs:iterations
.text:0000000000400D82 movsd xmm1, cs:qword_4010E0
.text:0000000000400D8A test ecx, ecx
.text:0000000000400D8C jle short loc_400DE3
.text:0000000000400D8E db 66h
.text:0000000000400D8E nop
.text:0000000000400D90
.text:0000000000400D90 loc_400D90: ; CODE XREF: main+141\x19j
.text:0000000000400D90 mov edx, offset data8
.text:0000000000400D95 xor eax, eax
.text:0000000000400D97 db 66h, 66h
.text:0000000000400D97 nop
.text:0000000000400D9A db 66h, 66h
.text:0000000000400D9A nop
.text:0000000000400D9D db 66h, 66h
.text:0000000000400D9D nop
.text:0000000000400DA0
.text:0000000000400DA0 loc_400DA0: ; CODE XREF: main+110\x19j
.text:0000000000400DA0 add eax, 0Ah
.text:0000000000400DA3 add al, [rdx]
.text:0000000000400DA5 add rdx, 1
.text:0000000000400DA9 cmp rdx, 5034E0h
.text:0000000000400DB0 jnz short loc_400DA0
.text:0000000000400DB2 movsd xmm0, cs:init_value
.text:0000000000400DBA cvttsd2si edx, xmm0
.text:0000000000400DBE add edx, 0Ah
.text:0000000000400DC1 shl edx, 6
.text:0000000000400DC4 sub al, dl
.text:0000000000400DC6 movsx eax, al
.text:0000000000400DC9 mov edx, eax
.text:0000000000400DCB sar edx, 1Fh
.text:0000000000400DCE xor eax, edx
.text:0000000000400DD0 sub eax, edx
.text:0000000000400DD2 cvtsi2sd xmm0, eax
.text:0000000000400DD6 ucomisd xmm1, xmm0
.text:0000000000400DDA jbe short loc_400E17
.text:0000000000400DDC
.text:0000000000400DDC loc_400DDC: ; CODE XREF: main+199\x19j
.text:0000000000400DDC add ebx, 1
.text:0000000000400DDF cmp ebx, ecx
.text:0000000000400DE1 jl short loc_400D90
.text:0000000000400DE3
.text:0000000000400DE3 loc_400DE3: ; CODE XREF: main+EC\x18j
.text:0000000000400DE3 call _Z5timerv ; timer(void)
.text:0000000000400DE8 mov edi, offset aInt8_tConstant ; "int8_t constant add"
.text:0000000000400DED call _Z13record_resultdPKc ; record_result(double,char const*)
.text:0000000000400DF2 mov edx, cs:iterations
.text:0000000000400DF8 xor r8d, r8d
.text:0000000000400DFB xor ecx, ecx
.text:0000000000400DFD mov esi, 1F40h
.text:0000000000400E02 mov edi, offset aInt8_tConsta_0 ; "int8_t constant folding"
.text:0000000000400E07 call _Z9summarizePKciiii ; summarize(char const*,int,int,int,int)
.text:0000000000400E0C add rsp, 10h
.text:0000000000400E10 xor eax, eax
.text:0000000000400E12 pop rbx
.text:0000000000400E13 pop rbp
.text:0000000000400E14 pop r12
.text:0000000000400E16 retn
.text:0000000000400E17 ; ---------------------------------------------------------------------------
.text:0000000000400E17
.text:0000000000400E17 loc_400E17: ; CODE XREF: main+13A\x18j
.text:0000000000400E17 mov esi, cs:current_test
.text:0000000000400E1D mov edi, offset aTestIFailed ; "test %i failed\n"
.text:0000000000400E22 xor eax, eax
.text:0000000000400E24 movsd [rsp+28h+var_28], xmm1
.text:0000000000400E29 call _printf
.text:0000000000400E2E mov ecx, cs:iterations
.text:0000000000400E34 movsd xmm1, [rsp+28h+var_28]
.text:0000000000400E39 jmp short loc_400DDC
.text:0000000000400E3B ; ---------------------------------------------------------------------------
.text:0000000000400E3B
.text:0000000000400E3B loc_400E3B: ; CODE XREF: main+F\x18j
.text:0000000000400E3B mov edi, 0Ah ; c
.text:0000000000400E40 call _putchar
.text:0000000000400E45 jmp loc_400D1B
.text:0000000000400E45 main endp
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Performance degradation on g++ 4.6
2011-08-23 1:09 ` Oleg Smolsky
@ 2011-08-23 1:34 ` Oleg Smolsky
2011-08-23 1:37 ` Andrew Pinski
0 siblings, 1 reply; 22+ messages in thread
From: Oleg Smolsky @ 2011-08-23 1:34 UTC (permalink / raw)
To: Xinliang David Li; +Cc: gcc
On 2011/8/22 18:09, Oleg Smolsky wrote:
> Both compilers fully inline the templated function and the emitted
> code looks very similar. I am puzzled as to why one of these loops is
> significantly slower than the other. I've attached disassembled
> listings - perhaps someone could have a look please? (the body of the
> loop starts at 0000000000400FD for gcc41 and at 0000000000400D90 for
> gcc46)
The difference, theoretically, should be due to the inner loop:
v4.6:
.text:0000000000400DA0 loc_400DA0:
.text:0000000000400DA0 add eax, 0Ah
.text:0000000000400DA3 add al, [rdx]
.text:0000000000400DA5 add rdx, 1
.text:0000000000400DA9 cmp rdx, 5034E0h
.text:0000000000400DB0 jnz short loc_400DA0
v4.1:
.text:0000000000400FE0 loc_400FE0:
.text:0000000000400FE0 movzx eax, ds:data8[rdx]
.text:0000000000400FE7 add rdx, 1
.text:0000000000400FEB add eax, 0Ah
.text:0000000000400FEE cmp rdx, 1F40h
.text:0000000000400FF5 lea ecx, [rax+rcx]
.text:0000000000400FF8 jnz short loc_400FE0
However, I cannot see how the first version would be slow... The custom
templated "shifter" degenerates into "add 0xa", which is the point of
the test... Hmm...
Oleg.
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Performance degradation on g++ 4.6
2011-08-23 1:34 ` Oleg Smolsky
@ 2011-08-23 1:37 ` Andrew Pinski
2011-08-23 17:47 ` Oleg Smolsky
0 siblings, 1 reply; 22+ messages in thread
From: Andrew Pinski @ 2011-08-23 1:37 UTC (permalink / raw)
To: Oleg Smolsky; +Cc: Xinliang David Li, gcc
On Mon, Aug 22, 2011 at 6:34 PM, Oleg Smolsky <oleg.smolsky@riverbed.com> wrote:
> On 2011/8/22 18:09, Oleg Smolsky wrote:
>>
>> Both compilers fully inline the templated function and the emitted code
>> looks very similar. I am puzzled as to why one of these loops is
>> significantly slower than the other. I've attached disassembled listings -
>> perhaps someone could have a look please? (the body of the loop starts at
>> 0000000000400FD for gcc41 and at 0000000000400D90 for gcc46)
>
> The difference, theoretically, should be due to the inner loop:
>
> v4.6:
> .text:0000000000400DA0 loc_400DA0:
> .text:0000000000400DA0 add eax, 0Ah
> .text:0000000000400DA3 add al, [rdx]
> .text:0000000000400DA5 add rdx, 1
> .text:0000000000400DA9 cmp rdx, 5034E0h
> .text:0000000000400DB0 jnz short loc_400DA0
>
> v4.1:
> .text:0000000000400FE0 loc_400FE0:
> .text:0000000000400FE0 movzx eax, ds:data8[rdx]
> .text:0000000000400FE7 add rdx, 1
> .text:0000000000400FEB add eax, 0Ah
> .text:0000000000400FEE cmp rdx, 1F40h
> .text:0000000000400FF5 lea ecx, [rax+rcx]
> .text:0000000000400FF8 jnz short loc_400FE0
>
> However, I cannot see how the first version would be slow... The custom
> templated "shifter" degenerates into "add 0xa", which is the point of the
> test... Hmm...
It is slower because of the subregister depedency between eax and al.
Thanks,
Andrew Pinski
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Performance degradation on g++ 4.6
2011-08-23 1:37 ` Andrew Pinski
@ 2011-08-23 17:47 ` Oleg Smolsky
2011-08-23 18:38 ` Xinliang David Li
0 siblings, 1 reply; 22+ messages in thread
From: Oleg Smolsky @ 2011-08-23 17:47 UTC (permalink / raw)
To: Andrew Pinski; +Cc: Xinliang David Li, gcc
Hey Andrew,
On 2011/8/22 18:37, Andrew Pinski wrote:
> On Mon, Aug 22, 2011 at 6:34 PM, Oleg Smolsky<oleg.smolsky@riverbed.com> wrote:
>> On 2011/8/22 18:09, Oleg Smolsky wrote:
>>> Both compilers fully inline the templated function and the emitted code
>>> looks very similar. I am puzzled as to why one of these loops is
>>> significantly slower than the other. I've attached disassembled listings -
>>> perhaps someone could have a look please? (the body of the loop starts at
>>> 0000000000400FD for gcc41 and at 0000000000400D90 for gcc46)
>> The difference, theoretically, should be due to the inner loop:
>>
>> v4.6:
>> .text:0000000000400DA0 loc_400DA0:
>> .text:0000000000400DA0 add eax, 0Ah
>> .text:0000000000400DA3 add al, [rdx]
>> .text:0000000000400DA5 add rdx, 1
>> .text:0000000000400DA9 cmp rdx, 5034E0h
>> .text:0000000000400DB0 jnz short loc_400DA0
>>
>> v4.1:
>> .text:0000000000400FE0 loc_400FE0:
>> .text:0000000000400FE0 movzx eax, ds:data8[rdx]
>> .text:0000000000400FE7 add rdx, 1
>> .text:0000000000400FEB add eax, 0Ah
>> .text:0000000000400FEE cmp rdx, 1F40h
>> .text:0000000000400FF5 lea ecx, [rax+rcx]
>> .text:0000000000400FF8 jnz short loc_400FE0
>>
>> However, I cannot see how the first version would be slow... The custom
>> templated "shifter" degenerates into "add 0xa", which is the point of the
>> test... Hmm...
> It is slower because of the subregister depedency between eax and al.
>
Hmm... it is little difficult to reason about these fragments as they
are not equivalent in functionality. The g++4.1 version discards the
result while the other version (correctly) accumulates. Oh, I've just
realized that I grabbed the first iteration of the inner loop which was
factored out (perhaps due to unrolling?) Oops, my apologies.
Here are complete loops, out of a further digested test:
g++ 4.1 (1.35 sec, 1185M ops/s):
.text:0000000000400FDB loc_400FDB:
.text:0000000000400FDB xor ecx, ecx
.text:0000000000400FDD xor edx, edx
.text:0000000000400FDF nop
.text:0000000000400FE0
.text:0000000000400FE0 loc_400FE0:
.text:0000000000400FE0 movzx eax, ds:data8[rdx]
.text:0000000000400FE7 add rdx, 1
.text:0000000000400FEB add eax, 0Ah
.text:0000000000400FEE cmp rdx, 1F40h
.text:0000000000400FF5 lea ecx, [rax+rcx]
.text:0000000000400FF8 jnz short loc_400FE0
.text:0000000000400FFA movsx eax, cl
.text:0000000000400FFD add esi, 1
.text:0000000000401000 add ebx, eax
.text:0000000000401002 cmp esi, edi
.text:0000000000401004 jnz short loc_400FDB
g++ 4.6 (2.86s, 563M ops/s) :
.text:0000000000400D80 loc_400D80:
.text:0000000000400D80 mov edx, offset data8
.text:0000000000400D85 xor eax, eax
.text:0000000000400D87 db 66h, 66h
.text:0000000000400D87 nop
.text:0000000000400D8A db 66h, 66h
.text:0000000000400D8A nop
.text:0000000000400D8D db 66h, 66h
.text:0000000000400D8D nop
.text:0000000000400D90
.text:0000000000400D90 loc_400D90:
.text:0000000000400D90 add eax, 0Ah
.text:0000000000400D93 add al, [rdx]
.text:0000000000400D95 add rdx, 1
.text:0000000000400D99 cmp rdx, 503480h
.text:0000000000400DA0 jnz short loc_400D90
.text:0000000000400DA2 movsx eax, al
.text:0000000000400DA5 add ecx, 1
.text:0000000000400DA8 add ebx, eax
.text:0000000000400DAA cmp ecx, esi
.text:0000000000400DAC jnz short loc_400D80
Your observation still holds - there are two sequential instructions
that operate on the same register. So, I manually patched the 4.6
binary's inner loop to the following:
.text:0000000000400D90 add al, [rdx]
.text:0000000000400D92 add rdx, 1
.text:0000000000400D96 add eax, 0Ah
.text:0000000000400D99 cmp rdx, 503480h
.text:0000000000400DA0 jnz short loc_400D90
and that made no significant difference in performance.
Is this dependency really a performance issue? BTW, the outer loop
executes 200,000 times...
Thanks!
Oleg.
P.S. GDB disassembles the v4.6 emitted padding as:
0x0000000000400d87 <+231>: data32 xchg ax,ax
0x0000000000400d8a <+234>: data32 xchg ax,ax
0x0000000000400d8d <+237>: data32 xchg ax,ax
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Performance degradation on g++ 4.6
2011-08-23 17:47 ` Oleg Smolsky
@ 2011-08-23 18:38 ` Xinliang David Li
2011-08-24 19:51 ` Oleg Smolsky
0 siblings, 1 reply; 22+ messages in thread
From: Xinliang David Li @ 2011-08-23 18:38 UTC (permalink / raw)
To: Oleg Smolsky; +Cc: Andrew Pinski, gcc
Partial register stall happens when there is a 32bit register read
followed by a partial register write. In your case, the stall probably
happens in the next iteration when 'add eax, 0Ah' executes, so your
manual patch does not work. Try change
add al, [dx] into two instructions (assuming esi is available here)
movzx esi, ds:data8[dx]
add eax, esi
David
On Tue, Aug 23, 2011 at 10:47 AM, Oleg Smolsky
<oleg.smolsky@riverbed.com> wrote:
> Hey Andrew,
>
> On 2011/8/22 18:37, Andrew Pinski wrote:
>>
>> On Mon, Aug 22, 2011 at 6:34 PM, Oleg Smolsky<oleg.smolsky@riverbed.com>
>> wrote:
>>>
>>> On 2011/8/22 18:09, Oleg Smolsky wrote:
>>>>
>>>> Both compilers fully inline the templated function and the emitted code
>>>> looks very similar. I am puzzled as to why one of these loops is
>>>> significantly slower than the other. I've attached disassembled listings
>>>> -
>>>> perhaps someone could have a look please? (the body of the loop starts
>>>> at
>>>> 0000000000400FD for gcc41 and at 0000000000400D90 for gcc46)
>>>
>>> The difference, theoretically, should be due to the inner loop:
>>>
>>> v4.6:
>>> .text:0000000000400DA0 loc_400DA0:
>>> .text:0000000000400DA0 add eax, 0Ah
>>> .text:0000000000400DA3 add al, [rdx]
>>> .text:0000000000400DA5 add rdx, 1
>>> .text:0000000000400DA9 cmp rdx, 5034E0h
>>> .text:0000000000400DB0 jnz short loc_400DA0
>>>
>>> v4.1:
>>> .text:0000000000400FE0 loc_400FE0:
>>> .text:0000000000400FE0 movzx eax, ds:data8[rdx]
>>> .text:0000000000400FE7 add rdx, 1
>>> .text:0000000000400FEB add eax, 0Ah
>>> .text:0000000000400FEE cmp rdx, 1F40h
>>> .text:0000000000400FF5 lea ecx, [rax+rcx]
>>> .text:0000000000400FF8 jnz short loc_400FE0
>>>
>>> However, I cannot see how the first version would be slow... The custom
>>> templated "shifter" degenerates into "add 0xa", which is the point of the
>>> test... Hmm...
>>
>> It is slower because of the subregister depedency between eax and al.
>>
> Hmm... it is little difficult to reason about these fragments as they are
> not equivalent in functionality. The g++4.1 version discards the result
> while the other version (correctly) accumulates. Oh, I've just realized that
> I grabbed the first iteration of the inner loop which was factored out
> (perhaps due to unrolling?) Oops, my apologies.
>
> Here are complete loops, out of a further digested test:
>
> g++ 4.1 (1.35 sec, 1185M ops/s):
>
> .text:0000000000400FDB loc_400FDB:
> .text:0000000000400FDB xor ecx, ecx
> .text:0000000000400FDD xor edx, edx
> .text:0000000000400FDF nop
> .text:0000000000400FE0
> .text:0000000000400FE0 loc_400FE0:
> .text:0000000000400FE0 movzx eax, ds:data8[rdx]
> .text:0000000000400FE7 add rdx, 1
> .text:0000000000400FEB add eax, 0Ah
> .text:0000000000400FEE cmp rdx, 1F40h
> .text:0000000000400FF5 lea ecx, [rax+rcx]
> .text:0000000000400FF8 jnz short loc_400FE0
> .text:0000000000400FFA movsx eax, cl
> .text:0000000000400FFD add esi, 1
> .text:0000000000401000 add ebx, eax
> .text:0000000000401002 cmp esi, edi
> .text:0000000000401004 jnz short loc_400FDB
>
> g++ 4.6 (2.86s, 563M ops/s) :
>
> .text:0000000000400D80 loc_400D80:
> .text:0000000000400D80 mov edx, offset data8
> .text:0000000000400D85 xor eax, eax
> .text:0000000000400D87 db 66h, 66h
> .text:0000000000400D87 nop
> .text:0000000000400D8A db 66h, 66h
> .text:0000000000400D8A nop
> .text:0000000000400D8D db 66h, 66h
> .text:0000000000400D8D nop
> .text:0000000000400D90
> .text:0000000000400D90 loc_400D90:
> .text:0000000000400D90 add eax, 0Ah
> .text:0000000000400D93 add al, [rdx]
> .text:0000000000400D95 add rdx, 1
> .text:0000000000400D99 cmp rdx, 503480h
> .text:0000000000400DA0 jnz short loc_400D90
> .text:0000000000400DA2 movsx eax, al
> .text:0000000000400DA5 add ecx, 1
> .text:0000000000400DA8 add ebx, eax
> .text:0000000000400DAA cmp ecx, esi
> .text:0000000000400DAC jnz short loc_400D80
>
> Your observation still holds - there are two sequential instructions that
> operate on the same register. So, I manually patched the 4.6 binary's inner
> loop to the following:
>
> .text:0000000000400D90 add al, [rdx]
> .text:0000000000400D92 add rdx, 1
> .text:0000000000400D96 add eax, 0Ah
> .text:0000000000400D99 cmp rdx, 503480h
> .text:0000000000400DA0 jnz short loc_400D90
>
> and that made no significant difference in performance.
>
> Is this dependency really a performance issue? BTW, the outer loop executes
> 200,000 times...
>
> Thanks!
>
> Oleg.
>
> P.S. GDB disassembles the v4.6 emitted padding as:
>
> 0x0000000000400d87 <+231>: data32 xchg ax,ax
> 0x0000000000400d8a <+234>: data32 xchg ax,ax
> 0x0000000000400d8d <+237>: data32 xchg ax,ax
>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Performance degradation on g++ 4.6
2011-08-23 18:38 ` Xinliang David Li
@ 2011-08-24 19:51 ` Oleg Smolsky
2011-08-24 20:03 ` Xinliang David Li
0 siblings, 1 reply; 22+ messages in thread
From: Oleg Smolsky @ 2011-08-24 19:51 UTC (permalink / raw)
To: Xinliang David Li; +Cc: Andrew Pinski, gcc
On 2011/8/23 11:38, Xinliang David Li wrote:
> Partial register stall happens when there is a 32bit register read
> followed by a partial register write. In your case, the stall probably
> happens in the next iteration when 'add eax, 0Ah' executes, so your
> manual patch does not work. Try change
>
> add al, [dx] into two instructions (assuming esi is available here)
>
> movzx esi, ds:data8[dx]
> add eax, esi
>
I patched the code to use "movzx edi" but the result is a little clumsy
as the loop is based on the virtual address rather than index. Also, the
sequence is a bit bigger so I had to spill the patch into the preceding
padding:
.text:0000000000400D80 loc_400D80:
.text:0000000000400D80 mov edx, offset data8
.text:0000000000400D85 xor eax, eax
.text:0000000000400D87 nop
.text:0000000000400D88 nop
.text:0000000000400D89 nop
.text:0000000000400D8A nop
.text:0000000000400D8B nop
.text:0000000000400D8C
.text:0000000000400D8C loc_400D8C:
.text:0000000000400D8C movzx edi, byte ptr [rdx+0]
.text:0000000000400D90 add eax, edi
.text:0000000000400D92 add eax, 0Ah
.text:0000000000400D95 add rdx, 1
.text:0000000000400D99 cmp rdx, 503480h
.text:0000000000400DA0 jnz short loc_400D8C
.text:0000000000400DA2 movsx eax, al
.text:0000000000400DA5 add ecx, 1
.text:0000000000400DA8 add ebx, eax
.text:0000000000400DAA cmp ecx, esi
.text:0000000000400DAC jnz short loc_400D80
The performance improved from 2.84 sec (563.38 M ops/s) to 1.51 sec
(1059.60 M ops/s). It's close to the code emitted by g++4.1 now. Very funky!
So, this is one test out of the suite. Many of them degraded... Are you
guys interested in looking at other ones? Or is there something to be
fixed in the register allocation logic?
Oleg.
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Performance degradation on g++ 4.6
2011-08-24 19:51 ` Oleg Smolsky
@ 2011-08-24 20:03 ` Xinliang David Li
2011-08-24 21:26 ` Oleg Smolsky
0 siblings, 1 reply; 22+ messages in thread
From: Xinliang David Li @ 2011-08-24 20:03 UTC (permalink / raw)
To: Oleg Smolsky; +Cc: Andrew Pinski, gcc
On Wed, Aug 24, 2011 at 12:50 PM, Oleg Smolsky
<oleg.smolsky@riverbed.com> wrote:
> On 2011/8/23 11:38, Xinliang David Li wrote:
>>
>> Partial register stall happens when there is a 32bit register read
>> followed by a partial register write. In your case, the stall probably
>> happens in the next iteration when 'add eax, 0Ah' executes, so your
>> manual patch does not work. Try change
>>
>> add al, [dx] into two instructions (assuming esi is available here)
>>
>> movzx esi, ds:data8[dx]
>> add eax, esi
>>
> I patched the code to use "movzx edi" but the result is a little clumsy as
> the loop is based on the virtual address rather than index.
my bad -- I did copy & paste without making it precise.
> Also, the
> sequence is a bit bigger so I had to spill the patch into the preceding
> padding:
>
> .text:0000000000400D80 loc_400D80:
> .text:0000000000400D80 mov edx, offset data8
> .text:0000000000400D85 xor eax, eax
> .text:0000000000400D87 nop
> .text:0000000000400D88 nop
> .text:0000000000400D89 nop
> .text:0000000000400D8A nop
> .text:0000000000400D8B nop
> .text:0000000000400D8C
> .text:0000000000400D8C loc_400D8C:
> .text:0000000000400D8C movzx edi, byte ptr [rdx+0]
> .text:0000000000400D90 add eax, edi
> .text:0000000000400D92 add eax, 0Ah
> .text:0000000000400D95 add rdx, 1
> .text:0000000000400D99 cmp rdx, 503480h
> .text:0000000000400DA0 jnz short loc_400D8C
> .text:0000000000400DA2 movsx eax, al
> .text:0000000000400DA5 add ecx, 1
> .text:0000000000400DA8 add ebx, eax
> .text:0000000000400DAA cmp ecx, esi
> .text:0000000000400DAC jnz short loc_400D80
>
> The performance improved from 2.84 sec (563.38 M ops/s) to 1.51 sec (1059.60
> M ops/s). It's close to the code emitted by g++4.1 now. Very funky!
>
> So, this is one test out of the suite. Many of them degraded... Are you guys
> interested in looking at other ones? Or is there something to be fixed in
> the register allocation logic?
File bugs --- the isolated examples like this one would be very
helpful in the bug report.
Thanks,
David
>
> Oleg.
>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Performance degradation on g++ 4.6
2011-08-24 20:03 ` Xinliang David Li
@ 2011-08-24 21:26 ` Oleg Smolsky
2011-08-24 21:57 ` Xinliang David Li
0 siblings, 1 reply; 22+ messages in thread
From: Oleg Smolsky @ 2011-08-24 21:26 UTC (permalink / raw)
To: Xinliang David Li; +Cc: Andrew Pinski, gcc
On 2011/8/24 13:02, Xinliang David Li wrote:
>> On 2011/8/23 11:38, Xinliang David Li wrote:
>>> Partial register stall happens when there is a 32bit register read
>>> followed by a partial register write. In your case, the stall probably
>>> happens in the next iteration when 'add eax, 0Ah' executes, so your
>>> manual patch does not work. Try change
>>>
>>> add al, [dx] into two instructions (assuming esi is available here)
>>>
>>> movzx esi, ds:data8[dx]
>>> add eax, esi
>>>
>> I patched the code to use "movzx edi" but the result is a little clumsy as
>> the loop is based on the virtual address rather than index.
> my bad -- I did copy& paste without making it precise.
No worries. The fragment did fit into the padding :)
>> So, this is one test out of the suite. Many of them degraded... Are you guys
>> interested in looking at other ones? Or is there something to be fixed in
>> the register allocation logic?
> File bugs --- the isolated examples like this one would be very
> helpful in the bug report.
Done:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50182
Regards,
Oleg.
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Performance degradation on g++ 4.6
2011-08-24 21:26 ` Oleg Smolsky
@ 2011-08-24 21:57 ` Xinliang David Li
2011-08-24 22:14 ` Oleg Smolsky
0 siblings, 1 reply; 22+ messages in thread
From: Xinliang David Li @ 2011-08-24 21:57 UTC (permalink / raw)
To: Oleg Smolsky; +Cc: Andrew Pinski, gcc
Thanks.
Can you make the test case a standalone preprocessed file (using -E)?
David
On Wed, Aug 24, 2011 at 2:26 PM, Oleg Smolsky <oleg.smolsky@riverbed.com> wrote:
> On 2011/8/24 13:02, Xinliang David Li wrote:
>>>
>>> On 2011/8/23 11:38, Xinliang David Li wrote:
>>>>
>>>> Partial register stall happens when there is a 32bit register read
>>>> followed by a partial register write. In your case, the stall probably
>>>> happens in the next iteration when 'add eax, 0Ah' executes, so your
>>>> manual patch does not work. Try change
>>>>
>>>> add al, [dx] into two instructions (assuming esi is available here)
>>>>
>>>> movzx esi, ds:data8[dx]
>>>> add eax, esi
>>>>
>>> I patched the code to use "movzx edi" but the result is a little clumsy
>>> as
>>> the loop is based on the virtual address rather than index.
>>
>> my bad -- I did copy& paste without making it precise.
>
> No worries. The fragment did fit into the padding :)
>
>>> So, this is one test out of the suite. Many of them degraded... Are you
>>> guys
>>> interested in looking at other ones? Or is there something to be fixed in
>>> the register allocation logic?
>>
>> File bugs --- the isolated examples like this one would be very helpful in
>> the bug report.
>
> Done:
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50182
>
> Regards,
> Oleg.
>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Performance degradation on g++ 4.6
2011-08-24 21:57 ` Xinliang David Li
@ 2011-08-24 22:14 ` Oleg Smolsky
0 siblings, 0 replies; 22+ messages in thread
From: Oleg Smolsky @ 2011-08-24 22:14 UTC (permalink / raw)
To: Xinliang David Li; +Cc: Andrew Pinski, gcc
Sure. I've just attached it to the bug.
On 2011/8/24 14:56, Xinliang David Li wrote:
> Thanks.
>
> Can you make the test case a standalone preprocessed file (using -E)?
>
> David
>
> On Wed, Aug 24, 2011 at 2:26 PM, Oleg Smolsky<oleg.smolsky@riverbed.com> wrote:
>> On 2011/8/24 13:02, Xinliang David Li wrote:
>>>> On 2011/8/23 11:38, Xinliang David Li wrote:
>>>>> Partial register stall happens when there is a 32bit register read
>>>>> followed by a partial register write. In your case, the stall probably
>>>>> happens in the next iteration when 'add eax, 0Ah' executes, so your
>>>>> manual patch does not work. Try change
>>>>>
>>>>> add al, [dx] into two instructions (assuming esi is available here)
>>>>>
>>>>> movzx esi, ds:data8[dx]
>>>>> add eax, esi
>>>>>
>>>> I patched the code to use "movzx edi" but the result is a little clumsy
>>>> as
>>>> the loop is based on the virtual address rather than index.
>>> my bad -- I did copy& paste without making it precise.
>> No worries. The fragment did fit into the padding :)
>>
>>>> So, this is one test out of the suite. Many of them degraded... Are you
>>>> guys
>>>> interested in looking at other ones? Or is there something to be fixed in
>>>> the register allocation logic?
>>> File bugs --- the isolated examples like this one would be very helpful in
>>> the bug report.
>> Done:
>> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50182
>>
>> Regards,
>> Oleg.
>>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Performance degradation on g++ 4.6
2011-08-01 18:04 ` Oleg Smolsky
@ 2011-08-01 18:14 ` Marc Glisse
0 siblings, 0 replies; 22+ messages in thread
From: Marc Glisse @ 2011-08-01 18:14 UTC (permalink / raw)
To: Oleg Smolsky; +Cc: Benjamin Redelings I, gcc
On Mon, 1 Aug 2011, Oleg Smolsky wrote:
> BTW, some of these tweaks increase the binary size to 99K, yet there is no
> performance increase.
I don't see this in the thread: did you use -march=native?
--
Marc Glisse
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Performance degradation on g++ 4.6
2011-07-30 14:57 Benjamin Redelings I
@ 2011-08-01 18:04 ` Oleg Smolsky
2011-08-01 18:14 ` Marc Glisse
0 siblings, 1 reply; 22+ messages in thread
From: Oleg Smolsky @ 2011-08-01 18:04 UTC (permalink / raw)
To: Benjamin Redelings I; +Cc: gcc
Hi Benjamin,
On 2011/7/30 06:22, Benjamin Redelings I wrote:
> I had some performance degradation with 4.6 as well.
>
> However, I was able to cure it by using -finline-limit=800 or 1000 I
> think. However, this lead to a code size increase. Were the old
> higher-performance binaries larger?
Yes, the older binary for the degraded test was indeed larger: 107K vs 88K.
However, I have just re-built and re-run the test and there was no
significant difference in performance. IE the degradation in
"simple_types_constant_folding" test remains when building with
-finline-limit=800 (or =1000)
> IIRC, setting finline-limit=n actually sets two params to n/2, but I
> think you may only need to change 1 to get the old performance back.
> --param max-inline-insns-single defaults to 450, but --param
> max-inline-insns-auto defaults to 90. Perhaps you can get the old
> performance back by adjusting just one of these two parameters, or by
> setting them to different values, instead of the same value, as would
> be achieved by -finline-limit.
"--param max-inline-insns-auto=800" by itself does not help. The
"--param max-inline-insns-single=800 --param max-inline-insns-auto=1000"
combination makes no significant difference either.
BTW, some of these tweaks increase the binary size to 99K, yet there is
no performance increase.
Oleg.
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Performance degradation on g++ 4.6
@ 2011-07-30 14:57 Benjamin Redelings I
2011-08-01 18:04 ` Oleg Smolsky
0 siblings, 1 reply; 22+ messages in thread
From: Benjamin Redelings I @ 2011-07-30 14:57 UTC (permalink / raw)
To: Oleg Smolsky; +Cc: gcc
Hi Oleg,
I had some performance degradation with 4.6 as well.
However, I was able to cure it by using -finline-limit=800 or 1000 I
think. However, this lead to a code size increase. Were the old
higher-performance binaries larger?
IIRC, setting finline-limit=n actually sets two params to n/2, but I
think you may only need to change 1 to get the old performance back.
--param max-inline-insns-single defaults to 450, but --param
max-inline-insns-auto defaults to 90. Perhaps you can get the old
performance back by adjusting just one of these two parameters, or by
setting them to different values, instead of the same value, as would be
achieved by -finline-limit.
-BenRI
^ permalink raw reply [flat|nested] 22+ messages in thread
end of thread, other threads:[~2011-08-24 22:14 UTC | newest]
Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-07-29 18:08 Performance degradation on g++ 4.6 Oleg Smolsky
2011-07-29 18:14 ` Xinliang David Li
2011-07-29 21:08 ` Oleg Smolsky
2011-07-29 21:29 ` Xinliang David Li
2011-08-01 18:44 ` Oleg Smolsky
2011-08-02 5:48 ` Xinliang David Li
2011-08-23 1:09 ` Oleg Smolsky
2011-08-23 1:34 ` Oleg Smolsky
2011-08-23 1:37 ` Andrew Pinski
2011-08-23 17:47 ` Oleg Smolsky
2011-08-23 18:38 ` Xinliang David Li
2011-08-24 19:51 ` Oleg Smolsky
2011-08-24 20:03 ` Xinliang David Li
2011-08-24 21:26 ` Oleg Smolsky
2011-08-24 21:57 ` Xinliang David Li
2011-08-24 22:14 ` Oleg Smolsky
2011-08-02 9:27 ` Richard Guenther
2011-08-03 19:12 ` Xinliang David Li
2011-07-30 9:24 ` Richard Guenther
2011-07-30 14:57 Benjamin Redelings I
2011-08-01 18:04 ` Oleg Smolsky
2011-08-01 18:14 ` Marc Glisse
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).