提交 05e32875 authored 作者: James Bergstra's avatar James Bergstra

added n_calls option to CLazyLinker to accelerate repeated calls

上级 9bb6b8d6
...@@ -675,15 +675,22 @@ PyObject * ...@@ -675,15 +675,22 @@ PyObject *
CLazyLinker_call(PyObject *_self, PyObject *args, PyObject *kwds) CLazyLinker_call(PyObject *_self, PyObject *args, PyObject *kwds)
{ {
CLazyLinker * self = (CLazyLinker*)_self; CLazyLinker * self = (CLazyLinker*)_self;
static char *kwlist[] = {(char*)"time_thunks", NULL}; static char *kwlist[] = {
if (! PyArg_ParseTupleAndKeywords(args, kwds, "|i", kwlist, (char*)"time_thunks",
&self->do_timing)) (char *)"n_calls",
NULL};
int n_calls=1;
if (! PyArg_ParseTupleAndKeywords(args, kwds, "|ii", kwlist,
&self->do_timing,
&n_calls))
return NULL; return NULL;
int err = 0; int err = 0;
self->position_of_error = -1; self->position_of_error = -1;
PyObject * one = PyInt_FromLong(1); PyObject * one = PyInt_FromLong(1);
PyObject * zero = PyInt_FromLong(0); PyObject * zero = PyInt_FromLong(0);
//clear storage of pre_call_clear elements //clear storage of pre_call_clear elements
for (int call_i = 0; call_i < n_calls && (!err); ++call_i)
{
Py_ssize_t n_pre_call_clear = PyList_Size(self->pre_call_clear); Py_ssize_t n_pre_call_clear = PyList_Size(self->pre_call_clear);
assert(PyList_Check(self->pre_call_clear)); assert(PyList_Check(self->pre_call_clear));
for (int i = 0; i < n_pre_call_clear; ++i) for (int i = 0; i < n_pre_call_clear; ++i)
...@@ -712,6 +719,7 @@ CLazyLinker_call(PyObject *_self, PyObject *args, PyObject *kwds) ...@@ -712,6 +719,7 @@ CLazyLinker_call(PyObject *_self, PyObject *args, PyObject *kwds)
{ {
err = lazy_rec_eval(self, self->output_vars[i], one, zero); err = lazy_rec_eval(self, self->output_vars[i], one, zero);
} }
}
Py_DECREF(one); Py_DECREF(one);
Py_DECREF(zero); Py_DECREF(zero);
if (err) return NULL; if (err) return NULL;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论