You are viewing a plain text version of this content. The canonical link for it is here.
Posted to github@arrow.apache.org by GitBox <gi...@apache.org> on 2020/06/23 15:22:53 UTC
[GitHub] [arrow] wesm opened a new pull request #7525: ARROW-9214: [C++] Use separate functions for valid/not-valid values in VisitArrayDataInline
wesm opened a new pull request #7525:
URL: https://github.com/apache/arrow/pull/7525
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [arrow] wesm commented on pull request #7525: ARROW-9214: [C++] Use separate functions for valid/not-valid values in VisitArrayDataInline
Posted by GitBox <gi...@apache.org>.
wesm commented on pull request #7525:
URL: https://github.com/apache/arrow/pull/7525#issuecomment-648238512
Here are some vector-hash benchmarks comparing this branch with master. The performance "regressions" are for the 99%-100% null cases, I'll take a quick look at these in the implementation but these perf changes don't concern me
```
$ archery benchmark diff --cc=gcc-8 --cxx=g++-8 ARROW-9214 master --suite-filter=vector-hash
benchmark baseline contender change % counters
35 UniqueInt64/13 3.377 GiB/sec 14.983 GiB/sec 343.678 {'iterations': 76, 'null_percent': 100.0, 'num_unique': 100000.0}
23 UniqueInt64/6 3.401 GiB/sec 14.871 GiB/sec 337.243 {'iterations': 76, 'null_percent': 100.0, 'num_unique': 100.0}
42 UniqueInt64/5 2.642 GiB/sec 7.320 GiB/sec 177.036 {'iterations': 57, 'null_percent': 99.0, 'num_unique': 100.0}
27 UniqueInt64/12 2.268 GiB/sec 5.175 GiB/sec 128.206 {'iterations': 50, 'null_percent': 99.0, 'num_unique': 100000.0}
33 UniqueInt64/0 2.121 GiB/sec 4.793 GiB/sec 125.974 {'iterations': 48, 'null_percent': 0.0, 'num_unique': 100.0}
31 UniqueInt64/1 1.994 GiB/sec 4.212 GiB/sec 111.160 {'iterations': 44, 'null_percent': 0.1, 'num_unique': 100.0}
11 UniqueInt64/10 565.967 MiB/sec 1.054 GiB/sec 90.635 {'iterations': 12, 'null_percent': 10.0, 'num_unique': 100000.0}
44 UniqueInt64/2 1.810 GiB/sec 3.215 GiB/sec 77.589 {'iterations': 41, 'null_percent': 1.0, 'num_unique': 100.0}
34 UniqueInt64/9 679.320 MiB/sec 1.113 GiB/sec 67.808 {'iterations': 14, 'null_percent': 1.0, 'num_unique': 100000.0}
32 UniqueInt64/11 618.468 MiB/sec 959.261 MiB/sec 55.103 {'iterations': 12, 'null_percent': 50.0, 'num_unique': 100000.0}
3 UniqueInt64/8 785.346 MiB/sec 1.186 GiB/sec 54.663 {'iterations': 18, 'null_percent': 0.1, 'num_unique': 100000.0}
7 UniqueInt64/7 846.630 MiB/sec 1.241 GiB/sec 50.088 {'iterations': 18, 'null_percent': 0.0, 'num_unique': 100000.0}
8 UniqueInt64/3 1.510 GiB/sec 2.212 GiB/sec 46.508 {'iterations': 34, 'null_percent': 10.0, 'num_unique': 100.0}
28 UniqueInt64/4 1.066 GiB/sec 1.398 GiB/sec 31.131 {'iterations': 24, 'null_percent': 50.0, 'num_unique': 100.0}
24 BuildDictionary 1014.450 MiB/sec 1.282 GiB/sec 29.367 {'iterations': 177, 'null_percent': 11.111047470674487}
19 UniqueUInt8/1 1.322 GiB/sec 1.453 GiB/sec 9.968 {'iterations': 241, 'null_percent': 0.1, 'num_unique': 200.0}
12 UniqueUInt8/3 434.316 MiB/sec 443.925 MiB/sec 2.212 {'iterations': 76, 'null_percent': 10.0, 'num_unique': 200.0}
30 UniqueString100bytes/8 1.025 GiB/sec 1.043 GiB/sec 1.705 {'iterations': 2, 'null_percent': 0.1, 'num_unique': 100000.0}
22 UniqueUInt8/2 837.222 MiB/sec 848.342 MiB/sec 1.328 {'iterations': 145, 'null_percent': 1.0, 'num_unique': 200.0}
29 UniqueUInt8/6 1.759 GiB/sec 1.778 GiB/sec 1.065 {'iterations': 316, 'null_percent': 100.0, 'num_unique': 200.0}
47 UniqueString100bytes/1 4.643 GiB/sec 4.661 GiB/sec 0.373 {'iterations': 8, 'null_percent': 0.1, 'num_unique': 100.0}
25 UniqueString100bytes/2 4.654 GiB/sec 4.669 GiB/sec 0.326 {'iterations': 8, 'null_percent': 1.0, 'num_unique': 100.0}
6 UniqueString10bytes/8 311.452 MiB/sec 310.589 MiB/sec -0.277 {'iterations': 5, 'null_percent': 0.1, 'num_unique': 100000.0}
43 UniqueString10bytes/7 316.291 MiB/sec 315.246 MiB/sec -0.330 {'iterations': 5, 'null_percent': 0.0, 'num_unique': 100000.0}
37 UniqueString100bytes/11 1.883 GiB/sec 1.876 GiB/sec -0.402 {'iterations': 3, 'null_percent': 50.0, 'num_unique': 100000.0}
15 UniqueString100bytes/10 1.130 GiB/sec 1.125 GiB/sec -0.407 {'iterations': 2, 'null_percent': 10.0, 'num_unique': 100000.0}
48 UniqueString10bytes/10 333.843 MiB/sec 331.318 MiB/sec -0.756 {'iterations': 6, 'null_percent': 10.0, 'num_unique': 100000.0}
2 UniqueString10bytes/9 313.340 MiB/sec 310.886 MiB/sec -0.783 {'iterations': 5, 'null_percent': 1.0, 'num_unique': 100000.0}
17 UniqueUInt8/4 210.495 MiB/sec 208.540 MiB/sec -0.929 {'iterations': 37, 'null_percent': 50.0, 'num_unique': 200.0}
36 UniqueString100bytes/7 1.038 GiB/sec 1.029 GiB/sec -0.950 {'iterations': 2, 'null_percent': 0.0, 'num_unique': 100000.0}
20 UniqueString100bytes/0 4.733 GiB/sec 4.676 GiB/sec -1.217 {'iterations': 9, 'null_percent': 0.0, 'num_unique': 100.0}
9 UniqueString10bytes/1 864.482 MiB/sec 846.163 MiB/sec -2.119 {'iterations': 15, 'null_percent': 0.1, 'num_unique': 100.0}
40 UniqueString100bytes/9 1.053 GiB/sec 1.030 GiB/sec -2.164 {'iterations': 2, 'null_percent': 1.0, 'num_unique': 100000.0}
49 UniqueString10bytes/0 888.924 MiB/sec 867.735 MiB/sec -2.384 {'iterations': 15, 'null_percent': 0.0, 'num_unique': 100.0}
50 UniqueString10bytes/2 847.994 MiB/sec 814.093 MiB/sec -3.998 {'iterations': 15, 'null_percent': 1.0, 'num_unique': 100.0}
18 BuildStringDictionary 83.145 MiB/sec 79.804 MiB/sec -4.018 {'iterations': 193}
4 UniqueString100bytes/3 4.929 GiB/sec 4.705 GiB/sec -4.537 {'iterations': 9, 'null_percent': 10.0, 'num_unique': 100.0}
0 UniqueString100bytes/4 6.460 GiB/sec 6.033 GiB/sec -6.613 {'iterations': 11, 'null_percent': 50.0, 'num_unique': 100.0}
39 UniqueString10bytes/11 523.332 MiB/sec 485.400 MiB/sec -7.248 {'iterations': 9, 'null_percent': 50.0, 'num_unique': 100000.0}
46 UniqueUInt8/0 2.000 GiB/sec 1.839 GiB/sec -8.028 {'iterations': 357, 'null_percent': 0.0, 'num_unique': 200.0}
5 UniqueString10bytes/3 860.971 MiB/sec 780.666 MiB/sec -9.327 {'iterations': 15, 'null_percent': 10.0, 'num_unique': 100.0}
16 UniqueString10bytes/4 1001.379 MiB/sec 853.948 MiB/sec -14.723 {'iterations': 18, 'null_percent': 50.0, 'num_unique': 100.0}
45 UniqueUInt8/5 1.113 GiB/sec 951.864 MiB/sec -16.483 {'iterations': 198, 'null_percent': 99.0, 'num_unique': 200.0}
13 UniqueString100bytes/12 55.644 GiB/sec 26.845 GiB/sec -51.757 {'iterations': 90, 'null_percent': 99.0, 'num_unique': 100000.0}
21 UniqueString10bytes/12 6.835 GiB/sec 3.059 GiB/sec -55.249 {'iterations': 115, 'null_percent': 99.0, 'num_unique': 100000.0}
41 UniqueString100bytes/5 87.160 GiB/sec 33.534 GiB/sec -61.526 {'iterations': 158, 'null_percent': 99.0, 'num_unique': 100.0}
10 UniqueString10bytes/5 9.343 GiB/sec 3.447 GiB/sec -63.110 {'iterations': 167, 'null_percent': 99.0, 'num_unique': 100.0}
1 UniqueString10bytes/13 27.211 GiB/sec 4.708 GiB/sec -82.700 {'iterations': 492, 'null_percent': 100.0, 'num_unique': 100000.0}
26 UniqueString10bytes/6 27.206 GiB/sec 4.698 GiB/sec -82.731 {'iterations': 490, 'null_percent': 100.0, 'num_unique': 100.0}
38 UniqueString100bytes/6 272.658 GiB/sec 47.068 GiB/sec -82.737 {'iterations': 470, 'null_percent': 100.0, 'num_unique': 100.0}
14 UniqueString100bytes/13 272.585 GiB/sec 46.815 GiB/sec -82.826 {'iterations': 490, 'null_percent': 100.0, 'num_unique': 100000.0}
```
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [arrow] wesm commented on pull request #7525: ARROW-9214: [C++] Use separate functions for valid/not-valid values in VisitArrayDataInline
Posted by GitBox <gi...@apache.org>.
wesm commented on pull request #7525:
URL: https://github.com/apache/arrow/pull/7525#issuecomment-648410615
I looked at the Parquet read/write benchmarks, the differences look like mostly noise to me
```
benchmark baseline contender change % counters
40 BM_ReadColumn<true,BooleanType>/-1/1 754.859 MiB/sec 857.980 MiB/sec 13.661 {'iterations': 18}
17 BM_ReadColumn<true,DoubleType>/25/25 1.165 GiB/sec 1.228 GiB/sec 5.379 {'iterations': 7}
37 BM_ReadColumn<true,BooleanType>/5/10 461.996 MiB/sec 485.049 MiB/sec 4.990 {'iterations': 11}
8 BM_ReadColumn<true,Int32Type>/25/5 749.004 MiB/sec 785.493 MiB/sec 4.872 {'iterations': 8}
33 BM_ReadColumn<true,Int32Type>/-1/0 1.537 GiB/sec 1.609 GiB/sec 4.694 {'iterations': 18}
27 BM_ReadColumn<true,Int64Type>/-1/0 2.398 GiB/sec 2.492 GiB/sec 3.913 {'iterations': 17}
36 BM_ReadColumn<false,BooleanType>/1/20 396.502 MiB/sec 409.002 MiB/sec 3.153 {'iterations': 28}
28 BM_ReadMultipleRowGroups 4.873 GiB/sec 4.988 GiB/sec 2.357 {'iterations': 35}
44 BM_ReadIndividualRowGroups 4.907 GiB/sec 5.018 GiB/sec 2.259 {'iterations': 35}
0 BM_ReadColumn<false,BooleanType>/-1/0 1.003 GiB/sec 1.023 GiB/sec 2.039 {'iterations': 72}
12 BM_ReadColumn<true,Int32Type>/50/0 608.159 MiB/sec 618.035 MiB/sec 1.624 {'iterations': 7}
35 BM_ReadColumn<false,Int32Type>/-1/50 3.050 GiB/sec 3.089 GiB/sec 1.260 {'iterations': 51}
43 BM_ReadColumn<true,Int64Type>/10/5 1.448 GiB/sec 1.464 GiB/sec 1.062 {'iterations': 9}
2 BM_ReadColumn<true,Int32Type>/10/10 946.909 MiB/sec 954.967 MiB/sec 0.851 {'iterations': 9}
38 BM_ReadColumn<true,Int64Type>/99/50 2.082 GiB/sec 2.097 GiB/sec 0.731 {'iterations': 11}
1 BM_ReadColumn<false,Int64Type>/-1/1 9.340 GiB/sec 9.396 GiB/sec 0.607 {'iterations': 79}
15 BM_ReadColumn<false,Int32Type>/-1/1 5.533 GiB/sec 5.564 GiB/sec 0.559 {'iterations': 101}
32 BM_WriteColumn<true,BooleanType> 323.257 MiB/sec 324.536 MiB/sec 0.396 {'iterations': 7}
7 BM_WriteColumn<true,Int32Type> 575.266 MiB/sec 575.742 MiB/sec 0.083 {'iterations': 6}
16 BM_ReadColumn<false,Int32Type>/-1/10 1.608 GiB/sec 1.609 GiB/sec 0.074 {'iterations': 29}
13 BM_ReadColumn<true,Int32Type>/50/50 607.396 MiB/sec 607.840 MiB/sec 0.073 {'iterations': 6}
34 BM_ReadColumn<true,DoubleType>/-1/0 2.485 GiB/sec 2.486 GiB/sec 0.050 {'iterations': 13}
39 BM_ReadColumn<false,Int64Type>/-1/50 5.035 GiB/sec 5.033 GiB/sec -0.053 {'iterations': 47}
9 BM_ReadColumn<true,Int64Type>/50/50 960.235 MiB/sec 957.587 MiB/sec -0.276 {'iterations': 6}
21 BM_ReadColumn<true,Int64Type>/1/1 2.445 GiB/sec 2.437 GiB/sec -0.342 {'iterations': 17}
42 BM_ReadColumn<true,Int64Type>/35/10 1.083 GiB/sec 1.078 GiB/sec -0.508 {'iterations': 6}
45 BM_ReadColumn<true,DoubleType>/10/50 1.441 GiB/sec 1.432 GiB/sec -0.591 {'iterations': 10}
31 BM_ReadColumn<false,Int64Type>/-1/10 3.050 GiB/sec 3.031 GiB/sec -0.626 {'iterations': 26}
26 BM_ReadColumn<true,Int64Type>/99/0 2.080 GiB/sec 2.067 GiB/sec -0.630 {'iterations': 11}
29 BM_ReadColumn<true,Int32Type>/99/50 1.345 GiB/sec 1.333 GiB/sec -0.845 {'iterations': 13}
5 BM_ReadColumn<true,Int32Type>/99/0 1.369 GiB/sec 1.357 GiB/sec -0.875 {'iterations': 13}
14 BM_ReadColumn<true,Int64Type>/45/25 966.350 MiB/sec 957.826 MiB/sec -0.882 {'iterations': 6}
18 BM_WriteColumn<false,BooleanType> 318.849 MiB/sec 315.743 MiB/sec -0.974 {'iterations': 22}
3 BM_ReadColumn<false,DoubleType>/-1/20 4.140 GiB/sec 4.098 GiB/sec -1.013 {'iterations': 34}
25 BM_ReadColumn<true,Int32Type>/1/1 1.610 GiB/sec 1.593 GiB/sec -1.049 {'iterations': 19}
4 BM_ReadColumn<true,Int64Type>/50/1 961.641 MiB/sec 949.897 MiB/sec -1.221 {'iterations': 6}
10 BM_ReadColumn<true,Int64Type>/5/5 1.751 GiB/sec 1.729 GiB/sec -1.259 {'iterations': 10}
19 BM_WriteColumn<false,DoubleType> 1.087 GiB/sec 1.072 GiB/sec -1.355 {'iterations': 10}
24 BM_ReadColumn<true,Int64Type>/30/10 1.137 GiB/sec 1.120 GiB/sec -1.502 {'iterations': 7}
22 BM_WriteColumn<false,Int32Type> 769.037 MiB/sec 757.229 MiB/sec -1.536 {'iterations': 11}
41 BM_ReadColumn<true,Int64Type>/25/10 1.207 GiB/sec 1.187 GiB/sec -1.611 {'iterations': 9}
20 BM_WriteColumn<true,Int64Type> 995.675 MiB/sec 967.346 MiB/sec -2.845 {'iterations': 6}
11 BM_ReadColumn<true,Int64Type>/75/1 1.178 GiB/sec 1.143 GiB/sec -2.953 {'iterations': 8}
30 BM_WriteColumn<true,DoubleType> 967.789 MiB/sec 915.061 MiB/sec -5.448 {'iterations': 6}
6 BM_ReadColumn<false,DoubleType>/-1/0 14.679 GiB/sec 13.820 GiB/sec -5.851 {'iterations': 100}
23 BM_WriteColumn<false,Int64Type> 1.427 GiB/sec 1.296 GiB/sec -9.217 {'iterations': 13}
```
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [arrow] github-actions[bot] commented on pull request #7525: ARROW-9214: [C++] Use separate functions for valid/not-valid values in VisitArrayDataInline
Posted by GitBox <gi...@apache.org>.
github-actions[bot] commented on pull request #7525:
URL: https://github.com/apache/arrow/pull/7525#issuecomment-648240180
https://issues.apache.org/jira/browse/ARROW-9214
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [arrow] wesm closed pull request #7525: ARROW-9214: [C++] Use separate functions for valid/not-valid values in VisitArrayDataInline
Posted by GitBox <gi...@apache.org>.
wesm closed pull request #7525:
URL: https://github.com/apache/arrow/pull/7525
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [arrow] wesm commented on pull request #7525: ARROW-9214: [C++] Use separate functions for valid/not-valid values in VisitArrayDataInline
Posted by GitBox <gi...@apache.org>.
wesm commented on pull request #7525:
URL: https://github.com/apache/arrow/pull/7525#issuecomment-648410864
+1. We can work on performance smithing in follow up PRs
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [arrow] wesm commented on pull request #7525: ARROW-9214: [C++] Use separate functions for valid/not-valid values in VisitArrayDataInline
Posted by GitBox <gi...@apache.org>.
wesm commented on pull request #7525:
URL: https://github.com/apache/arrow/pull/7525#issuecomment-648235922
Here's what I see in the sort benchmarks with this patch compared with 7ed698b94, the patch right before the visitor_inline.h changes
```
benchmark baseline contender change % counters
14 SortToIndicesInt64Count/32768/10000/min_time:1.000 1.604 GiB/sec 1.888 GiB/sec 17.699 {'iterations': 72619, 'null_percent': 0.01}
3 SortToIndicesInt64Compare/32768/1/min_time:1.000 3.926 GiB/sec 4.186 GiB/sec 6.625 {'iterations': 187121, 'null_percent': 100.0}
8 SortToIndicesInt64Compare/1048576/1/min_time:1.000 5.012 GiB/sec 5.182 GiB/sec 3.399 {'iterations': 7178, 'null_percent': 100.0}
1 SortToIndicesInt64Count/8388608/1/min_time:1.000 4.460 GiB/sec 4.588 GiB/sec 2.886 {'iterations': 803, 'null_percent': 100.0}
9 SortToIndicesInt64Count/32768/1/min_time:1.000 3.937 GiB/sec 4.047 GiB/sec 2.809 {'iterations': 180351, 'null_percent': 100.0}
12 SortToIndicesInt64Count/1048576/1/min_time:1.000 4.953 GiB/sec 5.082 GiB/sec 2.617 {'iterations': 7119, 'null_percent': 100.0}
10 SortToIndicesInt64Compare/8388608/1/min_time:1.000 4.496 GiB/sec 4.610 GiB/sec 2.533 {'iterations': 808, 'null_percent': 100.0}
4 SortToIndicesInt64Compare/32768/0/min_time:1.000 141.060 MiB/sec 143.991 MiB/sec 2.078 {'iterations': 6473, 'null_percent': 0.0}
15 SortToIndicesInt64Compare/32768/2/min_time:1.000 231.389 MiB/sec 232.690 MiB/sec 0.562 {'iterations': 10364, 'null_percent': 50.0}
5 SortToIndicesInt64Compare/32768/10000/min_time:1.000 140.567 MiB/sec 140.746 MiB/sec 0.127 {'iterations': 6253, 'null_percent': 0.01}
13 SortToIndicesInt64Count/32768/2/min_time:1.000 765.674 MiB/sec 761.830 MiB/sec -0.502 {'iterations': 34058, 'null_percent': 50.0}
7 SortToIndicesInt64Compare/32768/100/min_time:1.000 141.645 MiB/sec 139.367 MiB/sec -1.609 {'iterations': 6318, 'null_percent': 1.0}
11 SortToIndicesInt64Compare/32768/10/min_time:1.000 150.378 MiB/sec 143.670 MiB/sec -4.461 {'iterations': 6717, 'null_percent': 10.0}
2 SortToIndicesInt64Count/32768/0/min_time:1.000 2.139 GiB/sec 2.042 GiB/sec -4.574 {'iterations': 96456, 'null_percent': 0.0}
6 SortToIndicesInt64Count/32768/100/min_time:1.000 1.571 GiB/sec 1.343 GiB/sec -14.525 {'iterations': 71534, 'null_percent': 1.0}
0 SortToIndicesInt64Count/32768/10/min_time:1.000 1.532 GiB/sec 1.098 GiB/sec -28.306 {'iterations': 69953, 'null_percent': 10.0}
```
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [arrow] wesm commented on pull request #7525: ARROW-9214: [C++] Use separate functions for valid/not-valid values in VisitArrayDataInline
Posted by GitBox <gi...@apache.org>.
wesm commented on pull request #7525:
URL: https://github.com/apache/arrow/pull/7525#issuecomment-648279829
Here's the sort benchmarks prior to the visitor_inline.h changes
gcc-8:
```
benchmark baseline contender change % counters
2 SortToIndicesInt64Count/32768/1/min_time:1.000 4.578 GiB/sec 5.269 GiB/sec 15.096 {'iterations': 209972, 'null_percent': 100.0}
0 SortToIndicesInt64Compare/32768/1/min_time:1.000 4.604 GiB/sec 5.282 GiB/sec 14.722 {'iterations': 212391, 'null_percent': 100.0}
3 SortToIndicesInt64Compare/1048576/1/min_time:1.000 4.596 GiB/sec 5.108 GiB/sec 11.149 {'iterations': 6619, 'null_percent': 100.0}
9 SortToIndicesInt64Count/1048576/1/min_time:1.000 4.612 GiB/sec 5.098 GiB/sec 10.548 {'iterations': 6632, 'null_percent': 100.0}
11 SortToIndicesInt64Count/8388608/1/min_time:1.000 4.331 GiB/sec 4.745 GiB/sec 9.561 {'iterations': 782, 'null_percent': 100.0}
4 SortToIndicesInt64Compare/8388608/1/min_time:1.000 4.336 GiB/sec 4.742 GiB/sec 9.357 {'iterations': 775, 'null_percent': 100.0}
7 SortToIndicesInt64Count/32768/10000/min_time:1.000 1.922 GiB/sec 2.101 GiB/sec 9.299 {'iterations': 87523, 'null_percent': 0.01}
10 SortToIndicesInt64Count/32768/2/min_time:1.000 836.548 MiB/sec 862.251 MiB/sec 3.073 {'iterations': 37646, 'null_percent': 50.0}
15 SortToIndicesInt64Compare/32768/2/min_time:1.000 244.171 MiB/sec 251.494 MiB/sec 2.999 {'iterations': 10912, 'null_percent': 50.0}
1 SortToIndicesInt64Compare/32768/10/min_time:1.000 157.085 MiB/sec 159.112 MiB/sec 1.290 {'iterations': 7038, 'null_percent': 10.0}
5 SortToIndicesInt64Compare/32768/0/min_time:1.000 151.208 MiB/sec 152.825 MiB/sec 1.069 {'iterations': 6831, 'null_percent': 0.0}
13 SortToIndicesInt64Compare/32768/10000/min_time:1.000 149.768 MiB/sec 150.096 MiB/sec 0.219 {'iterations': 6664, 'null_percent': 0.01}
12 SortToIndicesInt64Compare/32768/100/min_time:1.000 149.783 MiB/sec 149.835 MiB/sec 0.035 {'iterations': 6716, 'null_percent': 1.0}
6 SortToIndicesInt64Count/32768/0/min_time:1.000 2.440 GiB/sec 2.317 GiB/sec -5.020 {'iterations': 107181, 'null_percent': 0.0}
14 SortToIndicesInt64Count/32768/100/min_time:1.000 1.866 GiB/sec 1.607 GiB/sec -13.895 {'iterations': 86112, 'null_percent': 1.0}
8 SortToIndicesInt64Count/32768/10/min_time:1.000 1.795 GiB/sec 1.337 GiB/sec -25.485 {'iterations': 81140, 'null_percent': 10.0}
```
clang-8
```
benchmark baseline contender change % counters
8 SortToIndicesInt64Count/32768/10000/min_time:1.000 1.582 GiB/sec 2.017 GiB/sec 27.429 {'iterations': 71240, 'null_percent': 0.01}
4 SortToIndicesInt64Compare/32768/10000/min_time:1.000 150.179 MiB/sec 151.637 MiB/sec 0.971 {'iterations': 6727, 'null_percent': 0.01}
1 SortToIndicesInt64Compare/32768/100/min_time:1.000 150.667 MiB/sec 151.708 MiB/sec 0.691 {'iterations': 6799, 'null_percent': 1.0}
15 SortToIndicesInt64Compare/32768/0/min_time:1.000 154.512 MiB/sec 155.255 MiB/sec 0.481 {'iterations': 6960, 'null_percent': 0.0}
14 SortToIndicesInt64Compare/8388608/1/min_time:1.000 4.288 GiB/sec 4.298 GiB/sec 0.216 {'iterations': 721, 'null_percent': 100.0}
3 SortToIndicesInt64Compare/32768/1/min_time:1.000 4.759 GiB/sec 4.765 GiB/sec 0.135 {'iterations': 219030, 'null_percent': 100.0}
5 SortToIndicesInt64Count/1048576/1/min_time:1.000 4.586 GiB/sec 4.589 GiB/sec 0.064 {'iterations': 6584, 'null_percent': 100.0}
6 SortToIndicesInt64Compare/1048576/1/min_time:1.000 4.581 GiB/sec 4.581 GiB/sec -0.004 {'iterations': 6543, 'null_percent': 100.0}
11 SortToIndicesInt64Count/8388608/1/min_time:1.000 4.296 GiB/sec 4.295 GiB/sec -0.014 {'iterations': 772, 'null_percent': 100.0}
7 SortToIndicesInt64Compare/32768/2/min_time:1.000 255.324 MiB/sec 253.514 MiB/sec -0.709 {'iterations': 11541, 'null_percent': 50.0}
2 SortToIndicesInt64Compare/32768/10/min_time:1.000 162.353 MiB/sec 161.194 MiB/sec -0.714 {'iterations': 7318, 'null_percent': 10.0}
9 SortToIndicesInt64Count/32768/1/min_time:1.000 4.772 GiB/sec 4.737 GiB/sec -0.720 {'iterations': 216649, 'null_percent': 100.0}
0 SortToIndicesInt64Count/32768/0/min_time:1.000 2.156 GiB/sec 2.091 GiB/sec -3.013 {'iterations': 98848, 'null_percent': 0.0}
12 SortToIndicesInt64Count/32768/100/min_time:1.000 1.549 GiB/sec 1.463 GiB/sec -5.500 {'iterations': 71249, 'null_percent': 1.0}
13 SortToIndicesInt64Count/32768/2/min_time:1.000 688.856 MiB/sec 618.472 MiB/sec -10.218 {'iterations': 30030, 'null_percent': 50.0}
10 SortToIndicesInt64Count/32768/10/min_time:1.000 1.339 GiB/sec 1.110 GiB/sec -17.101 {'iterations': 61191, 'null_percent': 10.0}
```
I suspect the counting sort implementation can be further improved
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [arrow] wesm edited a comment on pull request #7525: ARROW-9214: [C++] Use separate functions for valid/not-valid values in VisitArrayDataInline
Posted by GitBox <gi...@apache.org>.
wesm edited a comment on pull request #7525:
URL: https://github.com/apache/arrow/pull/7525#issuecomment-648279829
Here's the sort benchmarks prior to the initial visitor_inline.h changes
gcc-8:
```
benchmark baseline contender change % counters
2 SortToIndicesInt64Count/32768/1/min_time:1.000 4.578 GiB/sec 5.269 GiB/sec 15.096 {'iterations': 209972, 'null_percent': 100.0}
0 SortToIndicesInt64Compare/32768/1/min_time:1.000 4.604 GiB/sec 5.282 GiB/sec 14.722 {'iterations': 212391, 'null_percent': 100.0}
3 SortToIndicesInt64Compare/1048576/1/min_time:1.000 4.596 GiB/sec 5.108 GiB/sec 11.149 {'iterations': 6619, 'null_percent': 100.0}
9 SortToIndicesInt64Count/1048576/1/min_time:1.000 4.612 GiB/sec 5.098 GiB/sec 10.548 {'iterations': 6632, 'null_percent': 100.0}
11 SortToIndicesInt64Count/8388608/1/min_time:1.000 4.331 GiB/sec 4.745 GiB/sec 9.561 {'iterations': 782, 'null_percent': 100.0}
4 SortToIndicesInt64Compare/8388608/1/min_time:1.000 4.336 GiB/sec 4.742 GiB/sec 9.357 {'iterations': 775, 'null_percent': 100.0}
7 SortToIndicesInt64Count/32768/10000/min_time:1.000 1.922 GiB/sec 2.101 GiB/sec 9.299 {'iterations': 87523, 'null_percent': 0.01}
10 SortToIndicesInt64Count/32768/2/min_time:1.000 836.548 MiB/sec 862.251 MiB/sec 3.073 {'iterations': 37646, 'null_percent': 50.0}
15 SortToIndicesInt64Compare/32768/2/min_time:1.000 244.171 MiB/sec 251.494 MiB/sec 2.999 {'iterations': 10912, 'null_percent': 50.0}
1 SortToIndicesInt64Compare/32768/10/min_time:1.000 157.085 MiB/sec 159.112 MiB/sec 1.290 {'iterations': 7038, 'null_percent': 10.0}
5 SortToIndicesInt64Compare/32768/0/min_time:1.000 151.208 MiB/sec 152.825 MiB/sec 1.069 {'iterations': 6831, 'null_percent': 0.0}
13 SortToIndicesInt64Compare/32768/10000/min_time:1.000 149.768 MiB/sec 150.096 MiB/sec 0.219 {'iterations': 6664, 'null_percent': 0.01}
12 SortToIndicesInt64Compare/32768/100/min_time:1.000 149.783 MiB/sec 149.835 MiB/sec 0.035 {'iterations': 6716, 'null_percent': 1.0}
6 SortToIndicesInt64Count/32768/0/min_time:1.000 2.440 GiB/sec 2.317 GiB/sec -5.020 {'iterations': 107181, 'null_percent': 0.0}
14 SortToIndicesInt64Count/32768/100/min_time:1.000 1.866 GiB/sec 1.607 GiB/sec -13.895 {'iterations': 86112, 'null_percent': 1.0}
8 SortToIndicesInt64Count/32768/10/min_time:1.000 1.795 GiB/sec 1.337 GiB/sec -25.485 {'iterations': 81140, 'null_percent': 10.0}
```
clang-8
```
benchmark baseline contender change % counters
8 SortToIndicesInt64Count/32768/10000/min_time:1.000 1.582 GiB/sec 2.017 GiB/sec 27.429 {'iterations': 71240, 'null_percent': 0.01}
4 SortToIndicesInt64Compare/32768/10000/min_time:1.000 150.179 MiB/sec 151.637 MiB/sec 0.971 {'iterations': 6727, 'null_percent': 0.01}
1 SortToIndicesInt64Compare/32768/100/min_time:1.000 150.667 MiB/sec 151.708 MiB/sec 0.691 {'iterations': 6799, 'null_percent': 1.0}
15 SortToIndicesInt64Compare/32768/0/min_time:1.000 154.512 MiB/sec 155.255 MiB/sec 0.481 {'iterations': 6960, 'null_percent': 0.0}
14 SortToIndicesInt64Compare/8388608/1/min_time:1.000 4.288 GiB/sec 4.298 GiB/sec 0.216 {'iterations': 721, 'null_percent': 100.0}
3 SortToIndicesInt64Compare/32768/1/min_time:1.000 4.759 GiB/sec 4.765 GiB/sec 0.135 {'iterations': 219030, 'null_percent': 100.0}
5 SortToIndicesInt64Count/1048576/1/min_time:1.000 4.586 GiB/sec 4.589 GiB/sec 0.064 {'iterations': 6584, 'null_percent': 100.0}
6 SortToIndicesInt64Compare/1048576/1/min_time:1.000 4.581 GiB/sec 4.581 GiB/sec -0.004 {'iterations': 6543, 'null_percent': 100.0}
11 SortToIndicesInt64Count/8388608/1/min_time:1.000 4.296 GiB/sec 4.295 GiB/sec -0.014 {'iterations': 772, 'null_percent': 100.0}
7 SortToIndicesInt64Compare/32768/2/min_time:1.000 255.324 MiB/sec 253.514 MiB/sec -0.709 {'iterations': 11541, 'null_percent': 50.0}
2 SortToIndicesInt64Compare/32768/10/min_time:1.000 162.353 MiB/sec 161.194 MiB/sec -0.714 {'iterations': 7318, 'null_percent': 10.0}
9 SortToIndicesInt64Count/32768/1/min_time:1.000 4.772 GiB/sec 4.737 GiB/sec -0.720 {'iterations': 216649, 'null_percent': 100.0}
0 SortToIndicesInt64Count/32768/0/min_time:1.000 2.156 GiB/sec 2.091 GiB/sec -3.013 {'iterations': 98848, 'null_percent': 0.0}
12 SortToIndicesInt64Count/32768/100/min_time:1.000 1.549 GiB/sec 1.463 GiB/sec -5.500 {'iterations': 71249, 'null_percent': 1.0}
13 SortToIndicesInt64Count/32768/2/min_time:1.000 688.856 MiB/sec 618.472 MiB/sec -10.218 {'iterations': 30030, 'null_percent': 50.0}
10 SortToIndicesInt64Count/32768/10/min_time:1.000 1.339 GiB/sec 1.110 GiB/sec -17.101 {'iterations': 61191, 'null_percent': 10.0}
```
I suspect the counting sort implementation can be further improved
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [arrow] wesm commented on pull request #7525: ARROW-9214: [C++] Use separate functions for valid/not-valid values in VisitArrayDataInline
Posted by GitBox <gi...@apache.org>.
wesm commented on pull request #7525:
URL: https://github.com/apache/arrow/pull/7525#issuecomment-648270948
OK I'm done twiddling this, here is the latest comparison of the hash benchmarks versus master with gcc-8:
```
benchmark baseline contender change % counters
35 UniqueInt64/6 3.391 GiB/sec 21.874 GiB/sec 544.979 {'iterations': 77, 'null_percent': 100.0, 'num_unique': 100.0}
22 UniqueInt64/13 3.407 GiB/sec 21.807 GiB/sec 540.146 {'iterations': 77, 'null_percent': 100.0, 'num_unique': 100000.0}
33 UniqueInt64/5 2.588 GiB/sec 8.809 GiB/sec 240.359 {'iterations': 58, 'null_percent': 99.0, 'num_unique': 100.0}
27 UniqueInt64/12 2.282 GiB/sec 5.873 GiB/sec 157.319 {'iterations': 50, 'null_percent': 99.0, 'num_unique': 100000.0}
30 UniqueUInt8/6 1.763 GiB/sec 2.712 GiB/sec 53.829 {'iterations': 315, 'null_percent': 100.0, 'num_unique': 200.0}
44 BuildDictionary 978.092 MiB/sec 1.401 GiB/sec 46.647 {'iterations': 172, 'null_percent': 11.111047470674487}
8 UniqueInt64/11 613.864 MiB/sec 836.145 MiB/sec 36.210 {'iterations': 13, 'null_percent': 50.0, 'num_unique': 100000.0}
2 UniqueInt64/10 559.826 MiB/sec 743.501 MiB/sec 32.809 {'iterations': 11, 'null_percent': 10.0, 'num_unique': 100000.0}
21 UniqueUInt8/3 434.059 MiB/sec 553.941 MiB/sec 27.619 {'iterations': 76, 'null_percent': 10.0, 'num_unique': 200.0}
25 UniqueUInt8/4 211.533 MiB/sec 251.887 MiB/sec 19.077 {'iterations': 36, 'null_percent': 50.0, 'num_unique': 200.0}
13 UniqueUInt8/5 1.115 GiB/sec 1.290 GiB/sec 15.775 {'iterations': 199, 'null_percent': 99.0, 'num_unique': 200.0}
5 UniqueUInt8/2 855.076 MiB/sec 977.493 MiB/sec 14.316 {'iterations': 148, 'null_percent': 1.0, 'num_unique': 200.0}
7 UniqueInt64/4 1.072 GiB/sec 1.224 GiB/sec 14.136 {'iterations': 24, 'null_percent': 50.0, 'num_unique': 100.0}
43 UniqueInt64/9 697.824 MiB/sec 744.400 MiB/sec 6.674 {'iterations': 15, 'null_percent': 1.0, 'num_unique': 100000.0}
40 UniqueString10bytes/0 889.829 MiB/sec 924.593 MiB/sec 3.907 {'iterations': 15, 'null_percent': 0.0, 'num_unique': 100.0}
10 UniqueInt64/3 1.490 GiB/sec 1.549 GiB/sec 3.907 {'iterations': 34, 'null_percent': 10.0, 'num_unique': 100.0}
18 UniqueString10bytes/1 862.556 MiB/sec 890.677 MiB/sec 3.260 {'iterations': 15, 'null_percent': 0.1, 'num_unique': 100.0}
41 UniqueString100bytes/9 1.023 GiB/sec 1.051 GiB/sec 2.746 {'iterations': 2, 'null_percent': 1.0, 'num_unique': 100000.0}
38 UniqueString100bytes/11 1.941 GiB/sec 1.982 GiB/sec 2.152 {'iterations': 3, 'null_percent': 50.0, 'num_unique': 100000.0}
29 UniqueString100bytes/8 1.021 GiB/sec 1.037 GiB/sec 1.487 {'iterations': 2, 'null_percent': 0.1, 'num_unique': 100000.0}
34 UniqueString100bytes/10 1.109 GiB/sec 1.126 GiB/sec 1.484 {'iterations': 2, 'null_percent': 10.0, 'num_unique': 100000.0}
3 UniqueString100bytes/1 4.719 GiB/sec 4.775 GiB/sec 1.190 {'iterations': 8, 'null_percent': 0.1, 'num_unique': 100.0}
46 UniqueString10bytes/2 855.155 MiB/sec 862.082 MiB/sec 0.810 {'iterations': 15, 'null_percent': 1.0, 'num_unique': 100.0}
6 UniqueString100bytes/0 4.769 GiB/sec 4.799 GiB/sec 0.635 {'iterations': 9, 'null_percent': 0.0, 'num_unique': 100.0}
45 UniqueString100bytes/2 4.735 GiB/sec 4.759 GiB/sec 0.515 {'iterations': 8, 'null_percent': 1.0, 'num_unique': 100.0}
11 UniqueInt64/2 1.812 GiB/sec 1.812 GiB/sec -0.018 {'iterations': 41, 'null_percent': 1.0, 'num_unique': 100.0}
14 UniqueString10bytes/10 332.210 MiB/sec 331.356 MiB/sec -0.257 {'iterations': 6, 'null_percent': 10.0, 'num_unique': 100000.0}
48 UniqueInt64/0 2.123 GiB/sec 2.115 GiB/sec -0.357 {'iterations': 47, 'null_percent': 0.0, 'num_unique': 100.0}
15 UniqueString10bytes/9 311.568 MiB/sec 310.197 MiB/sec -0.440 {'iterations': 5, 'null_percent': 1.0, 'num_unique': 100000.0}
32 UniqueString10bytes/8 312.322 MiB/sec 310.270 MiB/sec -0.657 {'iterations': 5, 'null_percent': 0.1, 'num_unique': 100000.0}
47 UniqueInt64/1 1.987 GiB/sec 1.972 GiB/sec -0.750 {'iterations': 44, 'null_percent': 0.1, 'num_unique': 100.0}
42 UniqueString10bytes/7 315.974 MiB/sec 312.873 MiB/sec -0.981 {'iterations': 6, 'null_percent': 0.0, 'num_unique': 100000.0}
28 UniqueString100bytes/3 4.938 GiB/sec 4.869 GiB/sec -1.391 {'iterations': 9, 'null_percent': 10.0, 'num_unique': 100.0}
20 UniqueString100bytes/4 6.436 GiB/sec 6.315 GiB/sec -1.888 {'iterations': 12, 'null_percent': 50.0, 'num_unique': 100.0}
16 UniqueString10bytes/3 857.256 MiB/sec 833.623 MiB/sec -2.757 {'iterations': 15, 'null_percent': 10.0, 'num_unique': 100.0}
19 UniqueUInt8/1 1.536 GiB/sec 1.491 GiB/sec -2.979 {'iterations': 274, 'null_percent': 0.1, 'num_unique': 200.0}
17 UniqueString10bytes/11 519.556 MiB/sec 501.897 MiB/sec -3.399 {'iterations': 9, 'null_percent': 50.0, 'num_unique': 100000.0}
9 BuildStringDictionary 82.664 MiB/sec 78.620 MiB/sec -4.892 {'iterations': 192}
37 UniqueString10bytes/4 1002.825 MiB/sec 943.038 MiB/sec -5.962 {'iterations': 18, 'null_percent': 50.0, 'num_unique': 100.0}
31 UniqueInt64/8 819.931 MiB/sec 758.491 MiB/sec -7.493 {'iterations': 18, 'null_percent': 0.1, 'num_unique': 100000.0}
26 UniqueUInt8/0 2.043 GiB/sec 1.838 GiB/sec -10.027 {'iterations': 361, 'null_percent': 0.0, 'num_unique': 200.0}
0 UniqueInt64/7 861.692 MiB/sec 771.106 MiB/sec -10.513 {'iterations': 19, 'null_percent': 0.0, 'num_unique': 100000.0}
24 UniqueString100bytes/7 1.210 GiB/sec 1.042 GiB/sec -13.869 {'iterations': 2, 'null_percent': 0.0, 'num_unique': 100000.0}
1 UniqueString100bytes/12 53.895 GiB/sec 45.921 GiB/sec -14.796 {'iterations': 94, 'null_percent': 99.0, 'num_unique': 100000.0}
12 UniqueString10bytes/12 6.783 GiB/sec 5.344 GiB/sec -21.216 {'iterations': 116, 'null_percent': 99.0, 'num_unique': 100000.0}
4 UniqueString100bytes/5 88.160 GiB/sec 66.376 GiB/sec -24.709 {'iterations': 158, 'null_percent': 99.0, 'num_unique': 100.0}
50 UniqueString10bytes/5 9.337 GiB/sec 6.986 GiB/sec -25.171 {'iterations': 164, 'null_percent': 99.0, 'num_unique': 100.0}
23 UniqueString100bytes/13 271.062 GiB/sec 129.169 GiB/sec -52.347 {'iterations': 487, 'null_percent': 100.0, 'num_unique': 100000.0}
36 UniqueString10bytes/13 27.239 GiB/sec 12.890 GiB/sec -52.678 {'iterations': 489, 'null_percent': 100.0, 'num_unique': 100000.0}
49 UniqueString100bytes/6 272.431 GiB/sec 128.761 GiB/sec -52.736 {'iterations': 490, 'null_percent': 100.0, 'num_unique': 100.0}
39 UniqueString10bytes/6 27.250 GiB/sec 12.859 GiB/sec -52.811 {'iterations': 490, 'null_percent': 100.0, 'num_unique': 100.0}
```
The "regressions" at the bottom for the mostly-null case are basically meaningless whereas the perf improvements seem more relevant
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org