Commit 70a90e81 authored by Lisandro Dalcin's avatar Lisandro Dalcin

profile nogil functions: warning instead of error

parent 58080275
...@@ -1252,9 +1252,10 @@ class FuncDefNode(StatNode, BlockNode): ...@@ -1252,9 +1252,10 @@ class FuncDefNode(StatNode, BlockNode):
preprocessor_guard = None preprocessor_guard = None
profile = code.globalstate.directives['profile'] profile = code.globalstate.directives['profile']
if profile and lenv.nogil:
warning(self.pos, "Cannot profile nogil function.", 1)
profile = False
if profile: if profile:
if lenv.nogil:
error(self.pos, "Cannot profile nogil function.")
code.globalstate.use_utility_code(profile_utility_code) code.globalstate.use_utility_code(profile_utility_code)
# Generate C code for header and body of function # Generate C code for header and body of function
......
...@@ -20,6 +20,23 @@ __doc__ = u""" ...@@ -20,6 +20,23 @@ __doc__ = u"""
KeyError: 'f_noprof' KeyError: 'f_noprof'
>>> short_stats['f_raise'] >>> short_stats['f_raise']
100 100
>>> short_stats['withgil_prof']
100
>>> short_stats['withgil_noprof']
Traceback (most recent call last):
...
KeyError: 'withgil_noprof'
>>> short_stats['nogil_prof']
Traceback (most recent call last):
...
KeyError: 'nogil_prof'
>>> short_stats['nogil_noprof']
Traceback (most recent call last):
...
KeyError: 'nogil_noprof'
>>> try: >>> try:
... os.unlink(statsfile) ... os.unlink(statsfile)
... except: ... except:
...@@ -43,6 +60,10 @@ def test_profile(long N): ...@@ -43,6 +60,10 @@ def test_profile(long N):
n += f_inline(i) n += f_inline(i)
n += f_inline_prof(i) n += f_inline_prof(i)
n += f_noprof(i) n += f_noprof(i)
n += nogil_noprof(i)
n += nogil_prof(i)
n += withgil_noprof(i)
n += withgil_prof(i)
try: try:
n += f_raise(i+2) n += f_raise(i+2)
except RuntimeError: except RuntimeError:
...@@ -68,3 +89,18 @@ cdef int f_noprof(long a): ...@@ -68,3 +89,18 @@ cdef int f_noprof(long a):
cdef long f_raise(long) except -2: cdef long f_raise(long) except -2:
raise RuntimeError raise RuntimeError
@cython.profile(False)
cdef int withgil_noprof(long a) with gil:
return (a)
@cython.profile(True)
cdef int withgil_prof(long a) with gil:
return (a)
@cython.profile(False)
cdef int nogil_noprof(long a) nogil:
return a
@cython.profile(True)
cdef int nogil_prof(long a) nogil:
return a
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment