Updated AccuracyHaswell (markdown) authored by Thomas Roehl's avatar Thomas Roehl
# Accuracy Tests for Intel Core Haswell processor
## Hardware description
CPU name: Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz<br>
CPU stepping: 3<br>
Sockets: 1<br>
Cores per socket: 4<br>
Threads per core: 2<br>
Total number of processing units: 8<br>
## Available groups
Each architecture defines a different set of performance groups. These groups help users to measure their derived metrics. Besides the event and counter defintion, a performance groups contains derived metrics that are calculated based on the measured data.<br>Here all the groups available for the Intel Core Haswell processor are listed:<br>
| Name | Description |
| ---- | ----------- |
| ICACHE | Instruction cache miss rate/ratio |
| CLOCK | Power and Energy consumption |
| TLB_DATA | L1 Data TLB miss rate/ratio |
| ENERGY | Power and Energy consumption |
| L3CACHE | L3 cache miss rate/ratio |
| L2 | L2 cache bandwidth in MBytes/s |
| L3 | L3 cache bandwidth in MBytes/s |
| BRANCH | Branch prediction miss rate/ratio |
| L2CACHE | L2 cache miss rate/ratio |
| TLB_INSTR | L1 Instruction TLB miss rate/ratio |
| DATA | Load to store ratio |
## Available verification tests
Not all groups can be tested for accuracy. We don't have a test application for each performance group. Here only the groups are listed that can be verified. Each group is followed by the low-level benchmarks that are performed for comparison.<br>
Not all performance groups can be tested for accuracy. We don't have a test application for each performance group. Here only the groups are listed that can be verified. Each group is followed by the low-level benchmarks that are performed for comparison.<br>
| Group | Tests |
|-------|-------|
| L2 | load, store, copy, stream, triad |
| L3 | load, store, copy, stream, triad |
| L2 | load, triad, copy, stream, store |
| L3 | load, triad, copy, stream, store |
## Accuracy comparison
For each varification group, the tests are performed twice. Once in a plain manner without measuring but calculating the resulting values and once through an instumented code with LIKWID.<br>
For each varification group, the tests are performed twice. Once in a plain manner without measuring but calculating and scaling the resulting values and once through an instumented code with LIKWID.<br>
### Verification of Group L2
#### Verification of Group L2 with Test load
| *Stream size* | *Iterations* |
|---------------|--------------|
| 12kB | 20000 |
| 1MB | 10000 |
| 4MB | 7500 |
| 1GB | 50 |
Benchmark performed with data sizes: 12kB, 1MB, 4MB, 1GB
Each data size is tested 5 times, hence the first 5 entries on the x-axis correspond to the 5 runs for the first data size of 12kB and so on.<br>
![haswell_L2_load](../images/accuracy/haswell/L2_load.jpg)
![haswell_L2_load](./images/haswell/L2_load.jpg)
| Variant | Plain (Min) | LIKWID (Min) | Plain (Max) | LIKWID (Max) | Plain (Avg) | LIKWID (Avg) |
| ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| 12kB | 120796 | 0 | 121618 | 1 | 121242 | 1 |
| 1MB | 56968 | 47088 | 57912 | 47407 | 57449 | 47299 |
| 4MB | 57096 | 46155 | 57888 | 47334 | 57500 | 46979 |
| 1GB | 20066 | 17678 | 20116 | 17846 | 20099 | 17797 |
The table contains the values after scaling the original values up using the scaling factor 1.00
| Variant | BENCH (Min) | LIKWID (Min) | BENCH (Max) | LIKWID (Max) | BENCH (Avg) | LIKWID (Avg) |
| ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| 12kB | 90953 | 0 | 93148 | 1 | 92380 | 1 |
| 1MB | 47114 | 47088 | 47356 | 47407 | 47217 | 47299 |
| 4MB | 46353 | 46155 | 47269 | 47334 | 46615 | 46979 |
| 1GB | 17549 | 17678 | 17975 | 17846 | 17741 | 17797 |
#### Verification of Group L2 with Test store
| *Stream size* | *Iterations* |
|---------------|--------------|
| 12kB | 20000 |
| 1MB | 10000 |
| 4MB | 7500 |
| 1GB | 50 |
#### Verification of Group L2 with Test triad
Benchmark performed with data sizes: 12kB, 1MB, 4MB, 1GB
Each data size is tested 5 times, hence the first 5 entries on the x-axis correspond to the 5 runs for the first data size of 12kB and so on.<br>
![haswell_L2_store](../images/accuracy/haswell/L2_store.jpg)
![haswell_L2_triad](./images/haswell/L2_triad.jpg)
The table contains the values after scaling the original values up using the scaling factor 1.25
| Variant | Plain (Min) | LIKWID (Min) | Plain (Max) | LIKWID (Max) | Plain (Avg) | LIKWID (Avg) |
| Variant | BENCH (Min) | LIKWID (Min) | BENCH (Max) | LIKWID (Max) | BENCH (Avg) | LIKWID (Avg) |
| ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| 12kB | 120796 | 0 | 121618 | 3 | 121242 | 1 |
| 1MB | 56968 | 57442 | 57912 | 57559 | 57449 | 57494 |
| 4MB | 57096 | 56722 | 57888 | 57493 | 57500 | 57180 |
| 1GB | 20066 | 19991 | 20116 | 20012 | 20099 | 20005 |
| 12kB | 144015 | 0 | 144853 | 2 | 144486 | 1 |
| 1MB | 54986 | 55094 | 55656 | 55792 | 55306 | 55428 |
| 4MB | 55073 | 55250 | 55667 | 55564 | 55428 | 55399 |
| 1GB | 18900 | 18993 | 19021 | 19015 | 18981 | 19002 |
#### Verification of Group L2 with Test copy
| *Stream size* | *Iterations* |
|---------------|--------------|
| 12kB | 20000 |
| 1MB | 10000 |
| 4MB | 7500 |
| 1GB | 50 |
Benchmark performed with data sizes: 12kB, 1MB, 4MB, 1GB
Each data size is tested 5 times, hence the first 5 entries on the x-axis correspond to the 5 runs for the first data size of 12kB and so on.<br>
![haswell_L2_copy](../images/accuracy/haswell/L2_copy.jpg)
![haswell_L2_copy](./images/haswell/L2_copy.jpg)
| Variant | Plain (Min) | LIKWID (Min) | Plain (Max) | LIKWID (Max) | Plain (Avg) | LIKWID (Avg) |
The table contains the values after scaling the original values up using the scaling factor 1.50
| Variant | BENCH (Min) | LIKWID (Min) | BENCH (Max) | LIKWID (Max) | BENCH (Avg) | LIKWID (Avg) |
| ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| 12kB | 120796 | 1 | 121618 | 11 | 121242 | 3 |
| 1MB | 56968 | 55806 | 57912 | 56024 | 57449 | 55922 |
| 4MB | 57096 | 55803 | 57888 | 56088 | 57500 | 55967 |
| 1GB | 20066 | 19623 | 20116 | 19672 | 20099 | 19653 |
| 12kB | 173632 | 1 | 174564 | 11 | 174250 | 3 |
| 1MB | 55578 | 55806 | 55972 | 56024 | 55773 | 55922 |
| 4MB | 55548 | 55803 | 56056 | 56088 | 55773 | 55967 |
| 1GB | 19635 | 19623 | 19689 | 19672 | 19651 | 19653 |
#### Verification of Group L2 with Test stream
| *Stream size* | *Iterations* |
|---------------|--------------|
| 12kB | 20000 |
| 1MB | 10000 |
| 4MB | 7500 |
| 1GB | 50 |
Benchmark performed with data sizes: 12kB, 1MB, 4MB, 1GB
Each data size is tested 5 times, hence the first 5 entries on the x-axis correspond to the 5 runs for the first data size of 12kB and so on.<br>
![haswell_L2_stream](../images/accuracy/haswell/L2_stream.jpg)
![haswell_L2_stream](./images/haswell/L2_stream.jpg)
| Variant | Plain (Min) | LIKWID (Min) | Plain (Max) | LIKWID (Max) | Plain (Avg) | LIKWID (Avg) |
| ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| 12kB | 120796 | 0 | 121618 | 2 | 121242 | 0 |
| 1MB | 56968 | 55581 | 57912 | 55901 | 57449 | 55750 |
| 4MB | 57096 | 54508 | 57888 | 55769 | 57500 | 55213 |
| 1GB | 20066 | 19356 | 20116 | 19406 | 20099 | 19369 |
The table contains the values after scaling the original values up using the scaling factor 1.33
| Variant | BENCH (Min) | LIKWID (Min) | BENCH (Max) | LIKWID (Max) | BENCH (Avg) | LIKWID (Avg) |
| ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| 12kB | 151528 | 0 | 152858 | 2 | 152338 | 0 |
| 1MB | 55310 | 55581 | 55757 | 55901 | 55629 | 55750 |
| 4MB | 54985 | 54508 | 55709 | 55769 | 55373 | 55213 |
| 1GB | 19379 | 19356 | 19450 | 19406 | 19415 | 19369 |
#### Verification of Group L2 with Test triad
| *Stream size* | *Iterations* |
|---------------|--------------|
| 12kB | 20000 |
| 1MB | 10000 |
| 4MB | 7500 |
| 1GB | 50 |
#### Verification of Group L2 with Test store
Benchmark performed with data sizes: 12kB, 1MB, 4MB, 1GB
Each data size is tested 5 times, hence the first 5 entries on the x-axis correspond to the 5 runs for the first data size of 12kB and so on.<br>
![haswell_L2_triad](../images/accuracy/haswell/L2_triad.jpg)
![haswell_L2_store](./images/haswell/L2_store.jpg)
The table contains the values after scaling the original values up using the scaling factor 2.00
| Variant | Plain (Min) | LIKWID (Min) | Plain (Max) | LIKWID (Max) | Plain (Avg) | LIKWID (Avg) |
| Variant | BENCH (Min) | LIKWID (Min) | BENCH (Max) | LIKWID (Max) | BENCH (Avg) | LIKWID (Avg) |
| ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| 12kB | 120796 | 0 | 121618 | 2 | 121242 | 1 |
| 1MB | 56968 | 55094 | 57912 | 55792 | 57449 | 55428 |
| 4MB | 57096 | 55250 | 57888 | 55564 | 57500 | 55399 |
| 1GB | 20066 | 18993 | 20116 | 19015 | 20099 | 19002 |
| 12kB | 120384 | 0 | 121444 | 3 | 120919 | 1 |
| 1MB | 57306 | 57442 | 58814 | 57559 | 57675 | 57494 |
| 4MB | 56906 | 56722 | 57512 | 57493 | 57216 | 57180 |
| 1GB | 20066 | 19991 | 20092 | 20012 | 20078 | 20005 |
### Verification of Group L3
#### Verification of Group L3 with Test load
| *Stream size* | *Iterations* |
|---------------|--------------|
| 12kB | 20000 |
| 1MB | 10000 |
| 4MB | 7500 |
| 1GB | 50 |
Benchmark performed with data sizes: 12kB, 1MB, 4MB, 1GB
Each data size is tested 5 times, hence the first 5 entries on the x-axis correspond to the 5 runs for the first data size of 12kB and so on.<br>
![haswell_L3_load](../images/accuracy/haswell/L3_load.jpg)
![haswell_L3_load](./images/haswell/L3_load.jpg)
| Variant | Plain (Min) | LIKWID (Min) | Plain (Max) | LIKWID (Max) | Plain (Avg) | LIKWID (Avg) |
| ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| 12kB | 120796 | 0 | 121618 | 0 | 121242 | 0 |
| 1MB | 56968 | 46445 | 57912 | 47495 | 57449 | 47157 |
| 4MB | 57096 | 46025 | 57888 | 47482 | 57500 | 47134 |
| 1GB | 20066 | 17552 | 20116 | 18005 | 20099 | 17844 |
The table contains the values after scaling the original values up using the scaling factor 1.00
| Variant | BENCH (Min) | LIKWID (Min) | BENCH (Max) | LIKWID (Max) | BENCH (Avg) | LIKWID (Avg) |
| ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| 12kB | 92685 | 0 | 93295 | 0 | 92970 | 0 |
| 1MB | 46741 | 46445 | 47345 | 47495 | 47116 | 47157 |
| 4MB | 45756 | 46025 | 47470 | 47482 | 46697 | 47134 |
| 1GB | 17711 | 17552 | 17988 | 18005 | 17841 | 17844 |
#### Verification of Group L3 with Test store
| *Stream size* | *Iterations* |
|---------------|--------------|
| 12kB | 20000 |
| 1MB | 10000 |
| 4MB | 2000 |
| 1GB | 50 |
#### Verification of Group L3 with Test triad
Benchmark performed with data sizes: 12kB, 1MB, 4MB, 1GB
Each data size is tested 5 times, hence the first 5 entries on the x-axis correspond to the 5 runs for the first data size of 12kB and so on.<br>
![haswell_L3_store](../images/accuracy/haswell/L3_store.jpg)
![haswell_L3_triad](./images/haswell/L3_triad.jpg)
The table contains the values after scaling the original values up using the scaling factor 1.33
| Variant | Plain (Min) | LIKWID (Min) | Plain (Max) | LIKWID (Max) | Plain (Avg) | LIKWID (Avg) |
| Variant | BENCH (Min) | LIKWID (Min) | BENCH (Max) | LIKWID (Max) | BENCH (Avg) | LIKWID (Avg) |
| ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| 12kB | 120796 | 0 | 121618 | 0 | 121242 | 0 |
| 1MB | 56968 | 52368 | 57912 | 52700 | 57449 | 52503 |
| 4MB | 57096 | 52324 | 57888 | 52533 | 57500 | 52450 |
| 1GB | 20066 | 16518 | 20116 | 16538 | 20099 | 16529 |
| 12kB | 153292 | 0 | 154651 | 0 | 153945 | 0 |
| 1MB | 58989 | 49671 | 59182 | 50875 | 59054 | 50215 |
| 4MB | 57881 | 50124 | 59330 | 50674 | 58949 | 50370 |
| 1GB | 20210 | 17389 | 20262 | 18086 | 20239 | 17802 |
#### Verification of Group L3 with Test copy
| *Stream size* | *Iterations* |
|---------------|--------------|
| 12kB | 20000 |
| 1MB | 10000 |
| 4MB | 2000 |
| 1GB | 50 |
Benchmark performed with data sizes: 12kB, 1MB, 4MB, 1GB
Each data size is tested 5 times, hence the first 5 entries on the x-axis correspond to the 5 runs for the first data size of 12kB and so on.<br>
![haswell_L3_copy](../images/accuracy/haswell/L3_copy.jpg)
![haswell_L3_copy](./images/haswell/L3_copy.jpg)
The table contains the values after scaling the original values up using the scaling factor 1.50
| Variant | Plain (Min) | LIKWID (Min) | Plain (Max) | LIKWID (Max) | Plain (Avg) | LIKWID (Avg) |
| Variant | BENCH (Min) | LIKWID (Min) | BENCH (Max) | LIKWID (Max) | BENCH (Avg) | LIKWID (Avg) |
| ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| 12kB | 120796 | 0 | 121618 | 0 | 121242 | 0 |
| 1MB | 56968 | 50966 | 57912 | 51472 | 57449 | 51268 |
| 4MB | 57096 | 51306 | 57888 | 51485 | 57500 | 51413 |
| 1GB | 20066 | 18395 | 20116 | 18687 | 20099 | 18597 |
| 12kB | 172335 | 0 | 174277 | 0 | 173493 | 0 |
| 1MB | 55464 | 50966 | 56095 | 51472 | 55859 | 51268 |
| 4MB | 55362 | 51306 | 56109 | 51485 | 55855 | 51413 |
| 1GB | 19728 | 18395 | 19795 | 18687 | 19770 | 18597 |
#### Verification of Group L3 with Test stream
| *Stream size* | *Iterations* |
|---------------|--------------|
| 12kB | 20000 |
| 1MB | 10000 |
| 4MB | 2000 |
| 1GB | 50 |
Benchmark performed with data sizes: 12kB, 1MB, 4MB, 1GB
Each data size is tested 5 times, hence the first 5 entries on the x-axis correspond to the 5 runs for the first data size of 12kB and so on.<br>
![haswell_L3_stream](../images/accuracy/haswell/L3_stream.jpg)
![haswell_L3_stream](./images/haswell/L3_stream.jpg)
| Variant | Plain (Min) | LIKWID (Min) | Plain (Max) | LIKWID (Max) | Plain (Avg) | LIKWID (Avg) |
The table contains the values after scaling the original values up using the scaling factor 1.33
| Variant | BENCH (Min) | LIKWID (Min) | BENCH (Max) | LIKWID (Max) | BENCH (Avg) | LIKWID (Avg) |
| ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| 12kB | 120796 | 0 | 121618 | 0 | 121242 | 0 |
| 1MB | 56968 | 50197 | 57912 | 50684 | 57449 | 50445 |
| 4MB | 57096 | 48484 | 57888 | 50993 | 57500 | 50093 |
| 1GB | 20066 | 17497 | 20116 | 18520 | 20099 | 18095 |
| 12kB | 152205 | 0 | 153621 | 0 | 153031 | 0 |
| 1MB | 55372 | 50197 | 55775 | 50684 | 55628 | 50445 |
| 4MB | 55396 | 48484 | 55795 | 50993 | 55641 | 50093 |
| 1GB | 19353 | 17497 | 19432 | 18520 | 19410 | 18095 |
#### Verification of Group L3 with Test triad
| *Stream size* | *Iterations* |
|---------------|--------------|
| 12kB | 20000 |
| 1MB | 10000 |
| 4MB | 2000 |
| 1GB | 50 |
#### Verification of Group L3 with Test store
Benchmark performed with data sizes: 12kB, 1MB, 4MB, 1GB
Each data size is tested 5 times, hence the first 5 entries on the x-axis correspond to the 5 runs for the first data size of 12kB and so on.<br>
![haswell_L3_triad](../images/accuracy/haswell/L3_triad.jpg)
![haswell_L3_store](./images/haswell/L3_store.jpg)
| Variant | Plain (Min) | LIKWID (Min) | Plain (Max) | LIKWID (Max) | Plain (Avg) | LIKWID (Avg) |
The table contains the values after scaling the original values up using the scaling factor 2.00
| Variant | BENCH (Min) | LIKWID (Min) | BENCH (Max) | LIKWID (Max) | BENCH (Avg) | LIKWID (Avg) |
| ------- | ------- | ------- | ------- | ------- | ------- | ------- |
| 12kB | 120796 | 0 | 121618 | 0 | 121242 | 0 |
| 1MB | 56968 | 49671 | 57912 | 50875 | 57449 | 50215 |
| 4MB | 57096 | 50124 | 57888 | 50674 | 57500 | 50370 |
| 1GB | 20066 | 17389 | 20116 | 18086 | 20099 | 17802 |
| 1MB | 56968 | 52368 | 57912 | 52700 | 57449 | 52503 |
| 4MB | 57096 | 52324 | 57888 | 52533 | 57500 | 52450 |
| 1GB | 20066 | 16518 | 20116 | 16538 | 20099 | 16529 |