Author: Remi Meier <[email protected]>
Branch: stmgc-c7
Changeset: r71397:d86fc4a4ae43
Date: 2014-05-08 14:13 +0200
http://bitbucket.org/pypy/pypy/changeset/d86fc4a4ae43/
Log: add app-level hint_commit_soon for experimentation
diff --git a/lib_pypy/atomic.py b/lib_pypy/atomic.py
--- a/lib_pypy/atomic.py
+++ b/lib_pypy/atomic.py
@@ -5,7 +5,7 @@
try:
from __pypy__ import thread as _thread
- from __pypy__.thread import atomic, getsegmentlimit
+ from __pypy__.thread import atomic, getsegmentlimit, hint_commit_soon
except ImportError:
# Not a STM-enabled PyPy. We can still provide a version of 'atomic'
# that is good enough for our purposes. With this limited version,
@@ -19,6 +19,9 @@
def print_abort_info(mintime=0.0):
pass
+ def hint_commit_soon():
+ pass
+
else:
import re, sys, linecache
diff --git a/pypy/module/__pypy__/__init__.py b/pypy/module/__pypy__/__init__.py
--- a/pypy/module/__pypy__/__init__.py
+++ b/pypy/module/__pypy__/__init__.py
@@ -41,6 +41,7 @@
'longest_abort_info': 'interp_atomic.longest_abort_info',
'reset_longest_abort_info':'interp_atomic.reset_longest_abort_info',
'getsegmentlimit': 'interp_atomic.getsegmentlimit',
+ 'hint_commit_soon': 'interp_atomic.hint_commit_soon',
'error': 'space.fromcache(pypy.module.thread.error.Cache).w_error',
}
def activate(self, space):
diff --git a/pypy/module/__pypy__/interp_atomic.py
b/pypy/module/__pypy__/interp_atomic.py
--- a/pypy/module/__pypy__/interp_atomic.py
+++ b/pypy/module/__pypy__/interp_atomic.py
@@ -76,3 +76,9 @@
if space.config.translation.stm:
from rpython.rlib.rstm import reset_longest_abort_info
reset_longest_abort_info()
+
+
+def hint_commit_soon(space):
+ if space.config.translation.stm:
+ from rpython.rlib.rstm import hint_commit_soon
+ hint_commit_soon()
diff --git a/rpython/rlib/rstm.py b/rpython/rlib/rstm.py
--- a/rpython/rlib/rstm.py
+++ b/rpython/rlib/rstm.py
@@ -50,6 +50,12 @@
if_there_is_no_other)
@dont_look_inside
+def hint_commit_soon():
+ """As the name says, just a hint. Maybe calling it
+ several times in a row is more persuasive"""
+ llop.stm_hint_commit_soon(lltype.Void)
+
+@dont_look_inside
def become_inevitable():
llop.stm_become_inevitable(lltype.Void)
diff --git a/rpython/rtyper/lltypesystem/lloperation.py
b/rpython/rtyper/lltypesystem/lloperation.py
--- a/rpython/rtyper/lltypesystem/lloperation.py
+++ b/rpython/rtyper/lltypesystem/lloperation.py
@@ -438,6 +438,8 @@
'stm_should_break_transaction': LLOp(sideeffects=False),
'stm_set_transaction_length': LLOp(),
+ 'stm_hint_commit_soon': LLOp(),
+
'stm_threadlocalref_get': LLOp(sideeffects=False),
'stm_threadlocalref_set': LLOp(canmallocgc=True), # may allocate new array,
# see threadlocalref.py
diff --git a/rpython/translator/stm/funcgen.py
b/rpython/translator/stm/funcgen.py
--- a/rpython/translator/stm/funcgen.py
+++ b/rpython/translator/stm/funcgen.py
@@ -43,6 +43,9 @@
# self.obj.prebuilt_hash
+def stm_hint_commit_soon(funcgen, op):
+ return 'stmcb_commit_soon();'
+
def stm_register_thread_local(funcgen, op):
return 'pypy_stm_register_thread_local();'
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit