mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-07 22:38:41 +00:00
eliminate 'lane groups', since we can go wide on the sorts now
This commit is contained in:
@@ -10,59 +10,10 @@ rdim2_bake(Arena *arena, RDIM_BakeParams *params)
|
|||||||
if(lane_idx() == 0)
|
if(lane_idx() == 0)
|
||||||
{
|
{
|
||||||
rdim2_shared = push_array(arena, RDIM2_Shared, 1);
|
rdim2_shared = push_array(arena, RDIM2_Shared, 1);
|
||||||
rdim2_shared->group_split = (lane_count() >= 2);
|
|
||||||
if(rdim2_shared->group_split)
|
|
||||||
{
|
|
||||||
rdim2_shared->group_0_lane_count = Clamp(1, lane_count()/2, 2);
|
|
||||||
rdim2_shared->group_0_barrier = barrier_alloc(rdim2_shared->group_0_lane_count);
|
|
||||||
rdim2_shared->group_1_barrier = barrier_alloc(lane_count() - rdim2_shared->group_0_lane_count);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
lane_sync();
|
lane_sync();
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////
|
|
||||||
//- rjf: with sufficient threads, split lanes into two groups:
|
|
||||||
//
|
|
||||||
// - group 0: one small group for many heterogeneous 'background' baking tasks
|
|
||||||
// - group 1: one large group for wide work we can reliably distribute
|
|
||||||
//
|
|
||||||
B32 group_0 = 1;
|
|
||||||
B32 group_1 = 1;
|
|
||||||
#if 0
|
#if 0
|
||||||
LaneCtx lane_ctx_restore = {0};
|
|
||||||
if(rdim2_shared->group_split)
|
|
||||||
{
|
|
||||||
if(lane_idx() < rdim2_shared->group_0_lane_count)
|
|
||||||
{
|
|
||||||
LaneCtx group_0_lane_ctx =
|
|
||||||
{
|
|
||||||
lane_idx(),
|
|
||||||
rdim2_shared->group_0_lane_count,
|
|
||||||
rdim2_shared->group_0_barrier
|
|
||||||
};
|
|
||||||
lane_ctx_restore = lane_ctx(group_0_lane_ctx);
|
|
||||||
group_0 = 1;
|
|
||||||
group_1 = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LaneCtx group_1_lane_ctx =
|
|
||||||
{
|
|
||||||
lane_idx() - rdim2_shared->group_0_lane_count,
|
|
||||||
lane_count() - rdim2_shared->group_0_lane_count,
|
|
||||||
rdim2_shared->group_1_barrier
|
|
||||||
};
|
|
||||||
lane_ctx_restore = lane_ctx(group_1_lane_ctx);
|
|
||||||
group_0 = 0;
|
|
||||||
group_1 = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////
|
|
||||||
//- rjf: group 0
|
|
||||||
//
|
|
||||||
if(group_0)
|
|
||||||
{
|
{
|
||||||
ProfScope("bake all vmaps")
|
ProfScope("bake all vmaps")
|
||||||
{
|
{
|
||||||
@@ -81,12 +32,8 @@ rdim2_bake(Arena *arena, RDIM_BakeParams *params)
|
|||||||
}
|
}
|
||||||
lane_sync();
|
lane_sync();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////
|
|
||||||
//- rjf: group 1
|
|
||||||
//
|
|
||||||
if(group_1)
|
|
||||||
{
|
|
||||||
//////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////
|
||||||
//- rjf: bake scope vmap
|
//- rjf: bake scope vmap
|
||||||
//
|
//
|
||||||
@@ -188,25 +135,7 @@ rdim2_bake(Arena *arena, RDIM_BakeParams *params)
|
|||||||
}
|
}
|
||||||
last_off = rdim2_shared->lane_digit_offsets[lane_count()-1][value_idx] + rdim2_shared->lane_digit_counts[lane_count()-1][value_idx];
|
last_off = rdim2_shared->lane_digit_offsets[lane_count()-1][value_idx] + rdim2_shared->lane_digit_counts[lane_count()-1][value_idx];
|
||||||
}
|
}
|
||||||
AssertAlways(last_off == element_count);
|
// NOTE(rjf): required that: (last_off == element_count)
|
||||||
#if 0
|
|
||||||
for EachIndex(value_idx, num_possible_values_per_digit)
|
|
||||||
{
|
|
||||||
for EachIndex(lane_idx, lane_count())
|
|
||||||
{
|
|
||||||
U64 prev = 0;
|
|
||||||
if(lane_idx > 0)
|
|
||||||
{
|
|
||||||
prev = rdim2_shared->lane_digit_offsets[lane_idx-1][value_idx] + rdim2_shared->lane_digit_counts[lane_idx-1][value_idx];
|
|
||||||
}
|
|
||||||
else if(value_idx > 0)
|
|
||||||
{
|
|
||||||
prev = rdim2_shared->lane_digit_offsets[lane_count()-1][value_idx-1] + rdim2_shared->lane_digit_counts[lane_count()-1][value_idx-1];
|
|
||||||
}
|
|
||||||
AssertAlways(rdim2_shared->lane_digit_offsets[lane_idx][value_idx] == prev);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
lane_sync();
|
lane_sync();
|
||||||
|
|
||||||
@@ -1465,26 +1394,6 @@ rdim2_bake(Arena *arena, RDIM_BakeParams *params)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
lane_sync();
|
lane_sync();
|
||||||
}
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////
|
|
||||||
//- rjf: on group split -> pop sub-lane-ctx, release barriers, join all lanes
|
|
||||||
//
|
|
||||||
if(rdim2_shared->group_split)
|
|
||||||
{
|
|
||||||
if(group_0 && lane_idx() == 0)
|
|
||||||
{
|
|
||||||
barrier_release(rdim2_shared->group_0_barrier);
|
|
||||||
}
|
|
||||||
if(group_1 && lane_idx() == 0)
|
|
||||||
{
|
|
||||||
barrier_release(rdim2_shared->group_1_barrier);
|
|
||||||
}
|
|
||||||
#if 0
|
|
||||||
lane_ctx(lane_ctx_restore);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
lane_sync();
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////
|
||||||
//- rjf: package results
|
//- rjf: package results
|
||||||
|
|||||||
@@ -21,11 +21,6 @@ struct RDIM_UnsortedJoinedLineTable
|
|||||||
typedef struct RDIM2_Shared RDIM2_Shared;
|
typedef struct RDIM2_Shared RDIM2_Shared;
|
||||||
struct RDIM2_Shared
|
struct RDIM2_Shared
|
||||||
{
|
{
|
||||||
B32 group_split;
|
|
||||||
U64 group_0_lane_count;
|
|
||||||
Barrier group_0_barrier;
|
|
||||||
Barrier group_1_barrier;
|
|
||||||
|
|
||||||
RDI_U64 scope_vmap_count;
|
RDI_U64 scope_vmap_count;
|
||||||
RDIM_SortKey *scope_vmap_keys;
|
RDIM_SortKey *scope_vmap_keys;
|
||||||
RDIM_SortKey *scope_vmap_keys__swap;
|
RDIM_SortKey *scope_vmap_keys__swap;
|
||||||
|
|||||||
Reference in New Issue
Block a user