Skip to content

Commit

Permalink
Make the compile time flag actually atomic, not just data race free.
Browse files Browse the repository at this point in the history
  • Loading branch information
NHDaly committed Aug 18, 2021
1 parent dc0fb91 commit 213b590
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 15 deletions.
10 changes: 6 additions & 4 deletions src/aotcompile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,8 @@ void *jl_create_native(jl_array_t *methods, const jl_cgparams_t cgparams, int _p
JL_GC_PUSH1(&src);
JL_LOCK(&codegen_lock);
uint64_t compiler_start_time = 0;
if (jl_atomic_load(&jl_measure_compile_time))
uint8_t measure_compile_time = jl_atomic_load(&jl_measure_compile_time);
if (measure_compile_time)
compiler_start_time = jl_hrtime();

CompilationPolicy policy = (CompilationPolicy) _policy;
Expand Down Expand Up @@ -414,7 +415,7 @@ void *jl_create_native(jl_array_t *methods, const jl_cgparams_t cgparams, int _p
}

data->M = std::move(clone);
if (jl_atomic_load(&jl_measure_compile_time))
if (measure_compile_time)
jl_atomic_fetch_add(&jl_measure_compile_time, (jl_hrtime() - compiler_start_time));
if (policy == CompilationPolicy::ImagingMode)
imaging_mode = 0;
Expand Down Expand Up @@ -915,7 +916,8 @@ void *jl_get_llvmf_defn(jl_method_instance_t *mi, size_t world, char getwrapper,
jl_llvm_functions_t decls;
JL_LOCK(&codegen_lock);
uint64_t compiler_start_time = 0;
if (jl_atomic_load(&jl_measure_compile_time))
uint8_t measure_compile_time = jl_atomic_load(&jl_measure_compile_time);
if (measure_compile_time)
compiler_start_time = jl_hrtime();
std::tie(m, decls) = jl_emit_code(mi, src, jlrettype, output);

Expand All @@ -940,7 +942,7 @@ void *jl_get_llvmf_defn(jl_method_instance_t *mi, size_t world, char getwrapper,
m.release(); // the return object `llvmf` will be the owning pointer
}
JL_GC_POP();
if (jl_atomic_load(&jl_measure_compile_time))
if (measure_compile_time)
jl_atomic_fetch_add(&jl_measure_compile_time, (jl_hrtime() - compiler_start_time));
JL_UNLOCK(&codegen_lock); // Might GC
if (F)
Expand Down
11 changes: 8 additions & 3 deletions src/gf.c
Original file line number Diff line number Diff line change
Expand Up @@ -3160,18 +3160,23 @@ int jl_has_concrete_subtype(jl_value_t *typ)
#define typeinf_lock codegen_lock

static uint64_t inference_start_time = 0;
static uint8_t inference_is_measuring_compile_time = 0;

JL_DLLEXPORT void jl_typeinf_begin(void)
{
JL_LOCK(&typeinf_lock);
if (jl_atomic_load(&jl_measure_compile_time))
if (jl_atomic_load(&jl_measure_compile_time)) {
inference_start_time = jl_hrtime();
inference_is_measuring_compile_time = 1;
}
}

JL_DLLEXPORT void jl_typeinf_end(void)
{
if (typeinf_lock.count == 1 && jl_atomic_load(&jl_measure_compile_time))
jl_atomic_fetch_add(&jl_measure_compile_time, (jl_hrtime() - inference_start_time));
if (typeinf_lock.count == 1 && inference_is_measuring_compile_time) {
jl_atomic_fetch_add(&jl_cumulative_compile_time, (jl_hrtime() - inference_start_time));
inference_is_measuring_compile_time = 0;
}
JL_UNLOCK(&typeinf_lock);
}

Expand Down
20 changes: 12 additions & 8 deletions src/jitlayers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,8 @@ int jl_compile_extern_c(void *llvmmod, void *p, void *sysimg, jl_value_t *declrt
{
JL_LOCK(&codegen_lock);
uint64_t compiler_start_time = 0;
if (jl_atomic_load(&jl_measure_compile_time))
uint8_t measure_compile_time = jl_atomic_load(&jl_measure_compile_time);
if (measure_compile_time)
compiler_start_time = jl_hrtime();
jl_codegen_params_t params;
jl_codegen_params_t *pparams = (jl_codegen_params_t*)p;
Expand All @@ -262,7 +263,7 @@ int jl_compile_extern_c(void *llvmmod, void *p, void *sysimg, jl_value_t *declrt
if (success && llvmmod == NULL)
jl_add_to_ee(std::unique_ptr<Module>(into));
}
if (codegen_lock.count == 1 && jl_atomic_load(&jl_measure_compile_time))
if (codegen_lock.count == 1 && measure_compile_time)
jl_atomic_fetch_add(&jl_cumulative_compile_time, (jl_hrtime() - compiler_start_time));
JL_UNLOCK(&codegen_lock);
return success;
Expand Down Expand Up @@ -319,7 +320,8 @@ jl_code_instance_t *jl_generate_fptr(jl_method_instance_t *mi JL_PROPAGATES_ROOT
{
JL_LOCK(&codegen_lock); // also disables finalizers, to prevent any unexpected recursion
uint64_t compiler_start_time = 0;
if (jl_atomic_load(&jl_measure_compile_time))
uint8_t measure_compile_time = jl_atomic_load(&jl_measure_compile_time);
if (measure_compile_time)
compiler_start_time = jl_hrtime();
// if we don't have any decls already, try to generate it now
jl_code_info_t *src = NULL;
Expand Down Expand Up @@ -357,7 +359,7 @@ jl_code_instance_t *jl_generate_fptr(jl_method_instance_t *mi JL_PROPAGATES_ROOT
else {
codeinst = NULL;
}
if (codegen_lock.count == 1 && jl_atomic_load(&jl_measure_compile_time))
if (codegen_lock.count == 1 && measure_compile_time)
jl_atomic_fetch_add(&jl_cumulative_compile_time, (jl_hrtime() - compiler_start_time));
JL_UNLOCK(&codegen_lock);
JL_GC_POP();
Expand All @@ -372,7 +374,8 @@ void jl_generate_fptr_for_unspecialized(jl_code_instance_t *unspec)
}
JL_LOCK(&codegen_lock);
uint64_t compiler_start_time = 0;
if (jl_atomic_load(&jl_measure_compile_time))
uint8_t measure_compile_time = jl_atomic_load(&jl_measure_compile_time);
if (measure_compile_time)
compiler_start_time = jl_hrtime();
if (unspec->invoke == NULL) {
jl_code_info_t *src = NULL;
Expand Down Expand Up @@ -400,7 +403,7 @@ void jl_generate_fptr_for_unspecialized(jl_code_instance_t *unspec)
}
JL_GC_POP();
}
if (codegen_lock.count == 1 && jl_atomic_load(&jl_measure_compile_time))
if (codegen_lock.count == 1 && measure_compile_time)
jl_atomic_fetch_add(&jl_cumulative_compile_time, (jl_hrtime() - compiler_start_time));
JL_UNLOCK(&codegen_lock); // Might GC
}
Expand All @@ -424,7 +427,8 @@ jl_value_t *jl_dump_method_asm(jl_method_instance_t *mi, size_t world,
// so create an exception here so we can print pretty our lies
JL_LOCK(&codegen_lock); // also disables finalizers, to prevent any unexpected recursion
uint64_t compiler_start_time = 0;
if (jl_atomic_load(&jl_measure_compile_time))
uint8_t measure_compile_time = jl_atomic_load(&jl_measure_compile_time);
if (measure_compile_time)
compiler_start_time = jl_hrtime();
specfptr = (uintptr_t)codeinst->specptr.fptr;
if (specfptr == 0) {
Expand All @@ -449,7 +453,7 @@ jl_value_t *jl_dump_method_asm(jl_method_instance_t *mi, size_t world,
}
JL_GC_POP();
}
if (jl_atomic_load(&jl_measure_compile_time))
if (measure_compile_time)
jl_atomic_fetch_add(&jl_cumulative_compile_time, (jl_hrtime() - compiler_start_time));
JL_UNLOCK(&codegen_lock);
}
Expand Down

0 comments on commit 213b590

Please sign in to comment.