- 09 May, 2015 8 commits
-
-
Kevin Modzelewski authored
zip() takes varargs. django passes 3 containers to it.
-
Kevin Modzelewski authored
Fix speculations at module scope
-
Kevin Modzelewski authored
Conflicts: src/runtime/objmodel.cpp Closes #466
-
Kevin Modzelewski authored
-
Kevin Modzelewski authored
Add im_class field to BoxedInstanceMethod, implement instancemethodRepr
-
Kevin Modzelewski authored
Add support for string interning
-
Kevin Modzelewski authored
Handle map(None,...), exec with module.__dict__ as globals
-
Kevin Modzelewski authored
Singleton hcls storage strategy
-
- 08 May, 2015 9 commits
-
-
Kevin Modzelewski authored
The storage strategy per-object is the same as NORMAL, but instead of having immutable chains of hidden classes so that we can share them between instances, a SINGLETON hcls is unique to the single object that it is for. This means that it can be mutable. This has the advantage that we don't have to track all the parents of the hidden class. This is especially helpful since the cases that it's used for (Python classes and modules) tend to have a large number of attributes (>100 not uncommon). We could also use the DICT_BACKED strategy for those cases, but compared to DICT_BACKED, SINGLETON should have much better lookup performance since it is patchpoint-compatible. Adding new attributes is probably slower, and deleting attributes is probably much slower, but I think those are hopefully rare. This cuts non-jit 'import pip' memory by 15%, from 113MB to 98MB.
-
Kevin Modzelewski authored
Not only does this improve perfomance, but it somehow improves performance consistency as well.
-
Marius Wachtler authored
we could use this in much more places if performance and memory benchmarking shows it's an improvement.
-
Marius Wachtler authored
-
Kevin Modzelewski authored
import with globals
-
Kevin Modzelewski authored
It's a little bit complicated due to the fact that gdb has to be the parent so that it can have the permissions to ptrace the process that segfaults.
-
Kevin Modzelewski authored
-
Kevin Modzelewski authored
imports apparently have to look at the globals scope in order to determine how to handle relative imports and package references. Sqlalchemy for some reason does this, and once we have this sqlalchemy imports.
-
Rudi Chen authored
-
- 07 May, 2015 8 commits
-
-
Kevin Modzelewski authored
delete capi/float.cpp
-
Marius Wachtler authored
-
Kevin Modzelewski authored
I don't remember the original reasoning for having the separate capi/float.cpp, and all the other runtime/ files have their CAPI methods inline.
-
Kevin Modzelewski authored
-
Kevin Modzelewski authored
workaround for __rdtscp for now
-
Kevin Modzelewski authored
-
Kevin Modzelewski authored
put back in the Timer-based stats I removed in the stats-timer branch…
-
Chris Toshok authored
put back in the Timer-based stats I removed in the stats-timer branch, and allow stat timers to be disabled separately from the rest of the stats (disable them by default.)
-
- 06 May, 2015 5 commits
-
-
Chris Toshok authored
Stat timers
-
Chris Toshok authored
-
Chris Toshok authored
-
Chris Toshok authored
Each thread has a stack of timers (which should have automatic scope.) pushing a timer onto the stack pauses the currently running one to avoid double counting, and popping a timer resumes the previous one. also make sure we pause the current timer, and swap out the current stack of timers when swapping to/from generator stacks, since otherwise pushes/pops won't line up and we hit asserts in StatTimer. Timers and StatTimers accumulate their durations in terms of CPU ticks, which are converted to microseconds only at Stats::dump() time, calculated with our estimate of CPU frequency. Needless to say, this only works when there is no CPU stepping/scaling. There are some additions to the Timer class that allow us to get the start/end time so that we can sync up StatTimers with them, if both are used in a given piece of code. getCPUTicks() is only implemented using __rdtscp() at the moment, so won't work on anything not recent relatively recent x86. we accumulate total ticks during dumping and output both 'ticks_in_main' and 'ticks_all_timers', which should be equal.
-
Chris Toshok authored
-
- 05 May, 2015 10 commits
-
-
Kevin Modzelewski authored
These happen if you never have run the makefile build, which should become increasingly common. I didn't bother testing that this doesn't break the makefile build.
-
Kevin Modzelewski authored
fix the remaining subclass checks for list comparisons <, <=, >, >=
-
Chris Toshok authored
-
Marius Wachtler authored
-
Marius Wachtler authored
-
Chris Toshok authored
-
Kevin Modzelewski authored
Reduce memory by not caching analysis passes
-
Kevin Modzelewski authored
On the simple test of `pyston -c "import pip"`, it reduces memory usage from 194MB to 153MB (20% of the memory previously was cached analysis data). It also increases our benchmark geomean by ~1%, which isn't great, but I think we can get that back eventually and I don't think it's worth blocking this memory improvement for that.
-
Kevin Modzelewski authored
I guess in CPython, __file__ will be the path to the pyc if that's how the library was loaded. (We don't do that but that difference isn't the issue here.) So that makes these tests, which print __file__, sensitive to whether the last run of the test was through cpython (pyc exists and __file__ ends in pyc) or through pyston (pyc exists but was wasn't valid for cpython, and __file__ ends in py) Just do some canonicalization when printing
-
Kevin Modzelewski authored
- make heap dumping work again - refactor some of the heap statistics to work in OOM scenarios (ie be able to not collect the ones that would require allocation to track) - collect some hcls statistics as well - print stats to stderr rather than stdout - I think this makes more sense since it is not really part of the program output; it also makes it more likely that "PYSTON_RUN_ARGS=s" will work
-