From c1984edadf0c80c176c18ed99595b64591a1899a Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Fri, 23 Feb 2024 11:13:12 -0800 Subject: [PATCH] dont over-eagerly join udt building tassk --- src/raddbgi_from_pdb/raddbgi_from_pdb.c | 47 +++++++++++++------------ 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/src/raddbgi_from_pdb/raddbgi_from_pdb.c b/src/raddbgi_from_pdb/raddbgi_from_pdb.c index e4c45f32..8b25b47b 100644 --- a/src/raddbgi_from_pdb/raddbgi_from_pdb.c +++ b/src/raddbgi_from_pdb/raddbgi_from_pdb.c @@ -3419,32 +3419,23 @@ p2r_convert(Arena *arena, P2R_User2Convert *in) } ////////////////////////////////////////////////////////////// - //- rjf: types pass 4: build UDTs + //- rjf: types pass 4: kick off UDT build // - RDIM_UDTChunkList all_udts = {0}; - ProfScope("types pass 4: build UDTs") + U64 udt_task_size_itypes = 4096; + U64 udt_tasks_count = ((U64)itype_opl+(udt_task_size_itypes-1))/udt_task_size_itypes; + P2R_UDTConvertIn *udt_tasks_inputs = push_array(scratch.arena, P2R_UDTConvertIn, udt_tasks_count); + TS_Ticket *udt_tasks_tickets = push_array(scratch.arena, TS_Ticket, udt_tasks_count); + ProfScope("types pass 4: kick off UDT build") { - //- rjf: kick off tasks - U64 task_size_itypes = 4096; - U64 tasks_count = ((U64)itype_opl+(task_size_itypes-1))/task_size_itypes; - P2R_UDTConvertIn *tasks_inputs = push_array(scratch.arena, P2R_UDTConvertIn, tasks_count); - TS_Ticket *tasks_tickets = push_array(scratch.arena, TS_Ticket, tasks_count); - for(U64 idx = 0; idx < tasks_count; idx += 1) + for(U64 idx = 0; idx < udt_tasks_count; idx += 1) { - tasks_inputs[idx].tpi_leaf = tpi_leaf; - tasks_inputs[idx].itype_first = idx*task_size_itypes; - tasks_inputs[idx].itype_opl = tasks_inputs[idx].itype_first + task_size_itypes; - tasks_inputs[idx].itype_opl = ClampTop(tasks_inputs[idx].itype_opl, itype_opl); - tasks_inputs[idx].itype_fwd_map = itype_fwd_map; - tasks_inputs[idx].itype_type_ptrs = itype_type_ptrs; - tasks_tickets[idx] = ts_kickoff(p2r_udt_convert_task__entry_point, 0, &tasks_inputs[idx]); - } - - //- rjf: join all tasks - for(U64 idx = 0; idx < tasks_count; idx += 1) - { - RDIM_UDTChunkList *udts = ts_join_struct(tasks_tickets[idx], max_U64, RDIM_UDTChunkList); - rdim_udt_chunk_list_concat_in_place(&all_udts, udts); + udt_tasks_inputs[idx].tpi_leaf = tpi_leaf; + udt_tasks_inputs[idx].itype_first = idx*udt_task_size_itypes; + udt_tasks_inputs[idx].itype_opl = udt_tasks_inputs[idx].itype_first + udt_task_size_itypes; + udt_tasks_inputs[idx].itype_opl = ClampTop(udt_tasks_inputs[idx].itype_opl, itype_opl); + udt_tasks_inputs[idx].itype_fwd_map = itype_fwd_map; + udt_tasks_inputs[idx].itype_type_ptrs = itype_type_ptrs; + udt_tasks_tickets[idx] = ts_kickoff(p2r_udt_convert_task__entry_point, 0, &udt_tasks_inputs[idx]); } } @@ -3531,6 +3522,16 @@ p2r_convert(Arena *arena, P2R_User2Convert *in) all_src_files = out->src_files; } + ////////////////////////////////////////////////////////////// + //- rjf: types pass 5: join UDT build tasks + // + RDIM_UDTChunkList all_udts = {0}; + for(U64 idx = 0; idx < udt_tasks_count; idx += 1) + { + RDIM_UDTChunkList *udts = ts_join_struct(udt_tasks_tickets[idx], max_U64, RDIM_UDTChunkList); + rdim_udt_chunk_list_concat_in_place(&all_udts, udts); + } + ////////////////////////////////////////////////////////////// //- rjf: fill output //