eliminate 'lane groups', since we can go wide on the sorts now

This commit is contained in:
Ryan Fleury
2025-09-05 15:19:29 -07:00
parent 1d7cd4f4d2
commit cc0d707eb2
2 changed files with 1195 additions and 1291 deletions
+2 -93
View File
@@ -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
-5
View File
@@ -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;