[pypy-commit] pypy guard-value-limit: (arigo, remi) make cut-off limit configurable
Raemi
pypy.commits at gmail.com
Sat Mar 24 11:53:53 EDT 2018
Author: Remi Meier <remi.meier at gmail.com>
Branch: guard-value-limit
Changeset: r94130:3cb72c044ec2
Date: 2018-03-24 16:52 +0100
http://bitbucket.org/pypy/pypy/changeset/3cb72c044ec2/
Log: (arigo, remi) make cut-off limit configurable
diff --git a/rpython/jit/metainterp/pyjitpl.py b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -1215,9 +1215,13 @@
@arguments("box", "orgpc")
def _opimpl_guard_value(self, box, orgpc):
- if self.metainterp.guard_value_counter <= 4:
- return self.implement_guard_value(box, orgpc)
- return box
+ limit = self.metainterp.jitdriver_sd.warmstate.guard_value_limit
+ if box is self.metainterp.not_guarded_value_box or self.metainterp.guard_value_counter > limit:
+ # limit reached or guard on the same box as the first elided guard_value
+ self.metainterp.not_guarded_value_box = box
+ return box
+
+ return self.implement_guard_value(box, orgpc)
@arguments("box", "box", "descr", "orgpc")
def opimpl_str_guard_value(self, box, funcbox, descr, orgpc):
@@ -2432,6 +2436,7 @@
# specialize this function and a few other ones for the '*args'.
debug_start('jit-tracing')
self.guard_value_counter = 0
+ self.not_guarded_value_box = None
self.staticdata._setup_once()
self.staticdata.profiler.start_tracing()
assert jitdriver_sd is self.jitdriver_sd
@@ -2465,6 +2470,7 @@
key = resumedescr.get_resumestorage()
assert isinstance(key, compile.ResumeGuardDescr)
self.guard_value_counter = key.guard_value_counter + 1
+ self.not_guarded_value_box = None
# store the resumekey.wref_original_loop_token() on 'self' to make
# sure that it stays alive as long as this MetaInterp
self.resumekey_original_loop_token = resumedescr.rd_loop_token.loop_token_wref()
diff --git a/rpython/jit/metainterp/warmspot.py b/rpython/jit/metainterp/warmspot.py
--- a/rpython/jit/metainterp/warmspot.py
+++ b/rpython/jit/metainterp/warmspot.py
@@ -92,6 +92,7 @@
disable_unrolling=sys.maxint,
enable_opts=ALL_OPTS_NAMES, max_retrace_guards=15,
max_unroll_recursion=7, vec=0, vec_all=0, vec_cost=0,
+ guard_value_limit=4,
**kwds):
from rpython.config.config import ConfigError
translator = interp.typer.annotator.translator
@@ -119,6 +120,7 @@
jd.warmstate.set_param_vec(vec)
jd.warmstate.set_param_vec_all(vec_all)
jd.warmstate.set_param_vec_cost(vec_cost)
+ jd.warmstate.set_param_guard_value_limit(guard_value_limit)
warmrunnerdesc.finish()
if graph_and_interp_only:
return interp, graph
diff --git a/rpython/jit/metainterp/warmstate.py b/rpython/jit/metainterp/warmstate.py
--- a/rpython/jit/metainterp/warmstate.py
+++ b/rpython/jit/metainterp/warmstate.py
@@ -318,6 +318,9 @@
def set_param_vec_cost(self, ivalue):
self.vec_cost = ivalue
+ def set_param_guard_value_limit(self, ivalue):
+ self.guard_value_limit = ivalue
+
def disable_noninlinable_function(self, greenkey):
cell = self.JitCell.ensure_jit_cell_at_key(greenkey)
cell.flags |= JC_DONT_TRACE_HERE
diff --git a/rpython/rlib/jit.py b/rpython/rlib/jit.py
--- a/rpython/rlib/jit.py
+++ b/rpython/rlib/jit.py
@@ -561,6 +561,7 @@
'vec_cost': 'threshold for which traces to bail. Unpacking increases the counter,'\
' vector operation decrease the cost',
'vec_all': 'try to vectorize trace loops that occur outside of the numpypy library',
+ 'guard_value_limit': 'limits the chain of guard_values coming from a single guard_value',
}
PARAMETERS = {'threshold': 1039, # just above 1024, prime
@@ -579,6 +580,7 @@
'vec': 0,
'vec_all': 0,
'vec_cost': 0,
+ 'guard_value_limit': 4,
}
unroll_parameters = unrolling_iterable(PARAMETERS.items())
More information about the pypy-commit
mailing list