mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-08 23:08:08 +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)
|
||||
{
|
||||
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();
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
//- 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
|
||||
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")
|
||||
{
|
||||
@@ -81,12 +32,8 @@ rdim2_bake(Arena *arena, RDIM_BakeParams *params)
|
||||
}
|
||||
lane_sync();
|
||||
}
|
||||
#endif
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
//- rjf: group 1
|
||||
//
|
||||
if(group_1)
|
||||
{
|
||||
//////////////////////////////////////////////////////////////
|
||||
//- 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];
|
||||
}
|
||||
AssertAlways(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
|
||||
// NOTE(rjf): required that: (last_off == element_count)
|
||||
}
|
||||
lane_sync();
|
||||
|
||||
@@ -1465,26 +1394,6 @@ rdim2_bake(Arena *arena, RDIM_BakeParams *params)
|
||||
}
|
||||
}
|
||||
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
|
||||
|
||||
@@ -21,11 +21,6 @@ struct RDIM_UnsortedJoinedLineTable
|
||||
typedef struct RDIM2_Shared 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;
|
||||
RDIM_SortKey *scope_vmap_keys;
|
||||
RDIM_SortKey *scope_vmap_keys__swap;
|
||||
|
||||
Reference in New Issue
Block a user