mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 23:28:48 +00:00
Remove random load balancing in thread_proc_body
This commit is contained in:
+6
-5
@@ -4562,6 +4562,7 @@ struct ThreadProcBodyData {
|
|||||||
GB_THREAD_PROC(thread_proc_body) {
|
GB_THREAD_PROC(thread_proc_body) {
|
||||||
ThreadProcBodyData *data = cast(ThreadProcBodyData *)thread->user_data;
|
ThreadProcBodyData *data = cast(ThreadProcBodyData *)thread->user_data;
|
||||||
Checker *c = data->checker;
|
Checker *c = data->checker;
|
||||||
|
GB_ASSERT(c != nullptr);
|
||||||
ThreadProcBodyData *all_data = data->all_data;
|
ThreadProcBodyData *all_data = data->all_data;
|
||||||
ProcBodyQueue *this_queue = data->queue;
|
ProcBodyQueue *this_queue = data->queue;
|
||||||
|
|
||||||
@@ -4572,13 +4573,10 @@ GB_THREAD_PROC(thread_proc_body) {
|
|||||||
gbRandom r = {}; gb_random_init(&r);
|
gbRandom r = {}; gb_random_init(&r);
|
||||||
|
|
||||||
for (ProcInfo *pi; mpmc_dequeue(this_queue, &pi); /**/) {
|
for (ProcInfo *pi; mpmc_dequeue(this_queue, &pi); /**/) {
|
||||||
// NOTE(bill): Randomize the load balancing of procs
|
consume_proc_info_queue(c, pi, this_queue, &untyped);
|
||||||
// adding more procs to the queues
|
|
||||||
u32 index = gb_random_gen_u32(&r) % data->thread_count;
|
|
||||||
ProcBodyQueue *q = all_data[index].queue;
|
|
||||||
consume_proc_info_queue(c, pi, q, &untyped);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
// Greedy Work Stealing
|
// Greedy Work Stealing
|
||||||
retry:;
|
retry:;
|
||||||
isize max_count = 0;
|
isize max_count = 0;
|
||||||
@@ -4598,6 +4596,7 @@ retry:;
|
|||||||
}
|
}
|
||||||
goto retry;
|
goto retry;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
gb_semaphore_release(&c->procs_to_check_semaphore);
|
gb_semaphore_release(&c->procs_to_check_semaphore);
|
||||||
|
|
||||||
@@ -4605,6 +4604,8 @@ retry:;
|
|||||||
}
|
}
|
||||||
|
|
||||||
void check_procedure_bodies(Checker *c) {
|
void check_procedure_bodies(Checker *c) {
|
||||||
|
GB_ASSERT(c != nullptr);
|
||||||
|
|
||||||
u32 thread_count = cast(u32)gb_max(build_context.thread_count, 1);
|
u32 thread_count = cast(u32)gb_max(build_context.thread_count, 1);
|
||||||
u32 worker_count = thread_count-1; // NOTE(bill): The main thread will also be used for work
|
u32 worker_count = thread_count-1; // NOTE(bill): The main thread will also be used for work
|
||||||
if (!build_context.threaded_checker) {
|
if (!build_context.threaded_checker) {
|
||||||
|
|||||||
+23
-23
@@ -2140,17 +2140,17 @@ int main(int arg_count, char const **arg_ptr) {
|
|||||||
init_universal();
|
init_universal();
|
||||||
// TODO(bill): prevent compiling without a linker
|
// TODO(bill): prevent compiling without a linker
|
||||||
|
|
||||||
Parser parser = {0};
|
Parser *parser = gb_alloc_item(permanent_allocator(), Parser);
|
||||||
Checker checker = {0};
|
Checker *checker = gb_alloc_item(permanent_allocator(), Checker);
|
||||||
|
|
||||||
TIME_SECTION("parse files");
|
TIME_SECTION("parse files");
|
||||||
|
|
||||||
if (!init_parser(&parser)) {
|
if (!init_parser(parser)) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
defer (destroy_parser(&parser));
|
defer (destroy_parser(parser));
|
||||||
|
|
||||||
if (parse_packages(&parser, init_filename) != ParseFile_None) {
|
if (parse_packages(parser, init_filename) != ParseFile_None) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2162,11 +2162,11 @@ int main(int arg_count, char const **arg_ptr) {
|
|||||||
|
|
||||||
TIME_SECTION("type check");
|
TIME_SECTION("type check");
|
||||||
|
|
||||||
checker.parser = &parser;
|
checker->parser = parser;
|
||||||
init_checker(&checker);
|
init_checker(checker);
|
||||||
defer (destroy_checker(&checker));
|
defer (destroy_checker(checker));
|
||||||
|
|
||||||
check_parsed_files(&checker);
|
check_parsed_files(checker);
|
||||||
if (any_errors()) {
|
if (any_errors()) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -2177,20 +2177,20 @@ int main(int arg_count, char const **arg_ptr) {
|
|||||||
if (global_error_collector.count != 0) {
|
if (global_error_collector.count != 0) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
generate_documentation(&checker);
|
generate_documentation(checker);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (build_context.no_output_files) {
|
if (build_context.no_output_files) {
|
||||||
if (build_context.show_unused) {
|
if (build_context.show_unused) {
|
||||||
print_show_unused(&checker);
|
print_show_unused(checker);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (build_context.query_data_set_settings.ok) {
|
if (build_context.query_data_set_settings.ok) {
|
||||||
generate_and_print_query_data(&checker, &global_timings);
|
generate_and_print_query_data(checker, &global_timings);
|
||||||
} else {
|
} else {
|
||||||
if (build_context.show_timings) {
|
if (build_context.show_timings) {
|
||||||
show_timings(&checker, &global_timings);
|
show_timings(checker, &global_timings);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2202,21 +2202,21 @@ int main(int arg_count, char const **arg_ptr) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TIME_SECTION("LLVM API Code Gen");
|
TIME_SECTION("LLVM API Code Gen");
|
||||||
lbGenerator gen = {};
|
lbGenerator *gen = gb_alloc_item(permanent_allocator(), lbGenerator);
|
||||||
if (!lb_init_generator(&gen, &checker)) {
|
if (!lb_init_generator(gen, checker)) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
lb_generate_code(&gen);
|
lb_generate_code(gen);
|
||||||
|
|
||||||
temp_allocator_free_all(&temporary_allocator_data);
|
temp_allocator_free_all(&temporary_allocator_data);
|
||||||
|
|
||||||
switch (build_context.build_mode) {
|
switch (build_context.build_mode) {
|
||||||
case BuildMode_Executable:
|
case BuildMode_Executable:
|
||||||
case BuildMode_DynamicLibrary:
|
case BuildMode_DynamicLibrary:
|
||||||
i32 result = linker_stage(&gen);
|
i32 result = linker_stage(gen);
|
||||||
if (result != 0) {
|
if (result != 0) {
|
||||||
if (build_context.show_timings) {
|
if (build_context.show_timings) {
|
||||||
show_timings(&checker, &global_timings);
|
show_timings(checker, &global_timings);
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -2224,19 +2224,19 @@ int main(int arg_count, char const **arg_ptr) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (build_context.show_timings) {
|
if (build_context.show_timings) {
|
||||||
show_timings(&checker, &global_timings);
|
show_timings(checker, &global_timings);
|
||||||
}
|
}
|
||||||
|
|
||||||
remove_temp_files(&gen);
|
remove_temp_files(gen);
|
||||||
|
|
||||||
if (run_output) {
|
if (run_output) {
|
||||||
#if defined(GB_SYSTEM_WINDOWS)
|
#if defined(GB_SYSTEM_WINDOWS)
|
||||||
return system_exec_command_line_app("odin run", "%.*s.exe %.*s", LIT(gen.output_base), LIT(run_args_string));
|
return system_exec_command_line_app("odin run", "%.*s.exe %.*s", LIT(gen->output_base), LIT(run_args_string));
|
||||||
#else
|
#else
|
||||||
//NOTE(thebirk): This whole thing is a little leaky
|
//NOTE(thebirk): This whole thing is a little leaky
|
||||||
String output_ext = {};
|
String output_ext = {};
|
||||||
String complete_path = concatenate_strings(heap_allocator(), gen.output_base, output_ext);
|
String complete_path = concatenate_strings(permanent_allocator(), gen->output_base, output_ext);
|
||||||
complete_path = path_to_full_path(heap_allocator(), complete_path);
|
complete_path = path_to_full_path(permanent_allocator(), complete_path);
|
||||||
return system_exec_command_line_app("odin run", "\"%.*s\" %.*s", LIT(complete_path), LIT(run_args_string));
|
return system_exec_command_line_app("odin run", "\"%.*s\" %.*s", LIT(complete_path), LIT(run_args_string));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user