Commit 104c7ec5 authored by Julien Jerphanion's avatar Julien Jerphanion

[WIP] KDTree implementation

C 0xb44460, 0xb44478, 0xb44490
Depth 10 on dim 0: [0, 12) med: 6 11813776 11813824 11813872    [1, 0, 4, 3, 2, 5, 6, 7, 8, 9, 10, 11]
             [0.000000, 1.000000, 2.000000, 3.000000, 4.000000, 5.000000, 6.000000, 7.000000, 8.000000, 9.000000, 10.000000, 11.000000]

C 0xb44478, 0xb44484, 0xb44490
Depth 9 on dim 1: [6, 12) med: 9 11813824 11813848 11813872     [1, 0, 4, 3, 2, 5, 11, 10, 9, 6, 7, 8]
             [0.000000, 1.000000, 2.000000, 3.000000, 4.000000, 5.000000, 6.000000, 7.000000, 8.000000, 9.000000, 10.000000, 11.000000]

C 0xb44460, 0xb4446c, 0xb44478
Depth 9 on dim 1: [0, 6) med: 3 11813776 11813800 11813824      [1, 0, 2, 3, 4, 5, 11, 10, 9, 6, 7, 8]
             [0.000000, 1.000000, 2.000000, 3.000000, 4.000000, 5.000000, 6.000000, 7.000000, 8.000000, 9.000000, 10.000000, 11.000000]

C 0xb44484, 0xb44488, 0xb44490
Depth 8 on dim 0: [3, 6) med: 4 11813800 11813808 11813824      [1, 0, 2, 3, 4, 5, 11, 10, 9, 6, 7, 8]
             [0.000000, 1.000000, 2.000000, 3.000000, 4.000000, 5.000000, 6.000000, 7.000000, 8.000000, 9.000000, 10.000000, 11.000000]

C 0xb4446c, 0xb44470, 0xb44478
Depth 8 on dim 0: [9, 12) med: 10 11813848 11813856 11813872    [1, 0, 2, 3, 4, 5, 11, 10, 9, 8, 6, 7]
             [0.000000, 1.000000, 2.000000, 3.000000, 4.000000, 5.000000, 6.000000, 7.000000, 8.000000, 9.000000, 10.000000, 11.000000]

C 0xb44460, 0xb44464, 0xb4446c
Depth 8 on dim 0: [0, 3) med: 1 11813776 11813784 11813800      [0, 1, 2, 3, 4, 5, 11, 10, 9, 8, 6, 7]
             [0.000000, 1.000000, 2.000000, 3.000000, 4.000000, 5.000000, 6.000000, 7.000000, 8.000000, 9.000000, 10.000000, 11.000000]

C 0xb44488, 0xb4448c, 0xb44490
Depth 7 on dim 1: [10, 12) med: 11 11813856 11813864 11813872   [0, 1, 2, 3, 4, 5, 11, 10, 9, 8, 7, 6]
             [0.000000, 1.000000, 2.000000, 3.000000, 4.000000, 5.000000, 6.000000, 7.000000, 8.000000, 9.000000, 10.000000, 11.000000]

C 0xb44470, 0xb44474, 0xb44478
Depth 7 on dim 1: [4, 6) med: 5 11813808 11813816 11813824      [0, 1, 2, 3, 4, 5, 11, 10, 9, 8, 7, 6]
             [0.000000, 1.000000, 2.000000, 3.000000, 4.000000, 5.000000, 6.000000, 7.000000, 8.000000, 9.000000, 10.000000, 11.000000]

C C 0xb44478, 0xb4447c, 0xb44484
Depth 8 on dim 0: [6, 9) med: 7 11813824 11813832 11813848      [0, 1, 2, 3, 4, 5, 9, 10, 11, 8, 7, 6]
             [0.000000, 1.000000, 2.000000, 3.000000, 4.000000, 5.000000, 6.000000, 7.000000, 8.000000, 9.000000, 10.000000, 11.000000]

0xb44464, 0xb44468, 0xb4446c
Depth 7 on dim 1: [1, 3) med: 2 11813784 11813792 11813800      [0, 1, 2, 3, 4, 5, 9, 10, 11, 8, 7, 6]
             [0.000000, 1.000000, 2.000000, 3.000000, 4.000000, 5.000000, 6.000000, 7.000000, 8.000000, 9.000000, 10.000000, 11.000000]

C 0xb4447c, 0xb44480, 0xb44484
Depth 7 on dim 1: [7, 9) med: 8 11813832 11813840 11813848      [0, 1, 2, 3, 4, 5, 9, 10, 11, 8, 7, 6]
             [0.000000, 1.000000, 2.000000, 3.000000, 4.000000, 5.000000, 6.000000, 7.000000, 8.000000, 9.000000, 10.000000, 11.000000]
parent ee1d67a4
......@@ -17,6 +17,8 @@ ctypedef double D_t
cdef lock Scheduler scheduler
DEF DEBUG True
cdef extern from *:
"""
#include <algorithm>
......@@ -88,35 +90,52 @@ cdef cypclass Node activable:
cdef I_t n_mid = nn // 2
cdef I_t split_index = (start + end) // 2
cdef D_t * rel_points = points + start
cdef I_t * rel_indices = indices + start
self.n_dims = n_dims
if (depth < 0) or (nn <= 1):
return
printf("Depth %d on dim %d: [%d, %d) med: %d\n\n", depth,
dim, start, end, split_index)
partition_node_indices(points + start,
indices + start, dim, n_mid, n_dims, nn)
partition_node_indices(rel_points,
rel_indices, dim, n_mid, n_dims, nn)
self.point = points + split_index
if DEBUG:
printf("Depth %d on dim %d: [%d, %d) med: %d %d %d %d\t[%d, %d, %d, "
"%d, %d, %d, %d, %d, %d, %d, %d, %d]\n "
"[%f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f]\n\n",
depth, dim, start, end, split_index,
rel_points, rel_points + n_mid, rel_points + nn,
indices[0], indices[1], indices[2],
indices[3], indices[4], indices[5],
indices[6], indices[7], indices[8],
indices[9], indices[10], indices[11],
points[n_dims * 0 + dim],
points[n_dims * 1 + dim],
points[n_dims * 2 + dim],
points[n_dims * 3 + dim],
points[n_dims * 4 + dim],
points[n_dims * 5 + dim],
points[n_dims * 6 + dim],
points[n_dims * 7 + dim],
points[n_dims * 8 + dim],
points[n_dims * 9 + dim],
points[n_dims * 10 + dim],
points[n_dims * 11 + dim],
)
self.left = activate(consume Node())
self.right = activate(consume Node())
self.left.build_node(NULL,
points, indices,
depth = depth - 1,
n_dims=n_dims,
dim=next_dim,
start=start, end=split_index)
self.right.build_node(NULL,
points, indices,
depth=depth - 1,
n_dims=n_dims,
dim=next_dim,
start=split_index, end=end)
self.left.build_node(NULL, points, indices,
depth - 1, n_dims, next_dim,
start, split_index)
self.right.build_node(NULL, points, indices,
depth - 1, n_dims, next_dim,
split_index, end)
cdef cypclass KDTree:
......@@ -163,8 +182,8 @@ cdef cypclass KDTree:
for i in range(n):
self.indices[i] = i
self.points[i * d] = (i / golden_ratio) % 1
self.points[i * d + 1] = i / n
self.points[i * d] = i # (i / golden_ratio) % 1
self.points[i * d + 1] = i # i / n
# TODO: end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment