[ 
https://issues.apache.org/jira/browse/ARROW-10899?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17319494#comment-17319494
 ] 

Kirill Lykov edited comment on ARROW-10899 at 4/12/21, 3:04 PM:
----------------------------------------------------------------

Right, I agree that it is stable. 
>From performance prospective, the main difference with naive implementation of 
>Cormen's pseudo code:
1) Skip unnecessary iterations (if all the numbers have current bits (8 bits in 
Travis code) set to the same value). Gives ~36%
2) Instead of using offset array use array of pointers which takes into account 
these offsets. So instead of `out[offset[(value>>shift)&bitmask]]=123 `do 
`pOut[(value>>shift)&bitmask] = 123` where pOut is precomputed to be `&out[0] + 
offset[]`. Gives ~24%

He also uses `__builtin_prefetch` from gcc library, I'm not sure if it is 
portable. It might give 12% performance on some large datasets.

I will write to Travis directly. Probably, he will like to contribute a version 
of this sort and I will do plumbing


was (Author: klykov):
Right, I agree that it is stable. 
>From performance prospective, the main difference with naive implementation of 
>Cormen's pseudo code:
1) Skip unnecessary iterations (if all the numbers have current bits (8 bits in 
Travis code) set to the same value). Gives ~36%
2) Instead of using offset array use array of pointers which take into account 
these offsets. So instead of `out[offset[(value>>shift)&bitmask]]=123 `do 
`pOut[(value>>shift)&bitmask] = 123` where pOut is precomputed to be `&out[0] + 
offset[]`. Gives ~24%

He also uses `__builtin_prefetch` from gcc library, I'm not sure if it is 
portable. It might give 12% of performance on some large datasets.

I will write to Travis directly. Probably, he will like to contribute a version 
of this sort and I will do plumbing

> [C++] Investigate radix sort for integer arrays
> -----------------------------------------------
>
>                 Key: ARROW-10899
>                 URL: https://issues.apache.org/jira/browse/ARROW-10899
>             Project: Apache Arrow
>          Issue Type: Wish
>          Components: C++
>            Reporter: Antoine Pitrou
>            Priority: Major
>         Attachments: Screen Shot 2021-02-09 at 17.48.13.png, Screen Shot 
> 2021-02-10 at 10.58.23.png, all_random_wholeRange.png
>
>
> For integer arrays with a non-tiny range of values, we currently use a stable 
> sort. It may be faster to use a radix sort instead.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to