Hello Andrew Wong, Grant Henke,
I'd like you to do a code review. Please visit
http://gerrit.cloudera.org:8080/15634
to review the following change.
Change subject: columnar_serialization: use AVX2 for int32 and int64 copying
......................................................................
columnar_serialization: use AVX2 for int32 and int64 copying
This uses the AVX2 "gather" instructions to do the copying of selected
int32s and int64s. The following improvements were observed:
Int32:
Converting 10_int32_non_null to PB (method columnar) row select rate 1:
0.8829691 cycles/cell -> 0.8386091 cycles/cell
Converting 10_int32_non_null to PB (method columnar) row select rate 0.8:
1.86863074 cycles/cell -> 1.61456746 cycles/cell
Converting 10_int32_non_null to PB (method columnar) row select rate 0.5:
2.3829623 cycles/cell -> 2.05157198 cycles/cell
Converting 10_int32_non_null to PB (method columnar) row select rate 0.2:
4.15909214 cycles/cell -> 3.82449024 cycles/cell
Converting 10_int32_0pct_null to PB (method columnar) row select rate 1:
1.04652828 cycles/cell -> 1.01822806 cycles/cell
Converting 10_int32_0pct_null to PB (method columnar) row select rate 0.8:
2.10860372 cycles/cell -> 1.85333702 cycles/cell
Converting 10_int32_0pct_null to PB (method columnar) row select rate 0.5:
2.75141002 cycles/cell -> 2.39638206 cycles/cell
Converting 10_int32_0pct_null to PB (method columnar) row select rate 0.2:
4.6968821 cycles/cell -> 4.40193506 cycles/cell
Converting 10_int32_10pct_null to PB (method columnar) row select rate 1:
1.31809924 cycles/cell -> 1.31851512 cycles/cell
Converting 10_int32_10pct_null to PB (method columnar) row select rate 0.8:
2.36648378 cycles/cell -> 2.12030662 cycles/cell
Converting 10_int32_10pct_null to PB (method columnar) row select rate 0.5:
2.98480266 cycles/cell -> 2.7476185 cycles/cell
Converting 10_int32_10pct_null to PB (method columnar) row select rate 0.2:
5.0439634 cycles/cell -> 4.5842071 cycles/cell
Int64:
Converting 10_int64_non_null to PB (method columnar) row select rate 1:
1.32330358 cycles/cell -> 1.24855148 cycles/cell
Converting 10_int64_non_null to PB (method columnar) row select rate 0.8:
2.04848734 cycles/cell -> 2.12979712 cycles/cell
Converting 10_int64_non_null to PB (method columnar) row select rate 0.5:
2.50150968 cycles/cell -> 2.5724664 cycles/cell
Converting 10_int64_non_null to PB (method columnar) row select rate 0.2:
4.4513395 cycles/cell -> 4.35936382 cycles/cell
Converting 10_int64_0pct_null to PB (method columnar) row select rate 1:
1.5080423 cycles/cell -> 1.51448434 cycles/cell
Converting 10_int64_0pct_null to PB (method columnar) row select rate 0.8:
2.34286302 cycles/cell -> 2.26529584 cycles/cell
Converting 10_int64_0pct_null to PB (method columnar) row select rate 0.5:
2.99375316 cycles/cell -> 2.7263687 cycles/cell
Converting 10_int64_0pct_null to PB (method columnar) row select rate 0.2:
5.01722324 cycles/cell -> 4.71793008 cycles/cell
Converting 10_int64_10pct_null to PB (method columnar) row select rate 1:
1.7227708 cycles/cell -> 1.67661726 cycles/cell
Converting 10_int64_10pct_null to PB (method columnar) row select rate 0.8:
2.68160422 cycles/cell -> 2.50480846 cycles/cell
Converting 10_int64_10pct_null to PB (method columnar) row select rate 0.5:
3.29833934 cycles/cell -> 3.05940708 cycles/cell
Converting 10_int64_10pct_null to PB (method columnar) row select rate 0.2:
5.42127834 cycles/cell -> 4.99359244 cycles/cell
In the few places that the above indicates a regression, I looped that
same test case and found that the "after" was indeed either
indistinguishable or slightly faster. The test results just have a
little bit of noise.
Change-Id: I6c9a536b78a524e8178f5d4a0d2dea04deedbd78
---
M src/kudu/common/columnar_serialization.cc
1 file changed, 68 insertions(+), 0 deletions(-)
git pull ssh://gerrit.cloudera.org:29418/kudu refs/changes/34/15634/1
--
To view, visit http://gerrit.cloudera.org:8080/15634
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings
Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I6c9a536b78a524e8178f5d4a0d2dea04deedbd78
Gerrit-Change-Number: 15634
Gerrit-PatchSet: 1
Gerrit-Owner: Todd Lipcon <[email protected]>
Gerrit-Reviewer: Andrew Wong <[email protected]>
Gerrit-Reviewer: Grant Henke <[email protected]>