Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

use ArrayOfArrays for return value to reduce the number of allocated arrays #167

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

KristofferC
Copy link
Owner

A long standing gripe for me has been that indices and distances are returned as standard nested Arrays. Typically, each inner array hold quite a small number of neighbors so it means that we allocate a large number of small arrays.

Using ArrayOfArrays, these are stored contigously in one large flat array instead.

The difference in allocations can be readily seen:

julia> input = rand(3, 10^6);

julia> tree = KDTree(rand(3, 10^6));

julia> @time knn(tree, input, 5);
  1.538003 seconds (2.00 M allocations: 221.253 MiB, 10.03% gc time)

julia> @time knn(tree, input, 5);
  1.489310 seconds (98 allocations: 189.884 MiB, 0.29% gc time)

@KristofferC KristofferC force-pushed the kc/aoa branch 2 times, most recently from 6d5edc2 to cb71f4c Compare June 13, 2024 11:35
@KristofferC
Copy link
Owner Author

@nanosoldier runtests()

@nanosoldier
Copy link

Update on PkgEvalJob 048c5a7 vs. bc645d1: Accepted

@nanosoldier
Copy link

Update on PkgEvalJob 048c5a7 vs. bc645d1: Running

@nanosoldier
Copy link

The package evaluation job you requested has completed - possible new issues were detected.
The full report is available.

@KristofferC KristofferC mentioned this pull request Jun 17, 2024
13 tasks
@KristofferC KristofferC force-pushed the kc/aoa branch 4 times, most recently from 552a8df to 1748083 Compare June 29, 2024 17:43
…arrays

A long standing gripe for me has been that indices and distances are
returned as standard nested `Array`s. Typically, each inner array hold
quite a small number of neighbors so  it means that we allocate a large
number of small arrays.

Using ArrayOfArrays, these are stored contigously in one large flat
array instead.

The difference in allocations can be readily seen:

```julia
julia> input = rand(3, 10^6);

julia> tree = KDTree(rand(3, 10^6));

julia> @time knn(tree, input, 5);
  1.538003 seconds (2.00 M allocations: 221.253 MiB, 10.03% gc time)

julia> @time knn(tree, input, 5);
  1.489310 seconds (98 allocations: 189.884 MiB, 0.29% gc time)
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants