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